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 - 使用未知编码器编码的。我假设它的某些 属性 根本无法再被现代工具正确读取。