Conversion de vidéo en WebM avec ffmpeg / avconv

18

Tout en essayant d'optimiser la taille de mes vidéos personnelles, j'ai converti certaines d'entre elles en WebM comme test, en utilisant Pitivi sur Xubuntu. La différence de taille est significative. Le fichier webm résultant ne représente qu'environ 10% du fichier d'origine, tandis que la qualité d'image me semble à peu près la même.

J'ai également essayé de faire la conversion en utilisant avconvafin de pouvoir l'écrire, mais le fichier résultant semble vraiment merdique. Après avoir examiné les paramètres de rendu dans Pitivi, j'ai essayé certains paramètres avconv -i $1 -q 5 -qmin 0 -qmax 63 ${1%.*}.webm:, mais la qualité ressemble toujours à de la merde, il semble donc que je manque / j'utilise des paramètres incorrects. Quelqu'un sait-il quels sont les paramètres corrects à utiliser pour convertir un film h264 en webm et obtenir la même qualité que depuis Pitivi?

Ce sont les paramètres de Pitivi: création du projet Pitivi Rendu à webm (vidéo html5) configuration du codec

jeroen
la source

Réponses:

53

Remarque: Ces informations sont basées sur le wiki FFmpeg sur l' encodage VP9 . Veuillez vous référer à cet article pour plus d'informations - il sera continuellement maintenu et étendu. Pour les meilleurs résultats, vous devez utiliser une version récente de ffmpegen la téléchargeant à partir de leur site Web (une construction statique suffira; elle contient l' libvps-vp9encodeur).

Débit binaire variable

L'encodage VBR vous donne la qualité globale optimale, car l'encodeur peut librement choisir le nombre de bits à affecter à une trame. Choisissez ce mode sauf si vous préparez des vidéos pour une diffusion en continu à débit binaire constant.

Option 1: encodage de qualité constante

En règle générale, si vous ne souhaitez pas cibler une taille de fichier spécifique, vous devez laisser le débit binaire varier librement, car cela conduira à la meilleure qualité. Pour ce faire, définissez le débit binaire sur 0 et le facteur de débit constant ( CRF ) sur le niveau de qualité cible:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm

La valeur CRF peut être comprise entre 0 et 63. Des valeurs plus faibles signifient une meilleure qualité. Les valeurs recommandées vont de 15 à 35, 31 étant recommandées pour la vidéo HD 1080p. Google a un guide avec plus d'informations à ce sujet .

Option 2: codage en deux passes avec un débit binaire cible

Si vous souhaitez que votre fichier ait un débit ou une taille de fichier cible spécifique, vous devez spécifier le débit et utiliser un codage en deux passes (qui garantira une distribution de qualité optimale). Ici, nous choisissons 5 MBit / s, ce qui devrait être suffisant pour un contenu 1080p.

ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 1 -f webm /dev/null && \
ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 2 output.webm

Les utilisateurs de Windows doivent utiliser à la NULplace de /dev/nullet au ^lieu de \.

Débit constant

Tout d'abord, libvpx propose des modes de codage à débit constant et à débit variable . Le débit binaire constant doit être évité autant que possible (sauf si vous ciblez une taille de fichier spécifique ou un scénario de streaming), car la qualité moyenne par taille de fichier sera pire. Cependant, vous pouvez essayer de définir un débit binaire constant si rien d'autre ne fonctionne pour vous, par exemple avec 1 Mo / s:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -minrate 5M -maxrate 5M -b:v 5M output.webm

Regardez la sortie et augmentez ou diminuez le débit binaire à votre goût (ou les contraintes de taille de fichier). Par exemple, vous pouvez utiliser 500Kou 5M, et cetera.

Vous devez spécifier -minrate, -maxrateet le débit -b:vpour que l'encodeur à utiliser CBR. Ils doivent tous avoir la même valeur, sinon il choisira un débit binaire cible différent à la place et effectuera le codage VBR, mais avec une mauvaise qualité.

l'audio

Le codec audio actuel de choix pour l'encodage VP9 est Opus. FFmpeg choisira l'encodeur nécessaire et ses options par défaut. Si vous souhaitez définir explicitement -c:a libopus, vous pouvez également le faire. Reportez-vous à la libopusdocumentation pour plus d'options.

slhck
la source
4
Il s'agit, actuellement, du meilleur guide pour encoder VP8 sur l'ensemble d'Internet. Bien joué, j'aimerais pouvoir voter plus d'une fois!
evilsoup
@evilsoup Merci. Je suis encore en train de le peaufiner et j'ajouterai une nouvelle page sur le wiki FFmpeg plus tard.
slhck
C'est vraiment une merveilleuse réponse! Je comprends maintenant pourquoi ma vidéo était toujours de la même qualité faible, car j'utilisais en fait toujours la valeur par défaut de 256 kBit / s. Merci beaucoup!
jeroen
Quelles étaient les différences de taille entre le mp4 d'origine et le webm converti?
switz
1
@Dan Je viens de mettre à jour le guide - j'ai remarqué qu'il était un peu dépassé. Content que vous ayez trouvé ça utile.
slhck