Utilisation de ffmpeg pour encoder une vidéo de haute qualité [fermé]

92

J'ai un ensemble d'images vidéo enregistrées sous forme d'images dans un répertoire, et j'essaie de les encoder en une vidéo de bonne qualité, mais chaque paramètre et chaque format que j'essaye produit des artefacts très visibles.

La commande de base est la suivante:

ffmpeg -r 25 -i %4d.png myvideo.mpg

et j'ai essayé les drapeaux minrate et maxrate. Tous les formats {mpg, avi, mov, flv} feront l'affaire.

Des suggestions de paramètres? La taille finale du fichier n'est pas un problème.

CakeMaster
la source
7
Sur mon Mac, j'utilise la commande suivante: ffmpeg -r 20 -f image2 -i myImage%04d.png -f mp4 -q:v 0 -vcodec mpeg4 -r 20 myVideo.mp4. J'ai trouvé que pour forcer le framerate, je devais le spécifier à la fois pour les fichiers d'entrée et de sortie. Ce codec semble fonctionner pour moi - vous n'aurez peut-être pas besoin de le spécifier. Je voulais juste inclure ce que j'ai fait parce que j'ai passé beaucoup de temps à y travailler. Le seul inconvénient est que mes images d'entrée sont à contraste élevé (boules bleues et rouges sur fond blanc) et plus tard dans le film, les boules commencent toutes à devenir de la même couleur sombre - un effet de contraste indésirable.
jvriesem
Merci @jvriesem! Cela a très bien fonctionné pour moi.
Dan Loewenherz
Je suggère de poser cette question dans StackOverflow pour les systèmes multimédias
Hamed le
version c ++ stackoverflow.com/a/43464269/6180077 visitez ce lien pour travailler sur l'application d'enregistrement d'écran au format FFMPEG c ++ mp4.
Abdullah Farweez
vérifiez ce lien qui montre l'écriture du fichier vidéo à l'aide des bibliothèques FFMPEG par programme: stackoverflow.com/a/43464269/6180077
Abdullah Farweez

Réponses:

64

Un certain nombre de choses:

  • Vous devez définir le débit vidéo. Je n'ai jamais utilisé minrate et maxrate donc je ne sais pas exactement comment ils fonctionnent, mais en réglant le débit binaire à l'aide du -bcommutateur, je suis capable d'obtenir une vidéo de haute qualité. Vous devez trouver un débit binaire qui offre un bon compromis entre la compression et la qualité vidéo. Vous devrez peut-être expérimenter cela car tout dépend de la taille de l'image, de la fréquence d'images et de la quantité de mouvement dans le contenu de votre vidéo. Gardez à l'esprit que le DVD a tendance à être d'environ 4-5 Mbit / s en moyenne pour 720x480, donc je commence généralement à partir de là et décide si j'ai besoin de plus ou moins, puis j'expérimente. Par exemple, vous pouvez ajouter -b 5000kà la ligne de commande pour obtenir plus ou moins de débit binaire vidéo DVD.

  • Vous devez spécifier un codec vidéo. Si vous ne le faites pas, ffmpeg utilisera par défaut MPEG-1, qui est assez ancien et ne fournit pas près de la quantité de compression MPEG-4 ou H.264. Si votre version ffmpeg est compilée avec la prise en charge de libx264, vous pouvez spécifier -vcodec libx264dans le cadre de la ligne de commande. Sinon, -vcodec mpeg4fera également un meilleur travail que MPEG-1, mais pas aussi bien que x264.

  • Il existe de nombreuses autres options avancées qui vous aideront à obtenir la meilleure qualité aux débits binaires les plus bas. Jetez un œil ici pour quelques exemples.

Jason B
la source
6
Un débit binaire constant est mauvais pour la qualité. L'utilisation d'un facteur de débit constant est supérieure (c'est l'un des modes de fonctionnement x264). Par exemple: ffmpeg -i … -c:a copy -c:v libx264 -crf 18 -preset veryslow …. 18 est le CRF avec une perte de qualité très marginale, mais le débit sera probablement faible. Et vous pouvez essayer des valeurs CRF plus grandes si vous avez besoin d'une taille de fichier plus petite. Et comme vous le voyez, c'est assez simple.
Afficher le nom le
notez que -b doit être avant la vidéo mais après l'entrée -i
mateuszb
45

Vous devez spécifier l'option -vb pour augmenter le débit vidéo, sinon vous obtenez la valeur par défaut qui produit des vidéos plus petites mais avec plus d'artefacts.

Essayez quelque chose comme ceci:

ffmpeg -r 25 -i %4d.png -vb 20M myvideo.mpg

jeff7
la source
1
cela fonctionne bien pour moi, merci;)
thiago.adriano26
15

Assurez-vous que les PNG sont complètement opaques avant de créer la vidéo

par exemple avec imagemagick, donnez-leur un fond noir:

convert 0.png -background black -flatten +matte 0_opaque.png

D'après mes tests, aucun débit ni codec n'est suffisant pour rendre la vidéo bonne si vous alimentez des PNG ffmpeg avec transparence

Oran Fry
la source
Cela a résolu le problème pour moi.
Matěj Kripner
0

À moins que vous ne fassiez un travail de post-traitement, la vidéo ne sera jamais meilleure que les images d'origine. Aussi juste comme un flip-book, si vous avez un grand "saut" entre les images clés, cela aura l'air drôle. Vous avez généralement besoin de suffisamment d '"interpolations" entre les images clés pour donner une animation fluide. HTH

JustBoo
la source
Les images proviennent d'une séquence vidéo à l'origine. Ils ont juste eu un peu de recadrage, de mise à l'échelle et ce qui n'a pas été fait avec imagemagick. Les effets sont définitivement des artefacts de compression. J'ai maintenant vu ce post, qui semble avoir une réponse: stackoverflow.com/questions/3158235/…
CakeMaster
@CakeMaster Je n'ai pas mentionné la compression avec perte parce que vous avez des images ".png" dans votre exemple. Les fichiers .png peuvent être avec perte, mais je trouve qu'ils ne le sont généralement pas. .jpg sont presque toujours avec perte donc les artefacts lors de leur utilisation. Si vous le pouvez, vous pouvez réenregistrer vos fichiers .png avec une compression sans perte.
JustBoo