我正在尝试编码和修剪视频到精确的输入和输出点,但我注意到输出缺乏一些精度。
例如,我知道我的剪辑应该从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
的持续时间和-这很难确认-但in-point似乎是几个帧的早期。
输入视频是100fps,所以当给出精度为1/100秒的定时信息时,我希望输入点和输出点的精度不会有太大差异。(可能是一帧,这取决于时间相对于帧的位置的定义)
我怀疑它可能是从最近的I帧修剪,而不是最近的实际帧。如果是这样,有没有办法迫使它在预定的位置进行修剪?
对于上下文,视频意味着与其他外部数据同步,这就是为什么in-point和持续时间对于获得正确至关重要。
经过进一步调查,我很确定哪里出了问题。我用刻录时间代码生成了一个测试视频,并以各种格式导出。它们都修剪得很整齐。所以这不是Elastic Beanstalk中的一般问题,因为它可以很好地处理这些文件。
然后我在没有裁剪的情况下对原始视频进行编码,我可以看到输出文件相当短。原长度为6.90s
,输出为6.12s
。然后,我在本地使用FFMPEG转换相同的文件,其输出是6.08s
。
因此,原始视频的编码方式(部分)与Elastic Transcoder和FFMPEG都不兼容。原始视频使用一个古老的编解码器编码-微软视频1 -使用一个未知的编码器。我猜想它的某些属性仅仅是现代工具无法正确读取。