等效标题:
- 使用ffmpeg解决音画不同步的问题
- 使用ffmpeg在特定时间向视频文件添加音频
- 使用ffmpeg提取视频和音频
上回书说到在录制直播Live的时候声音“二重奏”,因为还想再回味这次Live于是前往BT搜索网站搜到了其他人上传的从B站外网站抓取的视频,但是视频帧率和码率都不如我之前录制的。本篇文章将讲述我如何把录制的视频和从下载的视频中提出的音频相混合,并且让它们音画同步。
使用ffmpeg命令进行操作的好处
- 自由软件,完全免费,省的花钱购买或费力破解
- 导出速度快,不影响原来的参数
- 不重新渲染,占用低
安装ffmpeg请自行搜索,Ubuntu系统可以直接使用apt install安装。
0、目前手上的素材
- 先前使用OBS录制的直播(要使用它的画面)
- 网上下载的视频(要使用它的音频,但直接插入会音画不同步)
1、将视频的画面单独提取出来
使用以下命令
ffmpeg -i "源视频的名称或路径.扩展名" -vcodec copy -an 输出视频名.mp4
程序会将您的源视频的画面排除声音保存为“输出视频名.mp4”。
2、将视频的音频单独提取出来
使用以下命令
ffmpeg -i "源视频的名称或路径.扩展名" -vn -codec copy 输出音频名.m4a
程序会将您的源视频的声音保存为“输出音频名.m4a”,也可以换用其他格式如mp3。
3、确定插入音频时间
如果您知道在哪插入音频可跳过此步。您可以通过各种方法确定,此处提供一种可行的粗糙方法:
由于笔者是Ubuntu系统,遂选择使用Kdenlive进行。
打开Kdenlive,新建一个项目,由于不使用此软件输出您可以按情况选择预设。
首先将两个视频文件拖入“项目箱”中,然后将他们拖入各自占一个视频音频轨道。
静音原视频音轨和关闭下载的视频画面,通过左右调整音频把音轨调整到最佳位置。可以放大观察波形开始处来精确调节。这里大概是音频晚出现04:11秒多一点。精细调节可以在输出视频的时候进行。
(测试的时候直接用kdenlive输出速度极慢,所以才寻求命令方法)
4、在特定时间向视频文件添加音频
这就到了最后一步,将视频和音频合并起来。使用以下命令进行:
ffmpeg -i "源视频的名称或路径.扩展名" -i "源音频的名称或路径.扩展名" -filter_complex "aevalsrc=0:d=时间[s1];[s1][1:a]concat=n=2:v=0:a=1[aout]" -c:v copy -map 0:v -map [aout] 输出文件名.mp4
温馨提示:这里的源视频/音频为此次操作的源视频/音频,并非与上边源视频/音频一致。这里指去掉声音的视频和从视频输出来的音频。
时间形如4:11(4单位为秒)或4000(毫秒)甚至4:11.05这种奇葩形式都可以。
程序会将您的源视频的声音保存为“输出音频名.mp4”,很快就会得到一个和原文件和大小差不多的文件。若您对这个时间间隔不满意可以再行调整。
如果您遇到其它问题可以在评论提出。
参考资料:
bug fix:
你忘记添加双引号了
ffmpeg -i “源视频的名称或路径.扩展名” -i “源音频的名称或路径.扩展名” -filter_complex “aevalsrc=0:d=时间[s1];[s1][1:a]concat=n=2:v=0:a=1[aout]” -c:v copy -map 0:v -map “[aout]” 输出文件名.mp4