Google Transcoder API如何配置实现音轨可选适配无音轨输入文件
解决方法
以下两个方案均支持在单次转码作业中完成适配,无需提前检测音轨也无需重复提交作业:
方案1:配置可选音轨,无音轨时输出仅视频文件
适用于允许输出文件无音轨的场景,通过Transcoder API原生的可选流配置即可实现:
config: { // 明确指定输入附件与音轨选择规则 inputAttachments: [ { key: 'input0', input: 'gs://你的输入文件存储路径', audioTracks: [ { track: 0, skipIfMissing: true // 核心参数:输入无音轨时自动跳过轨道选择,不抛出错误 } ] } ], elementaryStreams: [ { key: 'video-stream0', videoStream: {...}, }, { key: 'audio-stream0', audioStream: {...}, optional: true // 核心参数:标记该流为可选,无对应输入源时自动忽略,不触发错误 }, ], muxStreams: [ { key: 'hd', container: 'mp4', // 仍可同时写两个流,API会自动过滤不存在的可选流 elementaryStreams: ['video-stream0', 'audio-stream0'], }, ], }
方案2:无音轨时自动填充静默音轨,保证输出一定包含音轨
如果要求输出文件必须携带音轨,可以提前上传一个1秒的静默音频文件到存储桶作为兜底,配置如下:
config: { inputAttachments: [ { key: 'input0', input: 'gs://你的输入文件存储路径', audioTracks: [ { track: 0, key: 'input-audio', skipIfMissing: true } ] }, { key: 'silent-audio', input: 'gs://你的存储桶路径/静默音频文件.mp3' // 提前上传的静默音频文件路径 } ], editList: [ { key: 'final-audio', inputs: [ { key: 'input-audio', startTimeOffset: '0s' }, { key: 'silent-audio', gain: 0, duration: '${output.duration}' // 自动和输出视频时长对齐 } ], // 优先使用输入源音轨,无输入音轨时自动用静默音轨填充 inputSelectionStrategy: 'FIRST_VALID' } ], elementaryStreams: [ { key: 'video-stream0', videoStream: {...}, }, { key: 'audio-stream0', audioStream: {...}, }, ], muxStreams: [ { key: 'hd', container: 'mp4', elementaryStreams: ['video-stream0', 'audio-stream0'], }, ], }
补充说明
你之前尝试的CallOptions重试配置无法生效是正常情况:该配置属于RPC调用层面的重试规则,仅用于处理网络超时、服务端限流等RPC调用失败的场景,不适用于转码作业提交成功后执行失败的业务场景,无法实现作业执行失败后自动更换配置重试的逻辑。
内容的提问来源于stack exchange,提问作者Erich Loob
相关产品推荐
相关产品推荐

