阅读量: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 命令调用也是没问题,后续慢慢研究研究。