如何用ffmpeg-python合并新音轨并保留原音轨与字幕?
修改方案说明
核心思路
- 保留原视频文件中的所有流(视频、原音轨、字幕),而非仅提取视频流
- 将新音频作为额外音轨添加到输出文件中
- 所有流均使用
copy编码模式,避免重新编码耗时且损失画质音质
基础修改代码
import ffmpeg # 加载原视频,保留所有内置流(视频、原音轨、字幕) input_source = ffmpeg.input('input.mkv') # 加载新增的音频文件 new_audio_track = ffmpeg.input('audio.mp3').audio # 输出合并后的文件,包含原视频所有流 + 新音轨 ffmpeg.output( input_source, new_audio_track, 'output.mkv', vcodec='copy', # 复制视频流 acodec='copy', # 复制所有音频流(原音轨+新音轨) scodec='copy' # 复制所有字幕流 ).run()
精准流控制(可选)
如果需要指定保留原视频中的特定流(比如仅保留某一条原音轨/字幕),可以用流选择语法明确指定:
import ffmpeg input_source = ffmpeg.input('input.mkv') new_audio_track = ffmpeg.input('audio.mp3').audio # 明确指定要保留的流:原视频第一条视频流、所有原音频流、所有原字幕流 + 新音轨 ffmpeg.output( input_source['v:0'], # 原视频第1条视频流(索引从0开始) input_source['a'], # 原视频所有音频流 input_source['s'], # 原视频所有字幕流 new_audio_track, 'output.mkv', vcodec='copy', acodec='copy', scodec='copy' ).run()
- 若要仅保留原视频第2条音轨,可替换为
input_source['a:1'] - 若要仅保留原视频第1条字幕,可替换为
input_source['s:0']
内容的提问来源于stack exchange,提问作者Hot Moon
相关产品推荐
相关产品推荐

