Comment convertir rapidement mp4 en webm en utilisant ffmpeg?


20

Je dois convertir 76 fichiers mp4 en webm dans le but d'un site Web qui utilise des vidéos HTML5. Je parle de 10 Go de fichiers mp4 ... Je sais que je peux simplement demander à ffmpeg de le faire en utilisant:

ffmpeg -i input_file.mp4 output_file.webm

Bien sûr, je le ferai récursivement en:

find ./ -name '*.mp4' -exec bash -c 'ffmpeg -i "$0" "${0%%.mp4}.webm"' {} \;

J'ai même essayé quelque chose que j'ai trouvé quelque part sur Internet:

ffmpeg -i input_file.mp4 -cpu-used 4 -threads 8 output_file.webm

Mais le truc c'est que ça ne me prendra pas moins d'une semaine !!! Qu'est-ce que je fais mal? Y a-t-il un moyen possible d'accélérer cela? Si je convertis en ogg, vais-je gagner en vitesse? Aidez-moi !!!



@LordNeckbeard, vous devez rédiger une réponse basée sur ce guide. En outre, il convient de noter que l'encodeur vpx est lent comme la mélasse, même avec des paramètres sains, etc., par rapport à x264 ... sauf si vous êtes prêt à sacrifier beaucoup de qualité, il est impossible d'obtenir des encodages très rapides avec lui.
evilsoup

Le problème concerne la compatibilité .. Voici un petit tableau de compatibilité: {x264: IE (+) Safari (+) Chrome (+) Firefox (-) Opera (-)} {webm: IE (-) Safari (-) Chrome (+) Firefox (+) Opera (+)} Je sais qu'ils disent que Safari et IE détiennent la plus grande part du marché mais j'en doute sérieusement et je parierais sur Firefox et Opera! ;)
pr.nizar

@ pr.nizar Merci à Cisco de publier OpenH264 sous BSD, firefox prend désormais en charge h.264.
Wyatt8740

Réponses:


11

Le transcodage vidéo prend du temps. Il faut également beaucoup plus de connaissances sur les paramètres de codage; Les valeurs par défaut de ffmpeg sont peu susceptibles de vous convenir et peuvent même ne pas créer de fichier de sortie utilisable.

Voici un début:

http://blog.pcode.nl/2010/10/17/encoding-webm-using-ffmpeg/

Ces paramètres coderont pour un débit moyen particulier (débit vidéo de 3900 kbit), il y aura donc des pointes dans le débit.

MP4 et WebM utilisent des codecs vidéo différents, il n'y a donc pas de raccourci; la vidéo doit être transcodée.

La vitesse d'encodage, bien sûr, variera énormément en fonction de la taille d'image, de la fréquence d'images et des paramètres de qualité. Pour un encodage 720p, vous pouvez vous attendre à pouvoir encoder environ 1: 1 (soit 10 heures de vidéo en 10 heures) sur un processeur au cours des deux dernières années. Si vous effectuez un codage ABR en deux passes comme dans l'exemple donné dans le lien, presque le double.


8

Doublez-le ou coupez-le à moitié? C'est donc une impasse .. Je ne jouerai pas avec des débits binaires, je ne sais jamais à quoi m'attendre de la qualité ou de la taille .. Je pense que je vais m'en tenir à celui-ci et faire tenir le client jusqu'à la fin de la conversion ..

find ./ -name '*.mp4' -exec bash -c 'ffmpeg -i "$0" -vcodec libvpx -acodec libvorbis -cpu-used 5 -threads 8 "${0%%.mp4}.webm"' {} \;

Je le poste pour les futurs utilisateurs, en fait j'ai gagné en vitesse mais mon CPU fonctionne comme un enfer: 60 à 80% sur chaque coeur! Maintenant, je pense que cela prendra moins de temps: 3 jours au lieu de 6 ou 7 .. J'espère que ça ne le cassera pas .. ^ _ ^

Merci quand même mec!

Edit: Suppression du commutateur -sameq après les commentaires de LordNeckbeard et neon_overload -sameq ne signifie pas la même "qualité"


3
-sameqne signifie pas "même qualité" et a été supprimé en amont. Ne l'utilise pas. Référez-vous au lien dans mon commentaire à votre question pour des instructions détaillées d'encodage libvpx.
llogan

2
-sameq signifie le même quantificateur, mais il est impossible de comparer les quantificateurs entre h.264 et VP8, donc même si cela fonctionnait, vous obtiendriez presque certainement des résultats cassés si vous l'utilisiez - alors ne le faites pas.
thomasrutter

2
Merci mec d'avoir attiré mon attention sur ça! J'ai édité ma réponse ..;) En fait, je n'ai pas utilisé ce commutateur car j'ai vu qu'il devenait encore plus lent. Le travail a été fait en un jour et demi avec ceci: find ./ -name '* .mp4' -exec bash -c 'avconv -i "$ 0" -vcodec libvpx -acodec libvorbis -cpu-used 5 -threads 8 " $ {0 %%. Mp4} .webm "'{} \; Je sais que je détourne le sujet avec ce commentaire mais j'ai pensé qu'il valait la peine de le dire .. ^ _ ^ J'espère que ça aide quelqu'un! ;)
pr.nizar

Pour la qualité vraiment je ne peux pas faire la différence entre les fichiers originaux et ceux webm trancodés: c'est presque les mêmes qualités audio et vidéo!
pr.nizar

1
Il est toujours recommandé de définir une valeur crf ou bitrate au lieu d'utiliser les valeurs par défaut de ffmpeg / avconv, quelles qu'elles soient.
thomasrutter
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.