给视频配背景音乐

6 篇文章 0 订阅
5 篇文章 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 命令调用也是没问题,后续慢慢研究研究。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值