web-dev-qa-db-fra.com

Comment créer un fichier vidéo MPEG2 avec la meilleure qualité possible avec FFMPEG?

J'ai un fichier WMV (v9 (WMV3), 960x720, 30,000030 fps, plan 4: 2: 0 YUV, produit par PowerPoint 2010) et je dois le convertir en MPEG2 - le seul format que mon téléviseur peut lire à partir d'une clé USB (J'ai également essayé MP4/h.264, AVI/XVID - rien ne fonctionne, mais MPEG2 fonctionne).

J'ai réussi à faire le travail avec simple

ffmpeg -i "in.wmv" -c:v mpeg2video "out.mpg"

mais la qualité du résultat est épouvantable (des distorsions visuelles clairement visibles sont introduites) et la lecture n'est pas lisse (trop lente à certains moments).

J'ai aussi essayé

ffmpeg -i "in.wmv" -c:v mpeg2video -pix_fmt yuv420p -me_method epzs -threads 4 -r 30.000030 -g 45 -bf 2 -trellis 2 -cmp 2 -subcmp 2 -s 960x720 -b 2500k -bt 300k -async 1 -y "out.mpg"

(J'ai trouvé cela quelque part sur Internet et modifié un petit peu - j'ai modifié la résolution, la fréquence de rafraîchissement et le format de sortie (de VOB à MPG nu)) mais la qualité est toujours aussi mauvaise.

Quels paramètres dois-je utiliser pour économiser le plus de qualité possible? Le taux de compression importe peu, même une augmentation de la taille du fichier est acceptable.

Une autre chose dont j’ai réellement besoin (j’ai choisi de ne pas l’inclure dans le titre de la question pour éviter de la rendre trop spécifique mais j’apprécierais que ce soit pris en compte dans les réponses) consiste à ajouter du silence pur comme piste sonore - il n’ya pas de son dans la original mais le téléviseur se plaint et j'aimerais me débarrasser de ce reproche. J'ai généré un fichier OGG Vorbis de silence de même longueur (seconde précision) avec Audacity, mais je ne parviens pas à le fusionner avec la vidéo:

ffmpeg -i in.mpg -i silence.ogg -c:v copy -c:a libmp3lame out.mpg

et même nu

ffmpeg -i in.mpg -c:v copy -out.mpg

donne les erreurs "buffer underflow" et "paquet too large". (in.mpg sont les fichiers produits par le même fichier binaire FFMPEG et le même fichier WMV source utilisant les deux premières commandes de la question).

J'utilise une version Zeranoe FFMPEG sous Windows 7.

13
Ivan

Le problème est que le débit par défaut du MPEG-2 est plutôt faible (comme avec la plupart des autres encodeurs vidéo dans ffmpeg, l’un H.264 étant une exception). MPEG-2 n’est pas non plus le meilleur choix en tant que codec de nos jours.

Meilleure qualité pour MPEG-2

Vous avez quelques options si vous voulez vous en tenir au MPEG-2:

  • Augmenter le débit. Vous utilisez maintenant -b:v 2500k. S'il s'agit d'une vidéo HD, vous n'irez pas loin avec seulement 2,5 Mbits/s. Il vous faut au moins le double, voire plus, pour que le résultat soit beau. Par exemple, utilisez -b:v 6000k -target pal-dvd.

    Pour 720p, je pense que vous devriez toujours utiliser un débit plus élevé. N'oubliez pas que les DVD utilisent le format MPEG-2 et qu'ils consomment environ 4,7 Go pour 2 heures de film. Vous obtenez donc environ 5 à 8 Mbit/s. MPEG-2 n’est vraiment pas très efficace en compression et fonctionne mieux à des débits binaires plus élevés.

  • Utilisez un paramètre de qualité spécifique. Remplacez -b:v … par -qscale:v 2. Le nombre ici va de 1 à 31 et plus signifie une qualité inférieure. Inutile d'aller au-delà de 4 ou 5. Si vous ne vous souciez pas du débit, commencez par 2 et voyez si cela vous convient.

Le fait de jouer avec le nombre d’images B, la méthode d’estimation de mouvement ou la taille du groupe d'images peut modifier légèrement la qualité, mais n'entraînera pas de grands changements.

Audio silencieux

Utilisez -f lavfi -i aevalsrc=0 pour générer un flux audio silencieux. Par exemple:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v mpeg2video -qscale:v 2 -c:a libmp3lame "out.mpg"

Vous devrez peut-être ajouter -target pal-dvd à la commande ci-dessus pour forcer une certaine taille de mémoire tampon.

J'ai choisi MP3 comme codec. Les fichiers MPEG ne peuvent pas contenir d’audio autre que MPEG Layer I et II, ainsi que les flux PCM. Par conséquent, l’utilisation d’un fichier Ogg Vorbis silencieux ne fonctionnera pas à moins de convertir également le flux audio (ce qui n’est pas ce que vous faites lorsque vous utilisez -c:a copy ).

Utilisez un codec vidéo différent

Je suis surpris qu'un téléviseur qui lit des fichiers vidéo lise MPEG-2, mais rien d'autre. Au moins la vidéo MPEG-4 Partie II doit être prise en charge (c'est ce que vous connaissez sous le nom de "DivX" - une MPEG-4 Partie Codeur II). Pour que vous puissiez essayer:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libxvid -qscale:v 2 -c:a libmp3lame "out.mp4"

Votre téléviseur pourrait également prendre en charge le format H.264, mais uniquement un certain profil. Essayez d’utiliser le profil baseline, par exemple:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libx264 -profile:v baseline -crf 23 -c:a aac -strict experimental "out.mp4"

Dans l'exemple ci-dessus, j'ai utilisé l'option CRF pour définir la qualité au lieu de qscale. Voir le Guide de codage H.264 pour plus d'informations.

14
slhck

Je dirais immédiatement que si la taille du fichier n’a pas vraiment d’importance, essayez simplement d’augmenter le débit binaire.

Pour l'audio silencieux, vous voudrez peut-être simplement utiliser ffmpeg, je ne connais pas assez Audacity pour donner quelque commentaire que ce soit. J'ai déjà utilisé cela auparavant.

ffmpeg.exe -f lavfi -i aevalsrc=0:0::duration=YOUR_DESIRED_DURATION -ab 10k YourAudioName.aac

Cela ne fonctionnera pas pour vous car vous utilisez le conteneur mpg, vous voudrez peut-être essayer. (Conteneur mp3)

ffmpeg.exe -f lavfi -i aevalsrc=0:0::duration=YOUR_DESIRED_DURATION -ab 10k YourAudioName.mp3

Cela semblait fonctionner pour moi.

0
dstob