Fehlender Referenzrahmen, Slice-Header-Decodierungsfehler

5817
AnilJ

Ich teile dieses Video ( http://www.auby.no/files/video_tests/h264_720p_mp_3.1_3mbps_aac_shrinkage.mp4 ) mit dem mp4box-Befehl "MP4Box -split 1 shrinking.mp4" in jeweils 1 Sekunde. Ich habe folgende Fragen:

Ich habe verschiedene Größen des Videos erhalten, obwohl ich es gleichmäßig in 1 Sekunde geschnitten habe. Nicht sicher, wie das passiert ist?

Wenn ich versuche, die Informationen über die Video-Slice-Datei zu sichern, erhalte ich die folgende Meldung mit einem Fehler. Kann mir bitte jemand helfen zu verstehen, was es ist und wie ich den Befehl oben ändern kann, um ihn zu entfernen? Dieser Fehler tritt für jede erzeugte Videodia auf. Dieser Fehler tritt nur bei geschnittenen Videos auf.

Danke, / 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 
0

1 Antwort auf die Frage

1
dstob

Ich bin nicht mit der Verwendung von MP4Box vertraut, kann aber ein wenig erläutern, was hinter den Kulissen vor sich geht.

Um das Video zu decodieren, benötigen Sie zunächst einen Einstiegspunkt, ein Bild, auf das Sie verweisen können. Dieses Referenzbild wird durch Intra-Referenzierung erstellt, sodass es unabhängig von den anderen Frames ist. Andere Frames referenzieren diesen Frame und andere zuvor erstellte Frames, um zum Zeitpunkt der Decodierung neu erstellt zu werden. Es sei darauf hingewiesen, dass diese Bilder in der Kodierreihenfolge manchmal nicht dieselbe Position haben wie in der Darstellungsreihenfolge.

Okay, Sie sagen mir, dass Sie Videos von 1 Sekunde Länge haben wollten, aber ich sage, es sei denn, an jedem Sekundenzeiger gibt es I-Frames, dann ist dies nicht möglich. Nun, es ist möglich, aber es ist so, als würde ich sagen, dass ich ohne Bedenken kochen kann, ob mein Essen essbar ist. Sie haben möglicherweise im Sekundentakt geschnitten, aber das Video kann erst decodiert werden, wenn es auf ein Referenzbild trifft.

Lösungen: ffmpeg hat einen Segmenter, der dies für Sie erledigen kann, aber die Ergebnisse werden nicht perfekt 1 Sekunde lang sein (Dies ist unvollständig, da er bestimmte Codierungsreihenfolgen nicht wirklich verarbeiten kann, ein kleiner Teil der Fälle). Was passiert, wenn ein Frame in der Codierreihenfolge vor dem stoppenden I-Frame (Beginn des nächsten Segments), aber davor in der Präsentationsreihenfolge auftritt? Dasselbe, was Sie am Anfang Ihres Videos sehen, außer am Ende.

Sie könnten in ein Rohformat dekodieren und dann in Scheiben schneiden. Mit der I-Frame-Erkennung und dem gepufferten Schneiden (Spaß) können Sie viel Jonglieren.

Es gibt viele Möglichkeiten, dies zu tun, und abhängig von den Speicher- und Rechenbeschränkungen können Sie Ihren Geschmack wählen.

Ich hoffe, das erklärt die Fehler, die Sie sehen, und bietet mögliche Lösungen für Sie.

Da ich MP4Box verwende, möchte ich mich an die Befehlszeilenoptionen von MP4Box halten. Welchen ffmpeg-Befehl sollte ich jedoch verwenden, um dieselbe Segmentierung zu erzielen? Mir geht es gut mit nicht so engen 1-Sekunden-Segmenten. Glaubst du, ich vermisse etwas bei MP4Box? Weiß jemand davon? AnilJ vor 10 Jahren 0