使用ffmpeg拼接双视频保留原音频时第二路音频丢失如何解决
问题原因
你当前使用的ffmpeg命令仅配置了视频流的拼接逻辑,没有对两路输入的音频流做拼接处理,ffmpeg默认只会取第一路输入的音频作为输出,因此会丢失第二个视频的音频。
调整方案
需要修改filter_complex参数,新增音频流的处理和拼接逻辑,同时显式映射拼接后的音视频流到输出文件,调整后的完整命令如下:
applyCommand(new String[]{ "-y", "-ss", valuefrom, "-t", valueto, "-i", path1, "-ss", valuefrom2, "-t", valueto2, "-i", path2, "-strict", "experimental", "-filter_complex", "[0:v]scale=320x240,setsar=1:1[v0];[1:v]scale=320x240,setsar=1:1[v1];[0:a]aformat=sample_fmts=fltp:sample_rates=22050:channel_layouts=stereo[a0];[1:a]aformat=sample_fmts=fltp:sample_rates=22050:channel_layouts=stereo[a1];[v0][a0][v1][a1]concat=n=2:v=1:a=1[outv][outa]", "-map", "[outv]", "-map", "[outa]", "-ab", "48000", "-ac", "2", "-ar", "22050", "-s", "320x240", "-r", "15", "-b", "2097k", "-vcodec", "mpeg4", Saving_path });
核心改动说明
- 新增两路输入音频的格式化处理:通过
aformat过滤器统一两路音频的采样格式、采样率、声道布局,避免因音频参数不匹配导致拼接失败 - 修改concat过滤器配置:新增
a=1参数标识需要输出1路拼接后的音频,同时按「视频流0+音频流0+视频流1+音频流1」的顺序传入concat过滤器 - 新增
-map参数:显式指定输出使用拼接完成的视频流和音频流,避免ffmpeg默认选流逻辑导致的内容异常
内容的提问来源于stack exchange,提问作者Sardar Usman
相关产品推荐
相关产品推荐

