Ich habe Probleme, eine CLI-Anwendung zu finden, die eine Videodatei (vorzugsweise AVI, MKV und MP4) aufnimmt und sehr kurze Clips (2-6 Sekunden) zeitgenau ausschneidet. Ich habe ffmpeg , mencoder , avidemux und mp4box ausprobiert , aber alle schneiden auf Keyframes, wodurch Clips mit einer Länge von mehr als 6 Sekunden erstellt werden. Gibt es ein Tool, das die Eingabedatei neu codiert und die genaue Zeit schneidet oder ungenau schneidet, neu codiert und dann genau schneidet?
command-line
video
video-editing
mp4
curmil
quelle
quelle
-ss
Parameter nachher platzierst-i
), sollte es genauer sein.Antworten:
Video schneiden mit
ffmpeg
Mit FFmpeg können Sie Videos präzise schneiden. Seit Version 2.5 ist es sehr einfach. Dies würde beispielsweise 10 Sekunden ab 0 Minuten, 3 Sekunden und 123 Millisekunden verkürzen.
Die Position und die Zeit können entweder in Sekunden oder in
hh:mm:ss[.xxx]
Form sein.Beachten Sie, dass in diesen Beispielen das Video mit dem x264- Encoder neu codiert wird . Audio wird kopiert.
Sie können
-to
anstelle von auch-t
den Endpunkt anstelle der Dauer angeben. In diesem Fall jedoch-to
ist äquivalent zu-t
, da durch die Umsetzung-ss
vor-i
, wird ffmpeg zuerst zu diesem Punkt suchen und starten Sie dann Ausgabe.Siehe auch den Seeking- Wiki-Eintrag.
Genaues Schneiden für ältere
ffmpeg
VersionenWenn Sie eine ältere Version von ffmpeg haben, müssen Sie für eine genaue Suche das
-ss
After einfügen,-i
was den Kodierungsprozess etwas verlangsamt, da das gesamte Video zuerst dekodiert werden muss:Hier
-to
und-t
anders verhalten.-t 10
Erstellt einen zehn Sekunden langen Clip, während-to 10
ein sieben Sekunden langer Clip erstellt wird.quelle
-c:v libx264 -c:a libfaac
ich denke, wir können mit-acodec copy -vcodec copy
dem Befehl ffmpeg nur die gleichen Codecs wie die Originaldatei erkennen und verwenden. Kann das jemand bestätigen?-c:a aac -strict experimental
. Das ist die einfachste Lösung.Das einzige Linux-Kommandozeilen-Tool, das ich bisher gefunden habe und das bildgenau (oder bildgenau) schneiden kann, ist
melt
(sudo apt-get install melt
).Angenommen, Sie haben eine
inputvid.mp4
- überprüfen Sie zuerst die Codierungseinstellungen mit sayffmpeg
(hier sage ich nur, dass ich sie erneut codieren möchte-f mp4
, aber da die Datei/dev/null
so verworfen wird, leite ich stderr um, damit ich sie durchgehen kann - notieren Sie sich in der Mittey
Wenn der Befehl dazu auffordert und Sie mit der EINGABETASTE antworten , fährt der Prozess fort und gibt die nützlichen Informationen aus (dies ist mit ffmpeg 3.3.3 unter Ubuntu 14):Ok, wir können also eine
ffmpeg
Auswahllibx264
undaac
Encoder für dieses Video sehen. dann können wir dies eingeben fürmelt
:.... und
melt
schneidet mit dem Stück zwischen den Frames 7235 und 7349 in eine neue Dateicut.mp4
. Um zu überprüfen, ob diecut.mp4
Schleifen korrekt sind, geben Siemelt
sie noch einmal zweimal wieder - und spielen Sie sie in einem SDL-Fenster ab:... und hier ist was
ffmpeg
für diese Datei zu sehen:Die Einstellungen für
cut.mp4
die Videokodierung scheinen mitinputvid.mp4
Ausnahme der Änderung der Videobitrate von 389 kb / s auf 526 kb / s identisch zu sein , und auch die Einstellungen für die Audiokodierung sind nahezu identisch, außer dass die Abtastrate von 44100 auf 48000 Hz geändert wurde. das kann man aber regeln mit:... die endgültige Video-Bitrate beträgt für mich jedoch 337 kb / s. Trotzdem sind die Schnitte bei der Wiedergabe in einer Schleife in Ordnung (und das schließt auch Audio ein), also denke ich, dass dies tatsächlich bildgenau ist ...
quelle
melt
kodiert das Video neu und verwendet die darunter liegenden FFmpeg-Bibliotheken. Wenn Sie eine Neucodierung zulassen, kann ffmpeg dieselbe Ausgabe erzeugen.melt
FFmpeg-Bibliotheken verwendet), gut zu wissen!Wie Baodad in den Kommentaren sagte (ich poste, weil es nicht leicht zu finden ist, wenn Sie schnell lesen), ist der bessere Ansatz, die Audio- / Video-Encoder automatisch per ffmpeg zu erkennen, also:
quelle