De quel type de scripts ffmpeg ai-je besoin pour obtenir une «vidéo pour tout le monde» compatible HTML5?

12

Quelle liste de commandes dois-je faire dans ffmpeg / mencoder / some_other_CLI_app pour obtenir une vidéo dans tous les bons formats pour utiliser Video for Everybody ?

ie Y a-t-il une subtilité qui empêche qu'il y ait un tutoriel mécanique qui dit

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

Ensuite, copiez et collez le code Video for Everybody dans votre page?

Mon objectif est d'avoir une vidéo intégrée dans ma page Web personnelle hébergée par moi. HTML5 avec secours flash est préféré, donc le moyen le plus simple semble être la vidéo pour tout le monde. Mais cette page laisse la partie la plus compliquée, encodant la vidéo dans tous les différents formats, au lecteur de comprendre en lisant un article long et complet sur les formats vidéo . Ce n'est sûrement pas nécessaire. Je pourrais fournir une liste de commandes pour qu'un utilisateur convertisse aveuglément un fichier audio en un tas de formats différents. Si tout va bien un gourou de ffmpeg pourrait faire la même chose pour la vidéo.

John Baber-Lucero
la source
1
Petit commentaire sur vos exemples de pseudocode: il n'y a pas .movde vidéo HTML5 et il n'y a pas d' h.264extension non plus. Il y a .264 , qui est le bytestream brut de l'annexe B pour les unités NAL. L'encodage vidéo n'est pas sorcier, mais vous devez investir un peu de temps pour connaître les concepts.
slhck

Réponses:

21

Remarque: Cette réponse a été fortement modifiée depuis sa publication d'origine. C'est 2017 maintenant; le streaming fonctionne différemment qu'auparavant. Ce guide suppose un téléchargement progressif simple d'un flux vidéo à une résolution donnée - pas de streaming adaptatif.

Exigences

Tout d'abord, assurez-vous de télécharger une ffmpegversion récente (téléchargez une version statique; n'appelez pas apt-get install ffmpegou similaire). Idéalement, compilez-le vous-même . Ça ne prend pas trop de temps.

Pour générer des vidéos prises en charge par la plupart des navigateurs, vérifiez toujours la dernière table de compatibilité . Il n'y a pas de codec / format unique qui fonctionne dans tous les navigateurs, mais si vous générez H.264 en MP4 et VP9 en WebM, avec le codec audio respectif, vous aurez un support pour Chrome, Firefox, Safari et certaines versions d'IE.

WebM (VP9 / Vorbis)

Suivez les recommandations du guide FFmpeg VP9 et utilisez une approche de codage en deux passes avec des contraintes de débit:

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

Le débit binaire cible dépend de votre résolution, de la fréquence d'images, du type de contenu et de la qualité souhaitée. 2,5 Mbits / s devraient être un bon compromis pour la vidéo HD à 30 ips. Consultez ce guide Google pour quelques recommandations.

MP4 (H.264 / AAC)

Suivez les recommandations du guide FFmpeg H.264 et utilisez une approche de codage en deux passes avec des contraintes de débit:

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

Ici, le débit binaire cible devrait être environ 50% plus élevé que pour la vidéo VP9, ​​car H.264 n'est pas aussi efficace. Ajoutez l' -movflags faststartoption au deuxième passage pour accélérer le chargement initial de la vidéo.

Pour définir les options audio, consultez le guide de codage AAC .

slhck
la source
1
La version 2013-12-19 de l'un de vos paragraphes se termine au milieu de la phrase. "L'audio par défaut est à 128 kBit / s à nouveau, mais vous pouvez définir q: a pour un débit binaire variable, où les valeurs vont de 0 à 500. 100 est la valeur par défaut et une valeur supérieure signifie mieux. Si"
Alan De Smet,
@slhck a beaucoup de sens, mais mes deux cents sont que vous laissez tomber Ogg et le remplacez par mpegts / m3u8 pour prendre en charge tous les appareils iOS ou ceux qui acceptent HLS. Vous pouvez réutiliser les fichiers .mp4 et simplement ajouter le traitement mpeg-ts dans ffmpeg.
Paul Gregoire
@Mondain En effet, mais MPEG-TS / .m3u8 n'est généralement pas compatible avec HTML5. Vous avez besoin d'un serveur HLS et vous devez en savoir un peu plus sur le streaming, ce qui n'est pas vraiment dans le cadre de cette question.
slhck
De bons points, mais d'après mon expérience jusqu'à présent, un simple serveur http peut servir m3u8 à un tag vidéo. La seule chose que l'on doit normalement faire est d'ajouter les types MIME pour m3u8 et ts à la configuration de serveur respective.
Paul Gregoire