ffprobe(类似于ffmpeg)的数据包大小单位是什么?

8

我正在使用ff系列(即ffmpeg,ffplay,ffprobe)开发缩略图提取器。

我需要知道帧的位置,因此我使用了以下命令,这是我在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”的字段,我猜测它表示数据包的大小。

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

我想知道单位是“字节”还是“比特”。

如果有人有相关信息,请告诉我。

谢谢。

2个回答

9

单位是字节

最好的线索来自于tools/plotframes,这是ffmpeg提供的一个工具,用于生成帧大小的图。检查下面的代码片段,它会输出以K位为单位的帧大小(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";
}

谢谢您的回答。我相信您的答案是正确的。但是这段代码对我来说似乎很陌生,您能告诉我这是什么编程语言吗? - Juneyoung Oh
ffmpeg/tools/plotframes 是一个 Perl 脚本。 - Drake Guan
您是否考虑将我的回复作为您问题的答案? - Drake Guan

5
您可以通过将“-unit”选项传递给ffprobe来查看单位。
例如:
ffprobe -show_frames -select_streams v -print_format -unit json=c=1 0001.wmv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接