web-dev-qa-db-fra.com

Conversion de vidéos en WebM avec ffmpeg / avconv

Alors que essayant d’optimiser la taille de mes vidéos personnelles , j’ai converti certaines d’entre elles en WebM à titre de 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é de l'image est sensiblement la même pour moi.

J'ai aussi essayé de faire la conversion en utilisant avconv afin de pouvoir le scripter, mais le fichier résultant a vraiment l'air dingue. 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. Est-ce que quelqu'un sait quels sont les paramètres corrects à utiliser pour convertir un film h264 en webm et obtenir la même qualité que celle de Pitivi?

Ce sont les paramètres dans Pitivi: creating the Pitivi ProjectRendering to webm (html5 video)codec configuration

18
jeroen

Remarque: Cette information est basée sur le wiki de FFmpeg sur encodage VP9 . Veuillez vous référer à cet article pour plus d'informations - il sera continuellement maintenu et étendu. Pour de meilleurs résultats, utilisez une version récente de ffmpeg en téléchargez-la depuis leur site Web (une version statique suffira; elle contient le codeur libvps-vp9.).

Débit binaire variable

Le codage VBR vous donne la qualité globale optimale, car le codeur peut choisir librement 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 constant.

Option 1: codage de qualité constante

Généralement, si vous ne souhaitez pas cibler une taille de fichier spécifique, vous devez laisser le débit binaire varier librement, car cela entraînera une qualité optimale. 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 basses 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 cible

Si vous souhaitez que votre fichier ait un débit binaire cible ou une taille de fichier 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 suffire 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 Windows doivent utiliser NUL au lieu de /dev/null et un ^ au lieu de \.

Débit constant

Tout d’abord, libvpx offre des modes de codage à débit constant et à débit variable . Un débit constant doit être évité autant que possible (sauf si vous ciblez une taille de fichier spécifique ou un scénario de diffusion en continu), car la qualité moyenne par taille de fichier sera plus mauvaise. Vous pouvez néanmoins essayer de définir un débit constant si rien d’autre ne vous convient, par exemple. avec 1 MBit/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 selon vos préférences (ou les contraintes de taille de fichier). Par exemple, vous pouvez utiliser 500K ou 5M, et cetera.

Vous devez spécifier -minrate, -maxrate et le débit binaire -b:v pour que l'encodeur puisse utiliser CBR. Ils doivent tous avoir la même valeur - sinon, le débit binaire cible sera différent et l'encodage VBR sera effectué, mais avec une mauvaise qualité.

L'audio

Le codec audio actuel de choix pour l’encodage VP9 est Opus. FFmpeg choisira le codeur 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 libopus documentation pour plus d'options.

54
slhck