FFmpeg双GoPro视频并排合成后实现音频切换的技术问询
问题描述
我用两台GoPro相机拍摄了视频,已通过FFmpeg将它们合成为左右并排的单视频,当前音频被混合为双声道立体声,可同时听到两台相机的音频。
双声道立体声合成命令:
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[0:v][1:v]hstack=inputs=2[v]; [0:a][1:a]amerge[a]" -map "[v]" -map "[a]" -ac 2 side-by-side.mp4
我希望播放该并排视频时,能切换两台相机的音频(cam1或cam2)。
首次尝试:去掉-ac 2参数生成四声道音频:
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[0:v][1:v]hstack=inputs=2[v]; [0:a][1:a]amerge[a]" -map "[v]" -map "[a]" side-by-side.mp4
但多数播放器无法在播放时轻松选择1+2或3+4声道。
随后尝试添加语言标记:
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[0:v][1:v]hstack=inputs=2[v]; [0:a][1:a]amerge[a]" -map "[v]" -map "[a]" -metadata:s:a:0 language=ger -metadata:s:a:1 language=eng side-by-side.mp4
但此方法有误,最终仅能看到一条含四声道的德语音频轨道,无法实现切换。
请问如何将cam1的双声道设为德语、cam2的双声道设为英语,以便通过播放器的多语言功能切换相机音频?
解决方案
你的核心问题是错误地将两个音频合并成了一个四声道流,而不是保留两个独立的音频轨道。要实现通过播放器语言切换功能选择对应相机的音频,需要分别保留两个相机的原始音频轨道,再为每个轨道添加语言标记。
正确的FFmpeg命令如下:
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[0:v][1:v]hstack=inputs=2[v]" -map "[v]" -map 0:a -map 1:a -metadata:s:a:0 language=ger -metadata:s:a:1 language=eng side-by-side.mp4
命令解释:
-filter_complex "[0:v][1:v]hstack=inputs=2[v]":仅处理视频流,将两个视频左右拼接成一个新的视频流[v],不触碰音频流。-map "[v]":指定输出拼接后的视频流。-map 0:a -map 1:a:分别将第一个输入文件(video1.mp4)的音频流、第二个输入文件(video2.mp4)的音频流添加为输出文件的两条独立音频轨道。-metadata:s:a:0 language=ger:标记第一条音频轨道(对应video1)为德语。-metadata:s:a:1 language=eng:标记第二条音频轨道(对应video2)为英语。
这样生成的视频文件会包含两条独立的双声道音频轨道,播放器的语言切换功能就能直接选择对应相机的音频了。
内容的提问来源于stack exchange,提问作者miridigital
相关产品推荐
相关产品推荐

