我的目标是提取视频的每个帧时间戳(可以是 mkv、mp4、avi 等)。 我在 python 中解析结果,所以我可以将帧 1 映射到 42 毫秒,帧 2 映射到 83 毫秒,等等...
我尝试过这两个命令:
ffprobe -select_streams 0 -show_entries packet=pts_time -print_format json VIDEO.mkv
ffprobe -select_streams 0 -show_entries frame=pts_time -print_format json VIDEO.mkv
他们似乎总是返回给我相同的结果,但第一个更快。那么,我应该始终使用
packet=SOMETHING
吗?
有些视频没有
pts_time
。我应该始终使用 dts_time
甚至 best_effort_timestamp_time
而不是 pts_time
吗?
最后,
pts_time
、dts_time
和best_effort_timestamp_time
的时间似乎总是以秒为单位。有没有办法以毫秒为单位获取它?
严格来说,帧时序是正确的属性。一个数据包中携带多个帧,或者一个帧被分割(作为切片)跨多个数据包是可能的,但不常见。但大多数时候,你可以使用数据包属性。
*_time
字段均仅打印为十进制秒。您可以读取原始时间戳,即 pts
,但随后您必须与流 time_base
x 1000
相乘才能获得毫秒。