ffprobe中pkt_duration和pkt_duration_time之间的差异

alb*_*NET 5 command ffmpeg ffprobe

当我在HLS流中执行下一个ffprobe命令时,参数以平面格式显示特定流视频中的帧,并使用'pkt'模式显示grep,它返回以下信息:

$ ffprobe -i http://xxxxxxxxxxxxxxxx/PCMDY_SUB.m3u8 -show_frames -select_streams v:0 -print_format flat | grep pkt
...
frames.frame.229.pkt_pts=2438664735,
frames.frame.229.pkt_pts_time=27096.274833,
frames.frame.229.pkt_dts=2438664735,
frames.frame.229.pkt_dts_time=27096.274833,
frames.frame.229.pkt_duration=3600,
frames.frame.229.pkt_duration_time="0.040000",
frames.frame.229.pkt_pos=13348,
frames.frame.229.pkt_size=2510,

frames.frame.230.pkt_pts=2438668335,
frames.frame.230.pkt_pts_time=27096.314833,
frames.frame.230.pkt_dts=2438668335,
frames.frame.230.pkt_dts_time=27096.314833,  
frames.frame.230.pkt_duration=3600,
frames.frame.230.pkt_duration_time="0.040000",
frames.frame.230.pkt_pos=15980,
frames.frame.230.pkt_size=2389,
...
Run Code Online (Sandbox Code Playgroud)

信息与_time模式之间有什么区别,没有它?

我认为pkt_duration是微秒,而pkt_duration_time是以秒为单位.这是真的?

Vla*_*kov 7

不同之处在于pkt_duration不是以微秒为单位,而是以时基切片为单位,通常如下所示:

1/framerate/1000
Run Code Online (Sandbox Code Playgroud)

pkt_duration_time以秒为单位。您可以通过将 '-unit' 选项传递给 ffprobe 来查看单位:

 ffprobe -i i.mp4 -show_frames -unit
 ....
pkt_pts=14014
pkt_pts_time=0.233567 s
pkt_dts=14014
pkt_dts_time=0.233567 s
pkt_duration=2002
pkt_duration_time=0.033367 s
Run Code Online (Sandbox Code Playgroud)

有关时基的更多信息