参照フレームの欠落、スライスヘッダーのデコードエラー


0

mp4boxコマンド「MP4Box -split 1 shrinking.mp4」をそれぞれ1秒のスライスに使用して、この(http://www.auby.no/files/video_tests/h264_720p_mp_3.1_3mbps_aac_shrinkage.mp4)ビデオを分割しました。次の質問があります。

さまざまなサイズのビデオを取得しましたが、1秒で均等にスライスしました。これがどのように起こったのか分かりませんか?

ビデオスライスファイルに関する情報をダンプしようとすると、次のエラーメッセージが表示されます。誰かが私にそれが何であるか、そしてそれを取り除くために上記のコマンドをどのように修正できるかを理解するのを助けてくれますか?このエラーは、生成されるすべてのビデオスライドで発生します。このエラーは、スライスされたビデオでのみ発生します。

ありがとう、/ anil。

anilj@desk1:~/workspace/testprogs/shellscripts$ ffmpeg -i invideo/shrinking_01.mp4
ffmpeg version N-36083-g2501f93-xuggle-5.5 Copyright (c) 2000-2012 the FFmpeg developers
  built on Jun  3 2014 13:43:04 with gcc 4.6.4
  configuration: --prefix=/home/anilj/workspace/xugglehome --extra-version=xuggle-5.5 --extra-cflags=-I/home/anilj/workspace/xuggle-xuggler/build/native/x86_64-unknown-linux-gnu/captive/stage/home/anilj/workspace/xugglehome/include --extra-ldflags=-L/home/anilj/workspace/xuggle-xuggler/build/native/x86_64-unknown-linux-gnu/captive/stage/home/anilj/workspace/xugglehome/lib --disable-shared --enable-pic --enable-gpl --enable-nonfree --enable-libx264 --enable-version3 --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libspeex --enable-libvo-aacenc --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-openssl --enable-zlib --enable-libvpx
  libavutil      51. 46.100 / 51. 46.100
  libavcodec     54. 14.101 / 54. 14.101
  libavformat    54.  3.100 / 54.  3.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 67.101 /  2. 67.101
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 10.100 /  0. 10.100
  libpostproc    52.  0.100 / 52.  0.100
[h264 @ 0x1ddeac0] Missing reference picture
[h264 @ 0x1ddeac0] decode_slice_header error
[h264 @ 0x1ddeac0] Missing reference picture
[h264 @ 0x1ddeac0] decode_slice_header error
[h264 @ 0x1ddeac0] Missing reference picture
[h264 @ 0x1ddeac0] decode_slice_header error
[h264 @ 0x1ddeac0] Missing reference picture
[h264 @ 0x1ddeac0] decode_slice_header error
[h264 @ 0x1ddeac0] concealing 3600 DC, 3600 AC, 3600 MV errors
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'invideo/shrinking_01.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 1
    compatible_brands: isom
    creation_time   : 2014-06-19 20:21:02
  Duration: 00:00:00.90, start: 0.000000, bitrate: 38 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 30 kb/s, 29.96 fps, 29.96 tbr, 29956 tbn, 59.92 tbc
    Metadata:
      creation_time   : 2011-05-05 18:09:35
      handler_name    : ?Apple Video Media Handler
At least one output file must be specified

回答:


1

私はMP4Boxの使用に慣れていませんが、舞台裏で何が起こっているのかを少し説明できます。

ビデオをデコードするには、最初にエントリポイント、必要に応じて参照する画像が必要です。この参照画像は、内部参照によって構築されるため、他のフレームから独立しています。他のフレームは、デコード時に再作成するために、このフレームと以前に構築された他のフレームを参照します。これらの写真は、プレゼンテーションの順序と同じようにコーディングの順序で同じ場所を共有しない場合があることに注意してください。

さて、あなたは1秒の長さのビデオが欲しいと言っていますが、少なくとも1秒ごとのマーカーにIフレームがない限り、これは不可能です。まあ、それは可能ですが、私の食べ物が食べられるかどうかを心配せずに料理できると言っているようなものです。1秒間隔でカットした可能性がありますが、参照フレームに到達するまでビデオはデコードできません。

解決策:ffmpegにはこれを実行できるセグメンターがありますが、結果は完全に1秒の長さではありません(特定のコーディング順序/ ptsの問題を処理できないため、これは不完全です)。コーディング順序でフレームが発生すると、停止するIフレーム(次のセグメントの開始)の背後にあるが、プレゼンテーション順序ではその前にある場合はどうなりますか?ビデオの終わりに表示されるものと同じもの。

生の形式にデコードしてからスライスできます。I-Frame検出とバッファー付き切断(楽しい)で多くのジャグリングを行うことができます。

これを行うには多くの方法があり、メモリ/計算の制限に応じて、フレーバーを選択できます。

これがあなたが見ているエラーを説明し、あなたに可能な解決策を提供することを願っています。


私はMP4Boxを使用しているため、MP4Boxのコマンドラインオプションに固執したいと思います。ただし、同じセグメンテーションを実現するにはどのffmpegコマンドを使用する必要がありますか?1秒のセグメントがそれほど近くなくても大丈夫です。MP4Boxに何か不足していると思いますか?誰もがそれを知っていますか?
AnilJ 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.