问题
我想做的只是使用@google-cloud/video-transcoder (TranscoderServiceClient v1)从node.js 的存储桶中转换和压缩视频文件。单个输入文件和单个输出。输入文件可能有也可能没有音轨。当文件包含音轨时,一切都会按预期工作,但如果不包含音轨,我会收到代码 3 的错误:
\atom atom0 does not have any inputs (input0) with an audio track
Run Code Online (Sandbox Code Playgroud)
目前我能想到的唯一选择是:
pubsub侦听作业错误并再次运行失败的作业,但没有音频流(使其正常工作)。ffprobe来确定文件中是否有音轨。但是,我不希望读取该文件两次:一次用于确定可用轨道,然后进行转码。我不想将这项工作运行两次。我在文档中没有找到有关如何仅包含音轨(如果存在)的内容(或者如果音轨不存在则将其替换为空音轨)。
当前配置:
config: {
elementaryStreams: [
{
key: 'video-stream0',
videoStream: {...},
},
{
key: 'audio-stream0',
audioStream: {...},
},
],
muxStreams: [
{
key: 'hd',
container: 'mp4',
elementaryStreams: ['video-stream0', 'audio-stream0'],
},
],
}
Run Code Online (Sandbox Code Playgroud)
使用的文档:
我正在构建一个平台,允许用户将一些视频文件(20-40 秒)从手机上传到服务器。所有这些上传目前都运行良好,文件通过nodejs云功能存储在谷歌存储桶中。
现在我想创建一个 gcp 转码器作业,它将上传的 .mp4 视频文件转换为 .hls 视频流,其中 .ts 块的持续时间为 2-4 秒。
可能成功的场景:
functions.storage.object().onFinalize [完成]onFinalize触发 Google Cloud Job,将 mp4 转换为 hls。[我们在这儿]将不胜感激任何有关创造此类工作的帮助。我正在将 firebase 云功能与 nodejs 一起使用。
ffmpeg node.js google-cloud-platform google-cloud-transcoder