Extrahieren mit ffmpeg

  • Hallo,


    ich habe gerade mit ffmpeg ein Problem, das ich weder verstehe noch lösen kann. Und zwar:

    Aus einem MP4-File extrahiere ich die ersten 10 Sekunden mit dem Befehl

    ffmpeg -i inputFile.mp4 -ss 00:00:00 -t 00:00:10 -c copy -an outputFile.mp4


    Die Ausgabedatei wird angezeigt mit einer Länge von 4 Sekunden;

    beim Abspielen (mit VLC) sind die ersten 4 Sekunden leer, dann folgt 6 Sekunden lang der Inhalt.


    Kennt jemand das Problem und weiss Abhilfe? Wäre für Tipps (ausser "nimm andere Software") sehr dankbar!

  • Vermutlich nicht hilfreich aber vielleicht Gedanken anregend,...


    Generell würde ich https://trac.ffmpeg.org/wiki/Seeking empfehlen.

    Zu bedenken ist, das ffmpeg nur an Key-frames schneiden wird.

    Kann nichts zu VLC sagen, da ich den grauslich finde und nicht verwende. :)

    (Für Smartcutting wird wirklich andere Software benötigt.)


    Hätte erwartet, dass '-ss 00:00:00' entweder weg gelassen werden oder vor dem -i stehen sollte. Wenn '-ss ...' bei einem reinen Stream Copy hinter dem Input steht wird ab dem ersten KeyFrame an oder nach der angegebenen Position gestartet.

    Vermute, dass. ffmpeg das erste Key-frame bei Sekunde 4 findet (Achtung! Je nach verwendetem Format sind I- und KeyFrames nicht identisch!) und deshalb erst ab dort startet, oder alles vor diesem Frame nicht dekodieren kann.


    Cu Selur

  • Danke, Selur , für deine anregenden Hinweise.


    "seeking" werde ich mir mal genauer ansehen; war mir bisher entgangen.


    Mit der Position des "-ss"-Parameters werde ich auch mal experimentieren; ich war überzeugt, das sei so korrekt, dass ich das garnicht probiert hatte.


    Beim VLC verwende ich sogar eine ältere Version, weil die neuere(n?) nicht mit gezippten und umbenannten MP3s umgehen wollte. Für meine Zwecke ist der ansonsten ideal.


    In die Sache mit ffmpeg + Keyframes werde ich mich mal einlesen.



    VG

    Unforgiven



    edit:

    Danke nochmal für die Hinweise; jetzt ist der Ausschnitt auch 10 Sekunden lang.