ffmpeg在输出时将start_time设置为负值

时间:2016-05-13 22:05:06

标签: audio video ffmpeg

我们已经使用旧版本的ffmpeg一段时间了,现在我们需要升级到更新版本(例如2.6),我们在将.mov转换为.mp4时遇到问题。

例如,我有一个.mov视频文件,它有两个视频和音频流,两者都有start_time = 0,当我使用它转换它时:

ffmpeg -i my_file.mov my_file.mp4

输出mp4有一个音频流,其start_time = -0.021333。

FORMAT部分,如ffprobe -show_format -show_streams my_file.mp4所示 也有start_time = -0.021333

我们使用的以前版本的ffmpeg没有这个问题...

当我们使用<在Web浏览器中播放输出mp4文件时视频>它在播放时一切都很好,但是如果我们暂停视频并且在这里和那里寻找,我们会注意到所有帧都被关闭了。第一帧是重复的,最后一帧是丢失的!

换句话说:

dom.currentTime = 0 shows the first frame
dom.currentTime = 1/24 (fps is 24) shows the first frame again
dom.currentTime = 2/24 shows the second frame instead of the third frame
dom.currentTime = 3/24 shows the third frame instead of the fourth frame
...

我们认为这是由字段start_time = -0.021333

引起的

这对我们来说是个主要问题......

它在chrome和firefox上的重复,但不知何故safari没有这个问题......

通过Google搜索后,我们发现我们并不是唯一一个遇到此问题的人,但目前还不清楚解决方案是什么。

有人建议使用" -c:副本"参数和它在一些文件上工作但在其他一些文件上出错:

无法为输出文件#0写入标头(编解码器参数不正确?):参数无效

所以这似乎不是一个强有力的解决方案......

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以尝试完全避免使用否定TS

ffmpeg -i my_file.mov -avoid_negative_ts make_zero my_file.mp4

使用您的输入文件,我运行了此命令,

ffmpeg -i AnimalTrancoding_v001_Shot0020.mov out.mp4

在输出上运行ffprobe,

 ffprobe -show_entries format=start_time:stream=start_time -of compact out.mp4

我看到了

stream|start_time=0.000000
stream|start_time=0.000000
stream|start_time=0.000000
format|start_time=0.000000

比较前几帧没有显示任何与源相关的重复或丢失。

我正在运行最近的每晚构建(2016年5月)。