给视频配背景音乐

avatar
作者
猴君
阅读量:0

介绍

给一段视频,想配个背景音乐,常规办法就是打开抖音或者剪映,咔咔咔一顿操作,完事儿,简单方便。但是如果你作为一个开发者呢,你又不能直接调用抖音剪映的接口吧(特别有钱定制除外)。本着自己动手丰衣足食的白嫖理念,又不想花钱又想把事儿办了,加深自己的技术理解,那就开始吧!!!

开搞

1:准备

	系统:ubuntu 20.04 	 	语言工具:python  

2:安装必要插件

	使用python:pip install ffmpy 	 	直接使用ffpmeg:apt-get install ffmpeg 

3:编写代码:Python

import os import sys from ffmpy import FFmpeg   # 添加背景音 def add_bgm_to_video(video_path: str, audio_path: str, output_dir: str, out_file: str, duration: int):     ext = os.path.basename(video_path).strip().split('.')[-1]     result = os.path.join(output_dir, '{}.{}'.format(out_file, ext))     ff = FFmpeg(inputs={video_path: None, audio_path: None},                 outputs={                     result: r'-ac 1 -acodec aac -ar 48000 -filter_complex [1]volume=0.5[vo1];['                             'vo1]aloop=loop=-1:size=2e+09[ao1];[ao1]atrim=0:{}[ap1];[ap1]adelay=0|0[a1];[a1]['                             '0:a]amix=2:dropout_transition={} -g 30 -keyint_min 30 -level 3.1 -preset:v medium '                             '-profile:v baseline -sc_threshold 0 -vcodec libx264'.format(                         int(duration) // 100, int(duration))})     ff.run()     return result  video_path = sys.argv[1] #你的视频地址 audio_path = sys.argv[2] #你的背景音乐地址 output_dir = sys.argv[3] #输出文件夹 file_name = sys.argv[4]	#输出文件名称 duration = sys.argv[5]	#视频时长,这个要以视频时长为准,音频如果小于这个时长,会自动循环背景音乐,直至视频结束 new_path = add_bgm_to_video(video_path,audio_path,output_dir,file_name,duration) print(new_path) 

4:直接使用 FFmpeg 【也可以写成shell文件,通过 bash 加传参的方式进行调用】

ffmpeg -i 目标视频.mp4 -i 背景音乐.mp3 -ac 1 -acodec aac -ar 48000 -filter_complex [1]volume=0.5[vo1] [vo1]aloop=loop=-1 size=2e+09[ao1];[ao1]atrim=0:视频时长[ap1] [ap1]adelay=0|0[a1] [a1][0:a]amix=2:dropout_transition=视频时长x100 -g 30 -keyint_min 30 -level 3.1 -preset:v medium -profile:v baseline -sc_threshold 0 -vcodec libx264 合成后的视频.mp4 

注意

我这里是让背景音乐变为了原声一半的音高,[1]volume=0.5[vo1]
下面的duration 我是除以100然后向下取整了,我是从另外一种语言里直接调用python执行文件,传值的时候这个 dropout_transition 总是识别成一串很长的数字,然后系统报错,我就在传过来的时候先让时长乘以100,然后这边再除以100,这种方式就没问题,就很神奇,也没有找到具体的确切原因。直接用 ffmpeg 命令调用也是没问题,后续慢慢研究研究。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!