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.
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.
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.
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
).
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.
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.