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

如何在ffmpeg-python中使用多个map参数实现不同分辨率输出

ffmpeg-python 多map参数配置方法

首先你需要先完成前置滤镜处理,生成你需要输出的多路子流,分别对应你示例中的[v1out]、[v2out]两个流标签,之后在输出阶段按顺序传入多组流、配置对应流的编码参数即可。

完整代码示例

import ffmpeg

# 读取输入文件
input = ffmpeg.input("input.mp4")

# 生成两路不同分辨率的输出流,对应你打标签的v1out、v2out
v1out = input.video.filter("scale", 1920, 1080)
v2out = input.video.filter("scale", 1280, 720)

# 配置输出,按顺序传入两路流,再对应配置每一路的编码参数
(
    ffmpeg.output(
        v1out,
        v2out,
        "output.m3u8", # 多码率场景通常输出HLS分片,也可以换为其他输出格式
        **{
            "c:v:0": "libx264",
            "b:v:0": "1900k",
            "bufsize:v:0": "3800k",
            "c:v:1": "libx264",
            "b:v:1": "900k",
            "bufsize:v:1": "1800k"
        }
    )
    .overwrite_output()
    .run()
)

可选的显式map写法

如果你需要更清晰的对应原生ffmpeg的-map参数逻辑,也可以用map()方法逐个添加流:

(
    ffmpeg.output("output.m3u8")
    .map(v1out) # 对应第一个 -map [v1out]
    .map(v2out) # 对应第二个 -map [v2out]
    .global_args(
        "-c:v:0", "libx264",
        "-b:v:0", "1900k",
        "-bufsize:v:0", "3800k",
        "-c:v:1", "libx264",
        "-b:v:1", "900k",
        "-bufsize:v:1", "1800k"
    )
    .overwrite_output()
    .run()
)

注意你提供的原生ffmpeg参数存在笔误:第二路的码率参数写为了-b:v:0,实际应该为-b:v:1,否则参数会互相覆盖导致第二路码率配置不生效,上述示例已经修正了这个问题。

内容的提问来源于stack exchange,提问作者kamoloff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:15:05