2013-08-07 106 views
5

我正在开发ff-系列缩略图提取器(意思是ffmpeg,ffplay,ffprobe)。ffprobe的数据包大小单位是什么(类似于ffmpeg)?

我需要知道帧的位置,所以我使用了一个像下面这样的命令,我在stackoverflow中发现了另一个帖子。

ffprobe -show_frames -select_streams v -print_format json=c=1 0001.wmv 

实际上它工作的很好,并且生成一个包含大量信息的文件。

输出文件如下。

"frames": [ 
     { "media_type": "video", "key_frame": 1, "pkt_pts": 900000, "pkt_pts_time": "10.000000", "pkt_dts": 900000, "pkt_dts_time": "10.000000", "pkt_duration": 3003, "pkt_duration_time": "0.033367", "pkt_pos": "453", "pkt_size": "9744", "width": 720, "height": 480, "pix_fmt": "yuv420p", "sample_aspect_ratio": "8:9", "pict_type": "I", "coded_picture_number": 0, "display_picture_number": 0, "interlaced_frame": 0, "top_field_first": 0, "repeat_pict": 0 },... 

有一个名为“pkt_size”的列,我假设它的大小。

它显示一些数字,但没有单位的信息。

我不知道单位是'字节'还是'位'。

如果有人有这方面的一些信息,请告诉我。

谢谢。

回答

6

单位是字节

最好的线索是tools/plotframes,这是ffmpeg提供的一个工具,用于生成一个框架大小的图。检查此代码片段,它将以Kbits(pkt_size * 8/1000)输出帧大小。

foreach my $frame (@{$frames}) { 
    my $type = $frame->{pict_type}; 
    $frame->{count} = $frame_count++; 
    if (not $stats{$type}) { 
     $stats{$type}->{tmpfile} = File::Temp->new(SUFFIX => '.dat'); 
     my $fn = $stats{$type}->{tmpfile}->filename; 
     open($stats{$type}->{fh}, ">", $fn) or die "Can't open $fn"; 
    } 

    print { $stats{$type}->{fh} } 
     "$frame->{count} ", $frame->{pkt_size} * 8/1000, "\n"; 
} 
+0

感谢答案见的单位。我假设你有正确的答案。但是这段代码似乎并不熟悉我,所以你会告诉我这是什么语言? –

+0

ffmpeg/tools/plotframes是一个perl脚本。 – Drake

+0

好的。我知道了!非常感谢。祝你有个美好的一天:D –

0

您还可以通过传递到ffprobe的 '〜部' 选项

ffprobe -show_frames -select_streams v -print_format -unit json=c=1 0001.wmv 
相关问题