Ich verwende ffmpeg, um einen Abschnitt einer großen Datei wie folgt auszuschneiden:
ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv
Das -ss
Teil funktioniert gut, aber das -t
wird ignoriert. Die mit angegebenen Anfangssekunden werden korrekt entfernt, die -ss
Eingabe mit der Kopie wird jedoch bis zum Ende fortgesetzt.
Gibt es eine Möglichkeit, mit ffmpeg das Ende eines Videos abzuschneiden, ohne es neu zu codieren?
Antworten:
Sie können die
-ss
Option verwenden, um einen Startzeitstempel und-t
die Kodierungsdauer anzugeben. Die Zeitstempel müssen imHH:MM:SS.xxx
Format oder in Sekunden (s.msec
) vorliegen .Das Folgende würde die ersten 30 Sekunden beschneiden und dann alles, was 10 Sekunden danach ist, beschneiden:
Beachten Sie, dass
-t
eine Ausgabeoption ist und muss immer angegeben werden , nach-i
.Einige Hinweise:
-ss
nachher verwenden-i
, erhalten Sie eine genauere Suche auf Kosten einer insgesamt langsameren Ausführung. Siehe auch: Suche mit FFmpegSie können
-to
anstelle von-t
den Zeitstempel angeben, auf den Sie schneiden möchten. So-i <input> -ss 30 -t 10
könnte man stattdessen auch-i <input> -ss 30 -to 40
das Gleiche erreichen.Wenn Ihr ffmpeg
-c
oder nicht unterstützt ,-to
ist es wahrscheinlich sehr veraltet. Kompilieren Sie selbst eine neue Version oder laden Sie einen statischen Build von der Homepage herunter . Es ist wirklich nicht kompliziert.quelle
ffmpeg -i input.wmv -c copy -t 35 output.wmv
frame= 150 fps=0.0 q=-1.0 Lsize= 264kB time=00:00:09.97 bitrate= 216.6kbits/s
-c copy
entfernte den anfänglichen schwarzen Bildschirm, siehe seine Antwort für Details.Wie andere Leute bereits erwähnten, macht das Setzen
-ss
vor (viel schneller) oder nach (genauer) dem-i
einen großen Unterschied. Im Abschnitt "Schnelles und genaues Suchen" auf der ffmpeg-Suchseite erfahren Sie, wie Sie beides erhalten, und ich habe es verwendet, und es macht einen großen Unterschied. Grundsätzlich stellen Sie-ss
vor UND nach dem ein-i
, lassen Sie jedoch genügend Zeit, bevor Sie mit dem Schneiden beginnen, um ein anderes Schlüsselbild zu erhalten. Beispiel: Wenn Sie einen 1-minütigen Clip von 9 Minuten bis 10 Minuten in Video.mp4 erstellen möchten, können Sie dies schnell und genau tun:Der erste
-ss
sucht schnell nach (ungefähr) 8 Minuten pro Sekunde, und der zweite-ss
sucht genau nach 9 Minuten pro Sekunde, und der-t 00:01:00
entnimmt einen 1-Minuten-Clip.Beachten Sie auch diesen wichtigen Punkt auf dieser Seite: "Wenn Sie
-ss
mit verwenden-c:v copy
, wird der resultierende Bitstream möglicherweise abgehackt, kann nicht wiedergegeben werden oder ist nicht mit dem Audiostream synchron, da ffmpeg nur für i-Frames verwendet / aufgeteilt werden muss. "Dies bedeutet, dass Sie das Video neu codieren müssen, auch wenn Sie es nur kopieren möchten, oder die Gefahr besteht, dass es abgehackt und nicht synchron ist. Sie könnten es einfach
-c copy
zuerst versuchen , aber wenn das Video nicht funktioniert, müssen Sie es erneut ausführen.quelle
-c:a copy
für diese Art des Suchens.Ich fand, dass in
-ss
Kombination mit-c copy
zu Beginn eine halbe Sekunde Chop resultierte.Um dies zu vermeiden, müssen Sie das entfernen
-c copy
(was zugegebenermaßen eine Transcodierung bewirkt).quelle
-c copy
behoben.MANUELL
Öffnen Sie die Datei in einem Mediaplayer, der Bild für Bild vorrückt, und geben Sie eine AVISynth-Datei mit folgenden Daten wieder:
Dann schneiden Sie mit dem GENAUEN Zeitformat:
und
Erstellen Sie nun eine txt-Datei mit den Videodateien mit Inhalten wie:
Führen Sie ffmpeg aus:
quelle
Für mich hat die
-t
Option nicht funktioniert, hat aber-vframes
funktioniert. Ich bevorzuge die Verwendung#frames
, da ich lieber bei I-Frames schneiden würde und GOP für die Verwendung von Videos herausgefunden habeffprobe
.Die Kommandozeile, die bei mir funktioniert hat, ist:
Übrigens macht
-ss
das-i
Vorrücken einen großen Unterschied in der Ausführungszeit.quelle
-vframes
(oder-frames:v
) danach kommen,-i
weil es eine Ausgabeoption ist.Wie bei user225366 funktioniert die Option -t nicht für kurze Videos, aber für längere Videos. Für kurze Videos scheint -frames: v besser zu sein. Das hat bei mir funktioniert.
-acodec-Kopie muss hinzugefügt werden, wenn das Video Audio enthält, wie die anderen Antworten zeigen.
quelle
Ich sehe nicht viele, die das erwähnen (ich bin kein Experte, also gibt es vielleicht einen Haken), aber wenn Ihre Datei andere Streams wie Untertitel und andere Metadaten wie Kapitel und so weiter hat, ist es möglich, alle Streams mit dem auszuschneiden / zuzuschneiden und zu behalten folgenden Befehl
Mit
-map 0
ihr nehmen alle Ströme in der Datei und mit-c copy
Ihnen allen , sie zu kopieren , wie sie sind.Wenn Sie
-to
den Start über weglassen,-ss
wird das Eingangsvideo vom Start bis zur 60. Sekunde abgeschnitten.Das Herumspielen
map
ist auch nützlich, wenn Sie möchten, dass nur bestimmte Streams im Schnitt bleiben (möglicherweise benötigen Sie nicht alle Audioquellen in der Datei oder nur einige Untertitel).Ich benutze dies, wenn ich große MKV-Dateien aufteilen muss, die nicht im FAT32-Speicher gespeichert werden können.
quelle