如何在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
相关产品推荐
相关产品推荐

