Verwenden Sie FFmpeg, um Videos in mehrere Szenen aufzuteilen

671
Tina J

Ich versuche, FFmpeg zu verwenden, um ein Video in mehrere Subvideos mit einer einzigen Szene zu unterteilen, scenecutund zwar mithilfe der Funktion und des Schwellenwerts. Ich habe den folgenden Befehl auf SE gefunden:

ffmpeg -i myVideo.mp4 -y -c:v libx264 -profile:v high -prese6t:v fast -deinterlace -x264opts min-keyint=15:keyint=1000:scenecut=20 -b:v 2000k -c:a aac -b:a 128k -f segment -segment_format mp4 -segment_format_options movflags=empty_moov+frag_keyframe+default_base_moof+skip_trailer+faststart /home/1/output%%05d.mp4 

Der folgende Befehl funktioniert jedoch nicht für mich und zeigt einen Fehler an:

Unrecognized option 'prese6t:v'. Error splitting the argument list: Option not found 

Gibt es irgendwelche Änderungen seit dem letzten FFmpeg? Ich verwende die neueste Version.

0

2 Antworten auf die Frage

2
Gyan

@ K7AAY ist auf dem richtigen Weg. Die Optionsbezeichnung lautet preset. Die Ausgabe-Dateinamensmaske sollte seinoutput%05d

Aber abgesehen von den Syntaxfehlern gibt es auch einige grundlegende Probleme. Fragmentierte MP4-Optionen sind gedacht, wenn die Segmente in einer einzelnen Containerdatei verpackt sind. Der Segmentmuxer gibt mehrere Dateien aus, sodass die MP4-Muxer-Fragmentierung übersprungen werden kann. Außerdem sollte segment_time mit einem sehr niedrigen Wert angegeben werden. Andernfalls werden GOPs mit einer geringeren Größe als der Standardwert (2s) in einigen Segmenten kombiniert.

Befehl sollte sein

ffmpeg -y -i myVideo.mp4 -vf yadif \ -c:v libx264 -profile:v high -preset:v fast \ -x264opts min-keyint=15:keyint=1000:scenecut=20 -b:v 2000k \ -c:a aac -b:a 128k \ -f segment -segment_format mp4 -segment_time 0.01 -segment_format_options movflags=faststart \ /home/1/output%05d.mp4 
Ich erhalte immer noch die Fehlermeldung: `[segment @ 00000210c1e1f040] Die Format-Optionsliste 'faststart' konnte nicht analysiert werden. Der Header für die Ausgabedatei # 0 konnte nicht geschrieben werden (falsche Codec-Parameter?): Ungültiges Argument Fehler beim Initialisieren des Ausgabestroms 0: 0 -` Tina J vor 6 Jahren 0
Übrigens, kann ich den Befehl verkleinern? Vielleicht können wir nur den Codec "-c copy" kopieren? Das Wichtigste für mich ist, um die Empfindlichkeit der Szenecut-Schwelle herumzuspielen Tina J vor 6 Jahren 0
Korrigierter cmd .. Gyan vor 6 Jahren 1
Vielen Dank. Es klappt. Eine Frage ist, dass es jetzt sehr lange dauert. Mein letztes Ziel ist es, ein Bild von jeder Szene zu speichern, etwa das mittlere Bild dieses Bildes, anstatt das Szenenvideo zu kodieren und zu speichern. Gibt es einen schnelleren Weg, um das zu erreichen? Hier ist meine neue Frage: https://superuser.com/questions/1337709 Tina J vor 6 Jahren 0
1
K7AAY

Nach dem Ersetzen prese6t:v
mit, preset:v
da es für ffmpeg keine "prese6t" -Option gibt

ersetzen output%%05d.mp4
durchoutput5d.mp4

da ffmpeg output%%05d.mp4einen ungültigen Dateinamen ablehnt .

Nein, das Problem ist der Fehler. Bitte sehen Sie sich meine aktualisierte Frage an. Tina J vor 6 Jahren 0
Nein, das hat auch nicht funktioniert: `[mp4 @ 000001adb348a740] Ungültige Segmentdateinamenvorlage 'output %% 05d.mp4' Header für Ausgabedatei # 0 konnte nicht geschrieben werden (falsche Codec-Parameter?): Ungültiges Argument Fehler beim Initialisieren des Ausgabestroms 0 : 0 - " Tina J vor 6 Jahren 0
Dies ist keine Antwort. Dies ist ein Kommentar, der auf Hilfe hinweist. Es ist absolut nichts Falsches, so etwas als Kommentar zu tun, aber nicht als "Antwort". JakeGould vor 6 Jahren 1
Korrigiert, siehe Antwort. K7AAY vor 6 Jahren 0