FFmpeg将带时间偏移的多段音频合并到视频,adelay过滤器报错求解
问题原因
Ubuntu 20.04 官方软件源默认搭载的 FFmpeg 版本为 4.2.x 系列,该版本的 adelay 滤镜语法和新版存在差异,你用到的两个特性在旧版本中均不支持:
- 不支持带时间单位(如
s/S)的延迟值输入,仅支持直接填写毫秒为单位的整数 - 不支持
delays=参数前缀与all=1参数,旧版本直接填写延迟值即可自动应用到所有声道
解决方法
方法1:修改命令适配旧版 FFmpeg(无需换版本,最快生效)
将所有延迟值转换为毫秒,删除delays=前缀与all=1参数,修改后的完整命令如下:
ffmpeg -y -i earth.mp4 -i 1.wav -i 2.wav -i 3.wav -filter_complex "[1]adelay=5000[r1]; [2]adelay=8000[r2]; [3]adelay=15000[r3]; [r1][r2][r3]amix=inputs=3[a]" -map 0:v -map "[a]" -codec:v copy output.mp4
注:你原命令中第二个音频的
8000S大写S是采样数单位,如果你实际需要的是8秒延迟,直接填8000即可;如果确实需要按采样数设置延迟,就需要用方法2升级FFmpeg。
如果发现混合后的音频音量明显降低,可以在amix后增加音量补偿,比如3个音频混合就把音量放大3倍:
ffmpeg -y -i earth.mp4 -i 1.wav -i 2.wav -i 3.wav -filter_complex "[1]adelay=5000[r1]; [2]adelay=8000[r2]; [3]adelay=15000[r3]; [r1][r2][r3]amix=inputs=3,volume=3[a]" -map 0:v -map "[a]" -codec:v copy output.mp4
方法2:升级FFmpeg到4.4及以上版本(支持原版命令语法)
如果需要使用带单位的延迟写法等新特性,可以通过第三方PPA安装新版FFmpeg:
# 卸载原有旧版FFmpeg sudo apt remove --purge ffmpeg -y # 添加FFmpeg 4.x PPA源 sudo add-apt-repository ppa:savoury1/ffmpeg4 -y sudo apt update # 安装新版FFmpeg sudo apt install ffmpeg -y
安装完成后你原本写的命令就可以正常运行,注意确认8000S是否是你需要的采样数延迟,如果是要8秒延迟建议改成8s避免歧义。
内容的提问来源于stack exchange,提问作者Andrews Gilbert
相关产品推荐
相关产品推荐

