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?
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?-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
(ouffmpeg
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 deavconv
, alors vous devez vous construire. Ou téléchargez une version statique deffmpeg
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 avconvRéponses:
Avec l'aide d'un contributeur de ffmpeg, il a été découvert que ffmpeg et libav créaient des fichiers Quicktime sans perte sans faille. Le problème semble être que le pilote de la carte graphique affiche les vidéos de manière incorrecte (puisque les lecteurs basés sur GStream et VLC l’affiche de manière erronée, toutefois, VLC exporte des images au format PNG parfait). Si vous voulez vérifier si une vidéo contient vraiment les images pixel par pixel, essayez d'utiliser
Cela générera des sommes de contrôle de données de trame
Pour une comparaison visuelle, reconvertissez la vidéo sans perte en images uniques et comparez-les.
la source
-pix_fmt
pour crc / md5 le même arrangement de données décodées sans perte. par exemple. Le décodeur h.264 RVB de ffmpeg génère un RVB planaire, dans un format appelant ffmpeggbrp
.J'ai posté une réponse longue sur: Comment créer un fichier AVI non compressé à partir d'une série de 1 000 images PNG à l'aide de FFMPEG
vcodec
libx264rgb
avec-preset ultrafast -qp 0
, ouutvideo
.la source