用FFmpeg将视频和音频合并为视频
🎬 视音频合并在创作中的应用
将一条音频与一段视频合并为有声视频在多种创作场景中广泛使用:
- 为无声视频配音:给屏幕录制、动画、延时摄影等无声素材配上旁白或音乐,一条命令即可封装完成。
- 替换原声:用新的配乐或解说替换视频原有音轨,视频流无需重新编码,画质无损。
- 叠加背景音乐:在保留原声的同时混入背景音乐,适合Vlog、教学演示等场景。
📖 FFmpeg视频音频合并详解
FFmpeg把音频合并进视频,本质是封装(mux)或混音。封装是把两个输入的流放进同一个输出容器;混音则是用 amix 滤镜把多条音轨叠加为一条。核心参数如下:
-map:显式指定输出包含哪些流。-map 0:v取第一个输入的视频,-map 1:a取第二个输入的音频。不用-map时FFmpeg会自动选择流,多音轨输入时容易出错,建议显式指定。-c copy:直接拷贝流数据、不重新编码。前提是输出容器能容纳这两个流的编码格式,例如MP4容器一般要求音频为AAC,若音频是MP3可能需要转码。-c:a aac:只对音频重新编码为AAC,视频流仍用-c:v copy保持无损,兼顾兼容性与速度。-shortest:以较短的一路为准结束输出。视频比音频短时必须加上,否则输出会停在较长一路的结尾(画面定格或静音)。amix滤镜:amix=inputs=2:duration=first把两条音轨混合,duration=first表示以第一条音轨时长为准。适合保留原声同时叠加背景音乐。-itsoffset 秒数:把某路输入整体延后指定秒数再参与合并,可实现音频延迟出现的配音效果。
广告
{{v.name}}
将音频合并进无声视频(直接封装,速度最快),代码如下
$ ffmpeg -i video.mp4 -i audio.m4a -map 0:v -map 1:a -c copy output.mp4
用新音频替换视频原有音轨(音频转AAC,视频无损),代码如下
$ ffmpeg -i video.mp4 -i audio.mp3 -map 0:v -map 1:a -c:v copy -c:a aac -shortest output.mp4
以较短一路为准,避免视频结尾定格或静音,代码如下
$ ffmpeg -i video.mp4 -i audio.mp3 -map 0:v -map 1:a -c:v copy -c:a aac -shortest output_short.mp4
保留原声并叠加背景音乐(混音),代码如下
$ ffmpeg -i video.mp4 -i bgm.mp3 -filter_complex "[0:a][1:a]amix=inputs=2:duration=first[a]" -map 0:v -map "[a]" -c:v copy -c:a aac output_mix.mp4
降低背景音乐音量后再混入,避免盖过原声,代码如下
$ ffmpeg -i video.mp4 -i bgm.mp3 -filter_complex "[1:a]volume=0.3[bgm];[0:a][bgm]amix=inputs=2:duration=first[a]" -map 0:v -map "[a]" -c:v copy -c:a aac output_bgm.mp4
让音频延后5秒再出现(配音延迟效果),代码如下
$ ffmpeg -i video.mp4 -itsoffset 5 -i audio.mp3 -map 0:v -map 1:a -c:v copy -c:a aac output_delay.mp4