You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用FFmpeg的concat合并包含无声视频片段的文件?

解决FFmpeg混合无声/有声视频合并的问题

你的原命令报错是因为concat demuxer要求所有输入文件的流数量、编码参数完全一致——无声视频没有音频流,有声视频有,直接用-c copy会导致流不匹配,最终输出丢失音频。下面给你两种可行方案:


方案一:预处理无声视频,添加静音音频

先给所有无音频的PPT导出视频添加静音流,再用原concat逻辑合并:

  1. 对每个无声视频执行以下命令,生成带静音音频的版本(以title.mp4为例):
ffmpeg -i title.mp4 -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -c:v copy -c:a aac title_with_audio.mp4
  • 若你的有声视频音频参数不同(比如采样率是48000),可先用ffprobe welcome.mp4查看,再修改anullsrc的对应参数。
  1. 修改videos.txt,把所有无声视频的文件名替换成处理后的带音频版本,比如把file 'title.mp4'改成file 'title_with_audio.mp4'。
  2. 执行合并命令(如果所有视频编码参数一致,可保留-c copy加速;否则去掉-c copy让FFmpeg自动重新编码):
ffmpeg -f concat -i videos_updated.txt -c:v copy -c:a copy output.mp4

方案二:用filter_complex一次性处理合并(无需预处理)

直接通过滤镜链给无声视频实时添加静音,同时合并所有视频,一步到位:

ffmpeg \
-i title.mp4 \
-i welcome.mp4 \
-i introductions_slide.mp4 \
-i introductions.mp4 \
-i presentation_part_1_slide.mp4 \
-i presentation_part_1.mp4 \
-i presentation_part_2_slide.mp4 \
-i presentation_part_2a.mp4 \
-i presentation_part_2b.mp4 \
-i questions_and_answers_slide.mp4 \
-i questions_and_answers.mp4 \
-filter_complex "
# 处理无声视频:保留视频流,生成静音音频流
[0:v]setpts=PTS-STARTPTS[v0];
anullsrc=channel_layout=stereo:sample_rate=44100[a0];
# 处理有声视频:同步视频/音频时间轴
[1:v]setpts=PTS-STARTPTS[v1];
[1:a]asetpts=PTS-STARTPTS[a1];
# 重复上述逻辑处理剩余视频
[2:v]setpts=PTS-STARTPTS[v2];
anullsrc=channel_layout=stereo:sample_rate=44100[a2];
[3:v]setpts=PTS-STARTPTS[v3];
[3:a]asetpts=PTS-STARTPTS[a3];
[4:v]setpts=PTS-STARTPTS[v4];
anullsrc=channel_layout=stereo:sample_rate=44100[a4];
[5:v]setpts=PTS-STARTPTS[v5];
[5:a]asetpts=PTS-STARTPTS[a5];
[6:v]setpts=PTS-STARTPTS[v6];
anullsrc=channel_layout=stereo:sample_rate=44100[a6];
[7:v]setpts=PTS-STARTPTS[v7];
[7:a]asetpts=PTS-STARTPTS[a7];
[8:v]setpts=PTS-STARTPTS[v8];
[8:a]asetpts=PTS-STARTPTS[a8];
[9:v]setpts=PTS-STARTPTS[v9];
anullsrc=channel_layout=stereo:sample_rate=44100[a9];
[10:v]setpts=PTS-STARTPTS[v10];
[10:a]asetpts=PTS-STARTPTS[a10];
# 合并所有处理后的流,n=11对应11个输入视频
[v0][a0][v1][a1][v2][a2][v3][a3][v4][a4][v5][a5][v6][a6][v7][a7][v8][a8][v9][a9][v10][a10]concat=n=11:v=1:a=1[v][a]
" \
-map "[v]" -map "[a]" -c:v libx264 -c:a aac output.mp4

内容的提问来源于stack exchange,提问作者Patrick Vellia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:09:25