2013-08-07 22 views
5

Tôi đang phát triển trình trích xuất hình thu nhỏ với ff- series (nghĩa là ffmpeg, ffplay, ffprobe).đơn vị kích thước gói của ffprobe (tương tự như ffmpeg) là gì?

Tôi cần biết vị trí của khung hình, vì vậy tôi sử dụng lệnh như dưới đây mà tôi đã tìm thấy một bài đăng khác trong stackoverflow.

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

Thực ra nó hoạt động tốt và tạo một tệp với nhiều thông tin gói.

Tệp đầu ra như dưới đây.

"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 },... 

Có một cột có tên "pkt_size", mà tôi giả định rằng kích thước của gói.

Nó hiển thị một số số, nhưng không có thông tin về đơn vị.

Tôi tự hỏi đơn vị đó là 'byte' hoặc 'bit'.

Nếu ai đó có một số thông tin về điều này, hãy cho tôi biết.

Cảm ơn.

Trả lời

6

Đơn vị là byte.

Đầu mối tốt nhất cho việc này là từ công cụ/cốt truyện, một công cụ được cung cấp bởi ffmpeg để tạo ra một âm mưu kích thước khung hình. Kiểm tra đoạn mã này, sẽ tạo ra kích thước khung hình trong 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

Cảm ơn cho câu trả lời. Tôi cho rằng bạn có câu trả lời đúng. Nhưng mã này có vẻ không quen thuộc với tôi, vậy bạn có thể cho tôi biết ngôn ngữ này là gì không? –

+0

ffmpeg/tools/plotframes là một kịch bản perl. – Drake

+0

Ok. Tôi đạt được rồi! Cảm ơn rất nhiều. Chúc một ngày tốt lành: D –

0

Bạn cũng có thể thấy các đơn vị bằng cách đi qua để ffprobe tùy chọn '-unit'

Giống như

ffprobe -show_frames -select_streams v -print_format -unit json=c=1 0001.wmv 
Các vấn đề liên quan