J'ai un fichier WMV (v9 (WMV3), 960x720, 30.000030 fps, planar 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 que 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 fluide (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 j'ai modifié un peu - changé la résolution, le taux de rafraîchissement et le format de sortie (de VOB à MPG nu)) avec succès mais la qualité est encore trop mauvaise.
Quels paramètres dois-je utiliser pour économiser autant de qualité que possible? Le taux de compression n'a pas d'importance du tout, même l'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 le rendre trop spécifique mais j'apprécierais qu'il soit pris en compte dans les réponses) est d'ajouter du silence pur comme bande sonore - il n'y a pas de son dans le original mais le téléviseur s'en plaint et j'aimerais me débarrasser de cette plainte. J'ai généré un fichier OGG Vorbis de silence de même longueur (deuxième précision) à l'aide d'Audacity, mais je n'arrive 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 des erreurs "buffer underflow" et "packet too large". (in.mpg sont les fichiers produits par le même binaire FFMPEG et le même fichier WMV source en utilisant les deux premières commandes de la question).
J'utilise une version Zeranoe FFMPEG sur Windows 7.
Philips 42PFL3606H/58
, j'encode en H.264 avecffmpeg -i "in.wmv" -sws_flags lanczos+accurate_rnd -c:v libx264 -crf 20 -preset slow -profile:v baseline -level 3.0 -pix_fmt yuv420p -tune fastdecode -x264-params keyint=240:min-keyint=20 "out.mp4"
- le profil est le plus bas que je connaisse et encore plus de réglages sont utilisés pour faciliter la lecture du fichier résultant.Réponses:
Le problème est que le débit binaire par défaut du MPEG-2 est plutôt faible (comme avec la plupart des autres encodeurs vidéo de ffmpeg, le H.264 étant une exception). Le 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 souhaitez vous en tenir à MPEG-2:
Augmentez le débit binaire. Vous utilisez maintenant
-b:v 2500k
. Si c'est de la vidéo HD, vous n'irez pas loin avec seulement 2,5 MBit / s. Vous avez besoin d'au moins le double ou même 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 binaire plus élevé. N'oubliez pas que les DVD utilisent MPEG-2 et fournissent environ 4,7 Go pour 2 heures de film, vous obtenez donc environ 5 à 8 Mo / s. MPEG-2 n'est vraiment pas très efficace en compression et fonctionne mieux à des débits plus élevés.
Utilisez un paramètre de qualité spécifique. Remplacez
-b:v …
par-qscale:v 2
. Le nombre ici varie de 1 à 31 et plus signifie une qualité inférieure. Cela ne sert à rien d'aller au-delà de 4 ou 5. Si vous ne vous souciez pas du débit, commencez par 2 et voyez si cela fonctionne pour vous.Jouer avec le nombre d'images B, la méthode d'estimation de mouvement ou la taille du GOP 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:Vous devrez peut-être ajouter
-target pal-dvd
à la commande ci-dessus pour forcer une certaine taille de tampon.J'ai choisi MP3 comme codec. Les fichiers MPEG ne peuvent pas contenir d'audio autre que l'audio MPEG Layer I et II ainsi que les flux PCM, donc l'utilisation d'un fichier Ogg Vorbis silencieux ne fonctionnera pas à moins que vous convertissiez é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 lira MPEG-2 mais pas autre chose. Au moins la vidéo MPEG-4 Part II devrait être prise en charge (c'est ce que vous appelez "DivX" - un encodeur MPEG-4 Part II). Vous pouvez donc essayer:
Votre téléviseur peut également prendre en charge H.264, mais seulement un certain profil. Essayez d'utiliser le
baseline
profil, par exemple:Dans l'exemple ci-dessus, j'ai utilisé l'option CRF pour définir la qualité au lieu de
qscale
. Consultez le guide de codage H.264 pour en savoir plus.la source
ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libxvid -qscale:v 2 -c:a libmp3lame "out.mp4"
) - elle code environ 100 images, puis commence à inonder l'écran avec des erreurs comme[mpeg @ 02f69ba0] buffer underflow i=0 bufi=235538 size=239761
et[mpeg @ 02f69ba0] packet too large, ignoring buffer limits to mux it
.-b:v
. Je l'ai ajouté à ma réponse. Concernant les paramètres de l'encodeur: vous ne pouvez pas faire de chaque image une image B. De plus, vous avez besoin d'une estimation de mouvement - plus la méthode est exhaustive, meilleure est la compression. Mais s'il s'agit d'une vidéo dynamique, la première chose que vous voudrez est d'augmenter considérablement le débit binaire. Les paramètres d'encodage n'ont vraiment pas beaucoup d'impact. Quant à votre erreur, êtes-vous sûr que c'est l'erreur de la commande correcte? Une[mpeg]
erreur ne peut se produire que si votre fichier de sortie l'est.mpg
, pas quand il l'est.mp4
.ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v mpeg2video -qscale:v 2 -c:a libmp3lame "out.mpg"
bien sûr.-target pal-dvd
résout le problème,-bufsize
ne fonctionne pas (j'ai essayé-b:v 7M -bufsize 7M -maxrate 7M
).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 que vous voudrez peut-être simplement utiliser ffmpeg, je ne connais pas suffisamment Audacity pour donner une sorte de commentaire. Je l'ai déjà utilisé auparavant.
Cela ne fonctionnera pas pour vous, car vous utilisez un conteneur mpg, vous pouvez donc essayer. (Conteneur mp3)
Cela a semblé fonctionner pour moi.
la source