Jun*_* Oh 6 byte ffmpeg bit packet ffprobe
我正在用ff-系列开发缩略图提取器(意思是ffmpeg,ffplay,ffprobe).
我需要知道帧的位置,所以我使用下面的命令,我在stackoverflow中找到了另一个帖子.
ffprobe -show_frames -select_streams v -print_format json=c=1 0001.wmv
Run Code Online (Sandbox Code Playgroud)
实际上它工作得很好,并生成一个包含大量信息的文件.
输出文件如下.
"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 },...
Run Code Online (Sandbox Code Playgroud)
有一个名为"pkt_size"的列,我假设该数据包的大小.
它显示一些数字,但没有单位信息.
我想这个单位是'字节'或'位'.
如果有人有这方面的信息,请告诉我.
谢谢.
单位是字节.
最好的线索来自工具/绘图框,这是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";
}
Run Code Online (Sandbox Code Playgroud)
您还可以通过将“-unit”选项传递给 ffprobe 来查看单位
喜欢
ffprobe -show_frames -select_streams v -print_format -unit json=c=1 0001.wmv
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2535 次 |
| 最近记录: |