FFmpeg - RAW H264 Demux aus MKV | gMKVExtact Gui - RAW AVC Demux aus MKV = Verständisfrage?

  • Ich habe hier eine MKV mit folgenden Codec Inhalt:


    V= H264 (oder auch AVC genannt)

    A= PCM (WAV)


    Wenn ich die Videospur mit FFmpeg aus den MKV Container als Endung: h264 demuxe, kommt folgendes raus:

    Test.h264


    Wenn ich die Videospur mit FFmpeg aus dem MKV Container als Endung: avc demuxe, kommt folgende Fehlermeldung:

    857458.png


    Nehme ich jetzt das Tool: gMKVExtact Gui um die Videospur aus dem MKV Container zu demuxen, kommt avc dabei raus.

    Test.avc

    h264 extract macht gMKVExtact Gui erst garnicht.


    h264 ist doch avc oder beides dasselbe oder warum dieser Unterschied?

  • Auch ich halte es für möglich, dass hier das Problem lediglich darin besteht, dass ffmpeg versucht, aus Dateiendungen auf das gewünschte Format zu schließen, und vielleicht die Endung .avc nicht auf die gleiche Weise einem MPEG4-AVC-Elementarstream zuordnet wie die Endung .h264; man könnte also entweder die extrahierte Datei anschließend umbenennen, oder man gibt das Ausgabeformat explizit mit einem Parameter vor.


    Bei dem anderen mag es eine Einschränkung der GUI sein, aber mkvextract als CLI sollte funktionieren. Und es gibt ja noch andere GUIs (je nach Betriebssystem).

  • Ist die Dateiendung bei avc oder h264 egal?

    Beispiel man gibt mit VirtualDub per Export eine H264 RAW Videospur raus

    z.B. Test.h264 und umbenennt diese nun zu Test.avc

    MP4Box scheint es hinterher egal zu sein ob man diese nun als *.avc oder *.h264 im MP4 Container packt.

  • die dateiendung ist theoretisch egal, es liegt am programierer, dass es kein standardverhalten bei den dateiendungen gibt.


    ggf. bei wikipedia steht, was die erfinder des formates für dateiendungen vorgesehen haben.

    aber manch einer meint, da er nur ein rohes format ist, sich nicht daran halten zu müssen...

  • Dateiendungen sind in der Regel für den Menschen, damit dieser weiss, was drin ist. Insofern ist die Dateiendung egal.


    Bei ffmpeg ist es jetzt so, dass du damit sehr viele unterschiedliche Dinge machen kannst und du ihm deshalb auch *genau* sagen musst, was du tun willst. ffmpeg kann ja keine Gedanken lesen. ;)


    ffmpeg -i "input.mp4" -c:v copy -f h264 test.avc


    ist gleich zu:


    ffmpeg -i "input.mp4" -c:v copy test.h264



    Im ersten Fall sagst du ffmpeg per -f Parameter, dass du einen h264 raw Stream erstellen willst.


    In der zweiten Zeile errät ffmpeg anhand der Dateiendung .h264, welches Format er verwenden soll. Und die im bekannte Dateiendung für h264 raw streams ist nun mal .h264

    Die Dateiendung .avc ist ihm unbekannt, also bricht er mit einen Fehler ab.

  • Es gibt Programme, die ändern ihr Verhalten abhängig von der Dateiendung, die verlassen sich auf eine bestimmte Benennung.


    Und es gibt Programme, denen ist nur der Dateiinhalt wichtig, die erkennen Format und Eigenschaften an Header-Daten.


    Ein Thema, das hier seit "Jahrzehnten" immer wieder diskutiert wird...

  • Ich habe heute auf einen alten PC unter Win7x64 Pro

    wo sich noch eine ältere Version von MP4Box (ca. 2012/2013) befand folgendes ausprobiert:


    Als ich die oben genannte Test.avc im MP4 Container muxxen wollte, wurde ich mit einer Fehlermeldung belohnt :P

    (Hab mir die Fehlermeldung nicht notiert)


    Update 13.11.2019

    Die Fehlermeldung lautete:

    Code
    1. [MPEG-2 TS] TS Packet XXX (da wird jeder einzelne Frame in einer langen Kette aufgezählt)
    2. does not start with sync marker
    3. [Importer] Unkown input file type for Test.avc


    Nach der Umbennenung der Test.avc zu Test.h264 hat MP4Box sie brav gemuxxt :)


    Neuere (aktuelle) Versionen von MP4Box packen beides (*.avc oder *.h264) :thumbup: