解决FFmpeg合成视频无声音问题的技术求助
修复FFmpeg拼接视频无声音问题
问题根源
原命令存在两个关键问题导致输出无声音:
concat=n=2:v=1:a=0参数中的a=0明确指定忽略音频轨道,仅拼接视频- 最终仅通过
-map "[out]"映射了视频输出流,完全未处理音频部分
修复后的命令
基础修复版(适用于音频参数一致的情况)
ffmpeg -i intro.mp4 -i video.mp4 -i watermark.jpg -filter_complex "[0:v]scale=854x480[intro_v];[0:a][1:a]concat=n=2:v=0:a=1[out_a];[1:v][2:v]overlay=x=10:y=10,drawtext=text='TEXT':box=1:boxborderw=5:boxcolor=black:x=(w-text_w)/2:y=h-th:fontsize=30:fontcolor=white:enable='between(t,0,15)'[main_v];[intro_v][main_v]concat=n=2:v=1:a=0[out_v]" -map "[out_v]" -map "[out_a]" -pix_fmt yuv420p -c:a copy -c:v libx264 out.mp4
兼容版(适用于音频参数不一致的情况)
如果intro.mp4和video.mp4的音频采样率、声道数等参数不同,需先统一音频参数再拼接:
ffmpeg -i intro.mp4 -i video.mp4 -i watermark.jpg -filter_complex "[0:v]scale=854x480[intro_v];[0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo[intro_a];[1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo[main_a];[intro_a][main_a]concat=n=2:v=0:a=1[out_a];[1:v][2:v]overlay=x=10:y=10,drawtext=text='TEXT':box=1:boxborderw=5:boxcolor=black:x=(w-text_w)/2:y=h-th:fontsize=30:fontcolor=white:enable='between(t,0,15)'[main_v];[intro_v][main_v]concat=n=2:v=1:a=0[out_v]" -map "[out_v]" -map "[out_a]" -pix_fmt yuv420p -c:a copy -c:v libx264 out.mp4
修改说明
- 音频拼接处理:新增音频流拼接逻辑,将
intro.mp4和video.mp4的音频轨道合并为一个输出音频流[out_a] - 双流映射:通过
-map "[out_v]" -map "[out_a]"同时映射视频和音频流到输出文件 - 兼容性优化:指定视频编码为
libx264、像素格式为yuv420p,确保输出视频在多数播放器中正常播放;音频保持-c:a copy直接复制,避免编码损失 - 参数统一(兼容版):使用
aformat滤镜统一音频采样率、声道和格式,解决因音频参数不一致导致的拼接失败问题
内容的提问来源于stack exchange,提问作者deniz keskin
相关产品推荐
相关产品推荐

