0

因为 ffprobe 有时会报告视频持续时间的无效值,所以我们经常在网上找到针对此特定问题的一种获得准确视频持续时间的推荐方法是使用 ffmpeg null muxer 解码文件并解析“time = ...”行。

ffmpeg -i file.mp4 -f null -

这个解决方案的问题是它非常非常慢。我注意到这个解决方案的流映射是:

Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))
  Stream #0:1 -> #0:1 (aac (native) -> pcm_s16le (native))
...
frame=  331 fps=115 q=-0.0 Lsize=N/A time=00:00:05.52 bitrate=N/A speed=1.92x    

所以我通过添加“-c copy”更新了前面的命令

ffmpeg -i file.mp4 -c copy -f null -

现在解码过程(真的是解码吗?)快了 600 倍!

Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
frame=40109 fps=39085 q=-1.0 Lsize=N/A time=00:11:09.14 bitrate=N/A speed= 652x    

为什么这个解决方案不像前一个那样受欢迎?视频持续时间仍会报告,并且似乎与以前一样准确。

我对这个解决方案做错了吗?

4

1 回答 1

0

使用一般没问题-c copy。有时,可能会有小的不准确,因为解码器会以正确的顺序发出帧并丢弃非帧数据包。但我们谈论的是微小的差异。

于 2021-02-04T16:10:27.397 回答