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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:50:32