Elastic Transcoder 修剪时间 - 准确性问题
Elastic Transcoder trimming time - accuracy problem
我正在尝试将视频 trim 编码为 精确 入点和出点,但我注意到输出缺乏一些精度。
例如,我知道我的剪辑应该从 1.61s
开始,持续时间为 2.32s
,所以我这样配置管道作业:
{
PipelineId: ___,
Input: {
Key: ___,
FrameRate: 'auto',
Resolution: 'auto',
AspectRatio: 'auto',
Interlaced: 'auto',
Container: 'auto',
TimeSpan: {
StartTime: '00:00:01.610',
Duration: '00:00:02.320'
}
},
Outputs: [{
Key: ___,
PresetId: ___,
}]
}
不过,输出的持续时间为 2.36s
,而且——很难确认——但入点似乎提前了几帧。
输入视频是 100fps,所以当给出精度为 1/100 秒的计时信息时,我希望入点和出点的精度相差不大。 (也许一帧取决于时间相对于帧的位置的定义。)
我怀疑它可能是从最近的 I 帧 trim 而不是最近的 实际 帧。如果是这样,有没有办法强制它在预期位置 trim?
就上下文而言,视频应与其他外部数据同步,这就是入点和持续时间对于获得正确性至关重要的原因。
经过进一步调查,我很确定出了什么问题。我生成了一个带有内置时间码的测试视频,并以各种格式导出。它们都被正确地修剪了。因此,这不是 Elastic Beanstalk 中的一般 问题,因为它适用于这些文件。
然后我在没有裁剪的情况下对原始视频进行了编码,我可以看到输出文件要短得多。原始长度为 6.90s
,但输出为 6.12s
。然后我在本地使用 FFMPEG 转换了同一个文件,它的输出是 6.08s
.
看来原始视频的编码方式(部分)与 Elastic Transcoder 和 FFMPEG 都不兼容。原始视频是使用古老的编解码器 - Microsoft Video 1 - 使用未知编码器编码的。我假设它的某些 属性 根本无法再被现代工具正确读取。
我正在尝试将视频 trim 编码为 精确 入点和出点,但我注意到输出缺乏一些精度。
例如,我知道我的剪辑应该从 1.61s
开始,持续时间为 2.32s
,所以我这样配置管道作业:
{
PipelineId: ___,
Input: {
Key: ___,
FrameRate: 'auto',
Resolution: 'auto',
AspectRatio: 'auto',
Interlaced: 'auto',
Container: 'auto',
TimeSpan: {
StartTime: '00:00:01.610',
Duration: '00:00:02.320'
}
},
Outputs: [{
Key: ___,
PresetId: ___,
}]
}
不过,输出的持续时间为 2.36s
,而且——很难确认——但入点似乎提前了几帧。
输入视频是 100fps,所以当给出精度为 1/100 秒的计时信息时,我希望入点和出点的精度相差不大。 (也许一帧取决于时间相对于帧的位置的定义。)
我怀疑它可能是从最近的 I 帧 trim 而不是最近的 实际 帧。如果是这样,有没有办法强制它在预期位置 trim?
就上下文而言,视频应与其他外部数据同步,这就是入点和持续时间对于获得正确性至关重要的原因。
经过进一步调查,我很确定出了什么问题。我生成了一个带有内置时间码的测试视频,并以各种格式导出。它们都被正确地修剪了。因此,这不是 Elastic Beanstalk 中的一般 问题,因为它适用于这些文件。
然后我在没有裁剪的情况下对原始视频进行了编码,我可以看到输出文件要短得多。原始长度为 6.90s
,但输出为 6.12s
。然后我在本地使用 FFMPEG 转换了同一个文件,它的输出是 6.08s
.
看来原始视频的编码方式(部分)与 Elastic Transcoder 和 FFMPEG 都不兼容。原始视频是使用古老的编解码器 - Microsoft Video 1 - 使用未知编码器编码的。我假设它的某些 属性 根本无法再被现代工具正确读取。