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

Transcoder API如何配置音视频轨道可选 解决转码作业失败问题

解决方案

报错核心原因是当前配置硬编码强制要求输入必须同时包含视频、音频轨道,且所有输出mux流都强绑定两类轨道,转码作业初始化时会校验所有配置依赖的轨道是否存在,缺项就直接失败。Transcoder API没有全局的"轨道可选"开关,需要通过两个配置调整实现兼容:

1. 给所有基础流配置缺失跳过规则

给每一路定义的视频、音频基础流加上skip_if_no_input_track=True参数,作用是当输入文件找不到对应类型的轨道时,自动跳过该路基流的生成,不会直接抛出作业错误。

2. 拆分mux流,解除音视频强绑定

当前sd、hd mux流同时绑定了视频、音频基础流,就算基础流配置了跳过规则,mux流找不到绑定的目标流还是会报错。需要把纯视频、纯音频的mux流拆开定义,不要在单个mux里强制同时绑定两类轨道,最终生成的HLS manifest会自动拉取实际生成的流,不存在的流会被自动忽略。


修改后的可直接使用的配置代码如下:

job.config = transcoder_v1.types.JobConfig(
        elementary_streams=[
            transcoder_v1.types.ElementaryStream(
                key="video-stream0",
                skip_if_no_input_track=True, # 新增:无视频轨道时跳过该路流
                video_stream=transcoder_v1.types.VideoStream(
                    h264=transcoder_v1.types.VideoStream.H264CodecSettings(
                        bitrate_bps=550000,
                        frame_rate=60,
                    ),
                ),
            ),
            transcoder_v1.types.ElementaryStream(
                key="video-stream1",
                skip_if_no_input_track=True, # 新增:无视频轨道时跳过该路流
                video_stream=transcoder_v1.types.VideoStream(
                    h264=transcoder_v1.types.VideoStream.H264CodecSettings(
                        bitrate_bps=2500000,
                        frame_rate=60,
                    ),
                ),

            ),
            transcoder_v1.types.ElementaryStream(
                key="audio-stream0",
                skip_if_no_input_track=True, # 新增:无音频轨道时跳过该路流
                audio_stream=transcoder_v1.types.AudioStream(
                    codec="aac", bitrate_bps=64000
                ),
            ),
        ],
        mux_streams=[
            # 拆分纯视频mux流,仅绑定对应视频基流
            transcoder_v1.types.MuxStream(
                key="sd-video",
                container="ts",
                elementary_streams=["video-stream0"],
            ),
            transcoder_v1.types.MuxStream(
                key="hd-video",
                container="ts",
                elementary_streams=["video-stream1"],
            ),
            # 拆分纯音频mux流,仅绑定音频基流
            transcoder_v1.types.MuxStream(
                key="audio",
                container="ts",
                elementary_streams=["audio-stream0"],
            ),
        ],
        manifests=[
            transcoder_v1.types.Manifest(
                type="HLS",
                # 把所有拆分后的mux流都加入列表,不存在的流会被自动忽略
                mux_streams=["sd-video", "hd-video", "audio"],
            ),
        ],
    )

兼容效果验证

  • 输入同时包含音视频轨道:正常输出2路转码后视频+1路音频,HLS播放逻辑和原有配置完全一致
  • 输入仅含视频无音频:自动跳过音频流生成,输出2路纯视频流,HLS可正常播放视频内容
  • 输入仅含音频无视频:自动跳过2路视频流生成,输出1路纯音频流,HLS可正常播放音频内容

注:skip_if_no_input_track是Transcoder API v1版本后期追加的参数,早期GA版本未提供该能力,因此旧资料中没有提到该方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:09:58