Ich muss nur die ersten 1 oder 2 Sekunden einer Reihe von FLV-Aufnahmen unterschiedlicher, nicht spezifizierter Länge abschneiden. Ich habe viele Ressourcen zum Extrahieren einer bestimmten Dauer aus einem Video gefunden (z. B. 30-Sekunden-Clips), aber keine, um bis zum Ende eines Videos fortzufahren.
Diese beiden Versuche ergeben lediglich eine kopierte Version des Videos ohne den gewünschten Zuschnitt:
ffmpeg -ss 2 -vcodec copy -acodec copy -i input.flv output.flv
ffmpeg -ss 2 -t 120 -vcodec copy -acodec copy -i input.flv output.flv
Der Gedanke an den zweiten war: Wenn ich vielleicht eine Länge spezifizierte, die über das Mögliche hinausging, ging sie einfach zu Ende. Kein Würfel.
Ich weiß, dass es kein Problem mit Codecs oder der Verwendung von Sekunden anstelle von Timecode gibt, da das Folgende einen Reiz hat:
ffmpeg -ss 2 -t 5 -vcodec copy -acodec copy -i input.flv output.flv
Irgendwelche anderen Ideen? Ich bin offen für die Verwendung anderer (Windows-basierter) Befehlszeilentools, bevorzuge jedoch ffmpeg, da ich es bereits für die Erstellung von Miniaturansichten verwende und mit ihm vertraut bin.
Wenn es hilft, werden meine Videos alle unter 2 Minuten sein.
AKTUALISIEREN:
Ich bin auf Mencoder umgestiegen ( http://www.mplayerhq.hu/ ), da es so aussieht, als würde ffmpeg dies nicht ohne zusätzliche Hacks erreichen.
Die Mencoder-Syntax für das, was ich mir vorgenommen habe, lautet:
mencoder.exe -ss 2 -oac copy -ovc copy input.flv -o output.flv
mencoder
obige Beispiel; oder dasffmpeg
Beispiel unten?Antworten:
Versuchen:
Ich denke, der Eingabeparameter soll an erster Stelle stehen.
quelle
-i
) beim Kopieren oder sogar beim Transcodieren mit einer älteren Version von FFmpeg die Suche nach Keyframes verwendet. Dies ist viel schneller, beeinträchtigt aber die Genauigkeit. Wenn Sie ihn als Ausgabeparameter verwenden, ist der Prozess möglicherweise viel langsamer (die Eingabe wird auch für die verworfenen Teile Frame für Frame decodiert), aber genau. Obwohl die Frage alt ist, denke ich, dass dies die akzeptierte Antwort sein sollte.Stellt sich heraus , diesen Befehl wird das Video von 2 Sekunden trimmen, wie erwartet:
Das Problem war das Keyframe-Intervall in der Datei input.flv. Es wurde auf 5 Sekunden eingestellt, was zu Beginn des Videos einen Wert von 3 Sekunden für schwarze Rahmen ergab (5 - 2 = 3). Ich habe seitdem mein Keyframe-Intervall auf 1 Sekunde geändert, obwohl 2 Sekunden in meinem Fall wahrscheinlich auch die gewünschten Ergebnisse bringen würden.
UPDATE: Die Reihenfolge
-i
und die-ss
Parameter wurden gemäß Daves Antwort aktualisiert , die ich als Gutschrift akzeptiert habe.quelle
-vcodec copy -acodec copy
alle meine Bearbeitungsbefehle auszuführen. Die Neukodierung verhinderte, dass die schwarzen Frames zu Beginn meines Videos angezeigt wurden oder nicht an der richtigen Stelle geschnitten wurden (die Differenz von einer Sekunde ohne Neukodierung führte zu einer Differenz von fast 5 Sekunden im Video). Also habe ich ersetzt-vcodec copy
durch-vcodec libx264 -crf 0
.-vcodec copy
weil das Slice nicht auf einem Keyframe startet. Ich habe für N Sekunden ein Standbild oder ein schwarzes Bild bis zum nächsten Keyframe erhalten. Wenn ich tatsächlich neu codiere und nicht kopiere, funktioniert es wie erwartet. Also, obwohl meine Eingabe und Ausgabe beide H264 sind, musste ich immer noch neu codieren (mit-vcodec libx264
anstelle von-vcodec copy
).-i
sollte vor dem kommen-ss
.Benutze -ss und -to bevor -i wie folgt:
quelle
Aktualisierung dieser Antwort, ab 2019 lautet der Befehl jetzt:
quelle