ffmpeg bietet diese Funktionalität. Alles, was Sie tun müssen, ist etwas wie laufen
ffmpeg -i <inputfilename> -s 640x480 -b 512k -vcodec mpeg1video -acodec copy <outputfilename>
Bei neueren Versionen von ffmpeg müssen Sie ändern -b
zu -b:v
:
ffmpeg -i <inputfilename> -s 640x480 -b:v 512k -vcodec mpeg1video -acodec copy <outputfilename>
Konvertieren der Eingangsvideodatei in ein Video mit einer Größe von 640 x 480 und einer Bitrate von 512 Kilobit / Sek. mithilfe des MPEG 1-Videocodecs und Kopieren des ursprünglichen Audiostreams. Natürlich können Sie alle benötigten Werte eingeben und mit der Größe und Bitrate herumspielen, um den gewünschten Kompromiss zwischen Qualität und Größe zu erzielen. Es gibt auch eine Menge anderer Optionen, die in der Dokumentation beschrieben sind
Führen Sie ffmpeg -formats
oder ffmpeg -codecs
für eine Liste aller verfügbaren Formate und Codecs. Wenn Sie für die endgültige Ausgabe keinen bestimmten Codec als Ziel festlegen müssen, können Sie mit einem Codec nach dem neuesten Stand der Technik wie H.264 bessere Komprimierungsverhältnisse bei minimalem Qualitätsverlust erzielen.
-b
für die Video-Bitrate und-ab
für die Audio-Bitrate, aber es hat sich geändert zu-b:[stream specifier]
.ffmpeg -i <inputfilename> -s 640x480 -b 512k -vcodec mpeg1video -acodec copy <outputfilename>
Wenn Sie die gleiche Bildschirmgröße beibehalten möchten, können Sie den crf-Faktor verwenden: https://trac.ffmpeg.org/wiki/Encode/H.264
Hier ist der Befehl, der für mich funktioniert: (Auf einem Mac müssen Sie hinzufügen
-strict -2
, um einen Audio-Codec verwenden zu können.quelle
-c:a aac
). Verwenden Sie-c:a libopus -b:a 64k
oder so etwas. (Beachten Sie jedoch, dass MP4-Container kein Opus-Audio enthalten können.)-b:v 1M
überschreibt-crf
. Verwenden Sie nicht beide. Verwenden Sie einfach CRF.Anstatt feste Bitraten zu wählen, können Sie mit dem H.264-Codec auch eine andere Voreinstellung auswählen, wie unter https://trac.ffmpeg.org/wiki/x264EncodingGuide beschrieben . Ich fand auch Video Encoder Vergleich in KeyJs Blog ( archivierte Version ) eine interessante Lektüre, es vergleicht H.264 mit Theora und anderen.
Es folgt ein Vergleich verschiedener Optionen, die ich ausprobiert habe. Das aufgenommene Video hatte ursprünglich eine Größe von 673 Millionen und wurde mit RecordMyScreen auf einem iPad aufgenommen . Es hat eine Dauer von ungefähr 20 Minuten mit einer Auflösung von 1024 x 768 (wobei die Hälfte des Videos leer ist, also habe ich es auf 768 x 768 zugeschnitten). Um die Größe zu reduzieren, habe ich die Auflösung auf 480x480 gesenkt. Es gibt kein Audio.
Die Ergebnisse unter Verwendung derselben 1024 x 768 als Basis (und Anwenden von Zuschneiden, Skalieren und einem Filter ):
-b 512k
hinzugefügt, fiel die Größe auf 77M (Codierungszeit: 1m17s).-preset veryslow
(und nein-b
) wurde es 70M (Codierungszeit: 6m14s)-b 512k
und-preset veryslow
wird die Größe 77M (100K kleiner als nur-b 512k
).-preset veryslow -crf 28
bekomme ich eine 39M-Datei, die 5m47s gedauert hat (ohne visuellen Qualitätsunterschied für mich).N = 1, nehmen Sie die Ergebnisse mit einem Körnchen Salz und führen Sie Ihre eigenen Tests durch.
quelle
-crf 23
. Aber ja, für das einmalige Codieren von Streams sollten Sie so etwas wie verwenden-preset veryslow
. Kein Wunder, dass dies bei einer Bildschirmaufnahme sehr gut funktioniert . Normalerweise müssen Sie nicht verkleinern, es sei denn, Sie streben sehr niedrige Bitraten an. Wenn die Details auf mehr Pixel verteilt bleiben, können Codecs die Details besser erhalten. Artefakte um scharfe Kanten haben in der Regel eine feste Anzahl von Pixeln, sodass eine höhere Auflösung die Artefakte kleiner macht. (Obwohl weniger Bits pro Pixel mehr Quantisierung bedeuten, verschwimmt ein Teil davon anstelle von Artefakten.)Es gibt eine Anwendung für Mac und Windows. Rufen Sie Handbrake an. Ich weiß, dass dies kein Befehlszeilenmaterial ist, sondern eine schnell zu öffnende Datei. Wählen Sie das Ausgabedateiformat und die grobe Ausgabegröße aus, während Sie die meisten guten Dinge über das Video behalten, dann ist dies gut , es ist nur eine grafische Ansicht von ffmpeg von seiner besten Seite ... Es unterstützt die Befehlszeileneingabe für diese eingefleischten Texter. https://handbrake.fr/downloads.php
quelle
Ich wollte dies zu kürzlich tun, deshalb habe ich ein Tool namens Shrinkwrap erstellt , das FFmpeg zum Transcodieren von Videos verwendet und dabei so viele der ursprünglichen Metadaten wie möglich beibehält (einschließlich Zeitstempel für Dateimodifikationen).
Sie können es als Docker-Container ausführen:
Wo:
Anschließend werden alle Videodateien, die der Erweiterung entsprechen, rekursiv gefunden und in gleichnamige Dateien mit einem
-tc
Suffix umgewandelt.Weitere Konfigurationsoptionen, Voreinstellungen für GoPro usw. finden Sie in der Readme-Datei .
Hoffe das hilft jemandem!
quelle
-i Eingabedatei
-b: v Videobitrat des Ausgabevideos in Kilobyte (Sie müssen es versuchen)
-s Abmessungen des Ausgabevideos
-fs FILESIZE des ausgegebenen Videos in Kilobyte
-vcodec videocodec (
ffmpeg -codecs
zum Auflisten aller verfügbaren Codecs)quelle
-fs
bewirkt, dass FFmpeg die Codierung beendet, nachdem diese Dateigröße erreicht wurde. Es ist keine Zieldateigröße für die Ratenberechnung. Wenn Sie-b:v
richtig verstanden haben, hat Ihre Datei ohnehin die richtige Größe, und wenn Sie sie falsch verstanden haben, ist sie kleiner oder abgeschnitten.