J'essaie de convertir une série d'images PNG24 contenant une animation d'écran en une vidéo sans perte, afin que chaque pixel soit reproduit exactement comme il était dans l'original. Mais avconv (et ffmpeg) produisent tous les deux les mêmes résultats insatisfaisants, qui semblent résulter d’une erreur de conversion du colospace.
Ceci est la version de avconv que j'utilise:
avconv version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers
built on Apr 2 2013 17:02:36 with gcc 4.6.3
Chacune des images a une taille de 1280 × 800 pixels. Ils ne contiennent aucun motif photographique, mais des motifs spécialement tramés.
J'ai utilisé le qtrle
codec car apparemment, il s’agit d’un codec sans perte qui fonctionne comme un GIF animé ou un fichier PNG animé. Cependant, lors de la conversion en vidéo, il semble qu'une conversion de l'espace colorimétrique ("filtre") perturbe les pixels.
Voici la sortie avconv:
$ avconv -f image2 -r 30 -i frames.png/wth-%08d.png -vcodec qtrle -pix_fmt rgb24 -t 15 qtrle-30fps-rgb.mov
avconv version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers
built on Apr 2 2013 17:02:36 with gcc 4.6.3
Input #0, image2, from 'frames.png/wth-%08d.png':
Duration: 00:11:17.96, start: 0.000000, bitrate: N/A
Stream #0.0: Video: png, bgra, 1280x800, 30 fps, 30 tbr, 30 tbn, 30 tbc
File 'qtrle-30fps-rgb.mov' already exists. Overwrite ? [y/N] y
[buffer @ 0x740a00] w:1280 h:800 pixfmt:bgra
[avsink @ 0x742ac0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out'
[scale @ 0x743680] w:1280 h:800 fmt:bgra -> w:1280 h:800 fmt:rgb24 flags:0x4
Output #0, mov, to 'qtrle-30fps-rgb.mov':
Metadata:
encoder : Lavf53.21.1
Stream #0.0: Video: qtrle, rgb24, 1280x800, q=2-31, 200 kb/s, 30 tbn, 30 tbc
Stream mapping:
Stream #0:0 -> #0:0 (png -> qtrle)
Press ctrl-c to stop encoding
frame= 450 fps= 22 q=0.0 Lsize= 126056kB time=15.00 bitrate=68843.4kbits/s
video:126052kB audio:0kB global headers:0kB muxing overhead 0.003441%
Ceci est un fichier image PNG original:
Voici une capture d'écran de la vidéo en train d'être rejouée:
Veuillez noter que vous devez voir ces images dans leur résolution d'origine 1280 × 800 pour constater les différences.
Voici une comparaison côte à côte , l'image de gauche étant l'original et celle de droite le résultat après le codage vidéo
Existe-t-il un moyen de produire un fichier vidéo parfaitement sans perte et parfaitement parfait à partir d'une série de fichiers PNG?
-flatten +matte
option dans ImageMagick pour obtenir de vrais fichiers png RGB24. Le résultat était que aucun filtre n'était 'auto inséré' , mais le résultat était toujours faux. Maintenant, je me demande comment changer le 'codeur' encoder : Lavf53.21.1
?
avconv
(ou ffmpeg
si vous utilisez FFmpeg). Vous ne pouvez le changer qu'en utilisant une version plus récente. À ma connaissance, Libav ne propose pas de versions de avconv
, alors vous devez vous construire. Ou téléchargez une version statique de ffmpeg
de leur page de téléchargement . Veuillez noter la différence entre Libav et FFmpeg: Qui peut me dire la différence et la relation entre ffmpeg, libav et avconv
bgra
, alors que pour moi (enffmpeg
) il montre commergba
. Quoi qu’il en soit, pouvez-vous essayer de régler la sortie sur-pix_fmt argb
au lieu?