Was für eine Reihe von ffmpeg-Skripts brauche ich, um HTML5-kompatible "Video für alle" zu erhalten?

4913
John Baber-Lucero

Welche Liste der Befehle sollte ich in ffmpeg / mencoder / some_other_CLI_app ausführen, um ein Video in allen richtigen Formaten zu erhalten, um Video for Everybody verwenden zu können ?

Gibt es eine Subtilität, die verhindert, dass es ein mechanisches Tutorial gibt, das besagt?

VIDEO=video.mp4 TYPE=$(ffmpeg --find-information-about-the-video ... ) ffmpeg ... > video.mov ffmpeg ... > video.flv ffmpeg ... > video.webm ffmpeg ... > video.h.264 ... 

Kopieren Sie dann den Code für Jedermann in Ihre Seite.

Mein Ziel ist es, ein eingebettetes Video auf meiner von mir gehosteten persönlichen Webseite zu haben. HTML5 mit Flash-Fallback wird bevorzugt, daher scheint der einfachste Weg Video für alle zu sein. Diese Seite überlässt jedoch den kompliziertesten Teil, indem das Video in alle verschiedenen Formate kodiert wird, und kann dem Leser anhand eines langen und vollständigen Artikels über Videoformate klar werden . Das ist doch sicherlich nicht nötig. Ich könnte eine Liste von Befehlen für einen Benutzer bereitstellen, um eine Audiodatei blind in eine Reihe verschiedener Formate zu konvertieren. Hoffentlich könnte ein ffmpeg-Guru dasselbe für Videos tun.

12
Kleiner Kommentar zu Ihren Pseudocode-Beispielen: Es gibt kein .mov für HTML5-Videos und es gibt auch keine h.264-Erweiterung. * Ist * `.264`, das ist der rohe Annex-B-Bytestream für NAL-Einheiten. Videocodierung ist keine Hexerei, aber Sie müssen etwas Zeit investieren, um die Konzepte kennenzulernen. slhck vor 11 Jahren 1

1 Antwort auf die Frage

21
slhck

Hinweis: Diese Antwort wurde seit der ursprünglichen Veröffentlichung stark bearbeitet. Es ist jetzt 2017; Streaming funktioniert anders als früher. Dieses Handbuch setzt einen einfachen progressiven Download eines Videostreams mit einer bestimmten Auflösung voraus - kein adaptives Streaming.

Bedarf

Stellen Sie zunächst sicher, dass Sie eine aktuelle ffmpegVersion herunterladen (statische Version herunterladen, nicht aufrufen apt-get install ffmpegoder ähnliches). Idealerweise kompilieren Sie es selbst . Es dauert nicht zu lange.

Um Videos zu generieren, die von den meisten Browsern unterstützt werden, überprüfen Sie immer die neueste Kompatibilitätstabelle . Es gibt zwar kein einzelnes Codec / Format, das in jedem Browser funktioniert, aber wenn Sie in WebM H.264 in MP4 und VP9 mit dem entsprechenden Audio-Codec generieren, werden Sie Chrome, Firefox, Safari und einige IE-Versionen unterstützen.

WebM (VP9 / Vorbis)

Folgen Sie den Empfehlungen im FFmpeg VP9-Handbuch und verwenden Sie einen Codieransatz mit zwei Durchgängen und Ratenbeschränkungen:

ffmpeg -y -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libvorbis -pass 1 -f webm /dev/null && \ ffmpeg -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libvorbis -pass 2 output.webm 

Die Ziel-Bitrate hängt von Ihrer Auflösung, Bildrate, Art des Inhalts und der gewünschten Qualität ab. 2,5 MBit / s sollten bei HD-Videos mit 30 Bildern pro Sekunde ein guter Kompromiss sein. In diesem Google-Handbuch finden Sie einige Empfehlungen.

MP4 (H.264 / AAC)

Folgen Sie den Empfehlungen im FFmpeg H.264-Handbuch und verwenden Sie einen Codieransatz mit zwei Durchgängen und Ratenbeschränkungen:

ffmpeg -y -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 1 -c:a aac -f mp4 /dev/null && \ ffmpeg -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 2 -c:a aac -movflags faststart output.mp4 

Hier sollte die Zielbitrate etwa 50% höher sein als für VP9-Video, da H.264 nicht so effizient ist. Fügen Sie dem -movflags faststartzweiten Durchlauf die Option hinzu, um das anfängliche Laden des Videos zu beschleunigen.

Informationen zum Einstellen von Audiooptionen finden Sie in der AAC-Codierungsanleitung .

Die 2013-12-19-Version eines Ihrer Absätze wird mitten im Satz abgeschnitten. "Das Audio ist standardmäßig wieder auf 128 kBit / s eingestellt. Sie können jedoch q: a für variable Bitrate einstellen. Die Werte liegen zwischen 0 und 500. 100 ist Standard und höher bedeutet besser. Wenn" Alan De Smet vor 10 Jahren 0
@slhck macht sehr viel Sinn, aber meine zwei Cents sind, dass Sie Ogg ablegen und durch mpegts / m3u8 ersetzen, um alle iOS-Geräte zu unterstützen oder diejenigen, die HLS akzeptieren. Sie können die .mp4-Dateien wiederverwenden und einfach die mpeg-ts-Verarbeitung in ffmpeg hinzufügen. Paul Gregoire vor 9 Jahren 0
@Mondain Tatsächlich, aber MPEG-TS / .m3u8 ist im Allgemeinen kein HTML5-kompatibles Video. Sie benötigen einen HLS-Server und müssen etwas mehr über das Streaming wissen, was eigentlich nicht im Rahmen dieser Frage liegt. slhck vor 9 Jahren 0
Gute Punkte, aber aus meiner Erfahrung kann m3u8 bisher ein einfacher http-Server zu einem Video-Tag dienen. Das einzige, was man normalerweise tun muss, ist das Hinzufügen der Mime-Typen für m3u8 und ts zur jeweiligen Serverkonfiguration. Paul Gregoire vor 9 Jahren 0