Welche ffmpeg-Skripte benötige ich, um HTML5-kompatibles "Video für alle" zu erhalten?

12

Welche Befehlsliste sollte ich in ffmpeg / mencoder / some_other_CLI_app ausführen, um ein Video in den richtigen Formaten für die Verwendung von Video for Everybody zu erhalten ?

Gibt es eine Feinheit, die verhindert, dass es ein mechanisches Tutorial gibt, das sagt

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

Dann kopieren Sie den Code von Video for Everybody und fügen ihn auf Ihrer Seite ein.

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 jedermann zu sein. Diese Seite überlässt dem Leser jedoch den kompliziertesten Teil, nämlich das Kodieren des Videos in die verschiedenen Formate, indem er einen langen und vollständigen Artikel über Videoformate liest . Das ist doch nicht nötig. Ich könnte eine Liste von Befehlen für einen Benutzer bereitstellen, um eine Audiodatei blind in eine Reihe von verschiedenen Formaten zu konvertieren. Hoffentlich könnte ein ffmpeg-Guru dasselbe für Videos tun.

John Baber-Lucero
quelle
1
Kleiner Kommentar zu Ihren Pseudocode-Beispielen: Es gibt kein .movHTML5-Video und auch keine h.264Erweiterung. Es gibt .264 , das ist der rohe Nebenstrom von Anhang B für NAL-Einheiten. Videocodierung ist keine Hexerei, aber Sie müssen ein wenig Zeit investieren, um die Konzepte kennenzulernen.
Slhck

Antworten:

21

Hinweis: Diese Antwort wurde seit ihrer ursprünglichen Veröffentlichung stark bearbeitet. Es ist jetzt 2017; Streaming funktioniert anders als früher. In diesem Handbuch wird davon ausgegangen, dass nur ein Videostream mit einer bestimmten Auflösung heruntergeladen wird - kein adaptives Streaming.

Bedarf

Stellen Sie zunächst sicher, dass Sie eine aktuelle ffmpegVersion herunterladen (statischen Build herunterladen; nicht aufrufen apt-get install ffmpegoder ähnliches). Im Idealfall 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 keinen einzigen Codec / Format, der in jedem Browser funktioniert. Wenn Sie jedoch H.264 in MP4 und VP9 in WebM mit dem entsprechenden Audio-Codec generieren, werden Chrome, Firefox, Safari und einige IE-Versionen unterstützt.

WebM (VP9 / Vorbis)

Befolgen Sie die Empfehlungen im FFmpeg VP9-Handbuch und verwenden Sie einen Codierungsansatz mit zwei Durchläufen und eingeschränkten Übertragungsraten:

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, der Bildrate, der Art des Inhalts und der gewünschten Qualität ab. 2,5 MBit / s sollten bei HD-Videos mit 30 fps ein guter Kompromiss sein. In diesem Google-Handbuch finden Sie einige Empfehlungen.

MP4 (H.264 / AAC)

Befolgen Sie die Empfehlungen im FFmpeg H.264-Handbuch und verwenden Sie einen Codierungsansatz mit zwei Durchläufen und eingeschränkten Übertragungsraten:

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 Ziel-Bitrate etwa 50% höher sein als bei VP9-Video, da H.264 nicht so effizient ist. Fügen Sie die -movflags faststartOption zum zweiten Durchgang hinzu, um das erstmalige Laden des Videos zu beschleunigen.

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

slhck
quelle
1
Die 2013-12-19-Version eines Ihrer Absätze wird in der Mitte des Satzes abgeschnitten. "Die Standardeinstellung für Audio ist wieder 128 kBit / s, aber Sie können q: a für variable Bitrate einstellen, wobei die Werte zwischen 0 und 500 liegen. 100 ist die Standardeinstellung und höher bedeutet besser. Wenn"
Alan De Smet
@slhck macht viel Sinn, aber meine zwei Cent sind, dass Sie Ogg fallen lassen und durch mpegts / m3u8 ersetzen, um alle iOS-Geräte oder solche zu unterstützen, die HLS akzeptieren. Sie können die .mp4-Dateien wiederverwenden und einfach die mpeg-ts-Verarbeitung in ffmpeg hinzufügen.
Paul Gregoire
@Mondain In der Tat, aber MPEG-TS / .m3u8 ist im Allgemeinen kein HTML5-kompatibles Video. Sie benötigen einen HLS-Server und müssen ein wenig mehr über Streaming wissen, was nicht wirklich im Rahmen dieser Frage liegt.
Slhck
Gute Punkte, aber meiner Erfahrung nach kann ein einfacher http-Server m3u8 für ein Video-Tag dienen. Normalerweise müssen nur die MIME-Typen für m3u8 und ts zur jeweiligen Serverkonfiguration hinzugefügt werden.
Paul Gregoire