1

我正在使用mkvmerge将 mp4 CFR 视频与包含 VFR 时间戳的文本文件结合起来。使用的命令是

mkvmerge --timestamps 0:timestamps.txt input_video.mp4 -o output_video.mkv

文本文件timestamps.txt采用 v2 时间戳格式。这是前几个条目

# timecode format v2
0
6
21
36
53
71
87
103
123

我正在尝试将这些时间戳打印出来

ffprobe -v 0 -show_entries packet=pts,duration -of compact=p=0:nk=1 -select_streams v output_video.mkv

但我收到打乱的条目

0|6
6|15
21|15
36|17
53|18
123|15
87|16
71|16
103|20

PyAV例如,如果我阅读框架,我会以正确的顺序获得值。

import av
c = av.open("output_video.mkv")
for frame in c.decode(video=0):
     print(frame.pts)

输出:

0
6
21
36
53
71
87
103
123

我是否错误地使用了ffprobe?非常欢迎任何帮助!

4

1 回答 1

1

如果视频流具有 B 帧,则作为 B 帧参考的未来 P 帧首先被编码并按该顺序存储。它们在解码后重新排序。

对于ffprobe,里面的条目packet是按照解码或存储顺序排列的。在frames中,它们被解码并按呈现顺序排列。

于 2021-12-22T04:41:36.003 回答