google-cloud-transcoder - 来自规范配置的 WebM Spritesheet/转码在谷歌云中失败
问题描述
来自规范配置的 WebM Spritesheet/Transcode 无法完成并显示错误消息:请求字段 config.editList[0].startTimeOffset 为 0s,预期开始时间小于此原子的所有输入的最短持续时间 (0s)。
使用的配置来自https://cloud.google.com/transcoder/docs/how-to/generate-spritesheet#generate_image_periodically
项目编号:PROJECT-NUMBER
作业 ID:projects/PROJECT-NUMBER/locations/us-central1/jobs/JOB-ID
地点:us-central1
作业配置
{
"name": "projects/PROJECT-NUMBER/locations/us-central1/jobs/JOB-ID",
"config": {
"inputs": [
{
"key": "input0",
"uri": "gs://input_video.webm"
}
],
"editList": [
{
"key": "atom0",
"inputs": [
"input0"
],
"startTimeOffset": "0s"
}
],
"elementaryStreams": [
{
"videoStream": {
"codec": "h264",
"profile": "high",
"preset": "veryfast",
"heightPixels": 360,
"widthPixels": 640,
"pixelFormat": "yuv420p",
"bitrateBps": 550000,
"rateControlMode": "vbr",
"crfLevel": 21,
"vbvSizeBits": 550000,
"vbvFullnessBits": 495000,
"gopDuration": "3s",
"entropyCoder": "cabac",
"frameRate": 60
},
"key": "video-stream0"
},
{
"audioStream": {
"codec": "aac",
"bitrateBps": 64000,
"channelCount": 2,
"channelLayout": [
"fl",
"fr"
],
"sampleRateHertz": 48000
},
"key": "audio-stream0"
}
],
"muxStreams": [
{
"key": "sd",
"fileName": "sd.mp4",
"container": "mp4",
"elementaryStreams": [
"video-stream0",
"audio-stream0"
]
}
],
"output": {
"uri": "gs://output/"
},
"spriteSheets": [
{
"format": "jpeg",
"filePrefix": "small-sprite-sheet",
"spriteWidthPixels": 64,
"spriteHeightPixels": 32,
"startTimeOffset": "0s",
"interval": "7s",
"quality": 100
},
{
"format": "jpeg",
"filePrefix": "large-sprite-sheet",
"spriteWidthPixels": 128,
"spriteHeightPixels": 72,
"startTimeOffset": "0s",
"interval": "7s",
"quality": 100
}
]
},
"state": "FAILED",
"failureReason": "Job validation failed: Request field config.editList[0].startTimeOffset is 0s, expected start time less than the minimum duration of all inputs for this atom (0s).",
"ttlAfterCompletionDays": 30
}
解决方案
看起来我们为输入计算的持续时间是 0 秒。所以要么输入为空,要么我们无法计算输入的持续时间。你知道是不是前者吗?对于后者,如果客户在他们的 editList 中提供了一个 endTimeOffset,那么我们应该使用这个持续时间,这样可以克服这个验证错误。
完全错过了评论#1中的输入链接,对此感到抱歉!所以当我在输入上运行 ffprobe 时,我得到
Metadata:
encoder : Chrome
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)
Stream #0:1(eng): Video: h264 (Baseline), yuv420p(progressive), 640x480 [SAR 1:1 DAR 4:3], 29.97 fps, 29.97 tbr, 1k tbn, 2k tbc (default)
我们确实生成了 editList,但在这种情况下,我们无法从输入中获得有效的持续时间。我的猜测是,这在以前是有效的,因为使用的输入包含计时元数据,尽管我可以帮助确认您是否有来自成功完成的工作的输入。如果可能,我建议在作业配置中指定 endTimeOffset(特别是如果从输入到输入使用不同的编码)。
推荐阅读
- c++ - 使用 typedef 声明函数有什么意义?
- grpc - 如何在 Asylo 的 GrPC 服务器配置中写入服务器地址?
- android - 如何在 android 设备和 python 脚本之间建立通信?
- python - 如何根据来自发布请求的 URL 的 ID 创建具有 FK 字段的 Django 模型?
- perl - 如何将 perl 安装到 /usr/local/bin
- node.js - 无法更新基本查看器的 Revit 模型
- python - 如何使用 functools 和 queues 中的 Pools、Partial
- regex - Python re.match 包括可选组,即无
- python - 正在使用“is (CustomClass)”安全地检测 Python 中的未初始化值
- swift - 快速缩放两个重叠的图像