web-dev-qa-db-fra.com

Comment comparer / montrer la différence entre 2 vidéos dans ffmpeg?

Je suis un débutant en encodage. J'ai lu et essayé x264 en mode sans perte (-qp 0), mais je voudrais m'assurer que dans ma nouvelle vidéo, chaque pixel contient les mêmes informations que le fichier source (qui est en YUV 420 donc la perte de la conversion des couleurs est évitable, pour autant que je sache). Je veux pouvoir vérifier cela, parce que je n'y crois pas si quelqu'un dit simplement que c'est sans perte.

Je me réjouis des réponses suggérant d'autres codecs pour l'encodage sans perte, mes seules exigences pour les codecs sont d'avoir l'un des meilleurs taux de compression et me permettent de choisir différents temps de calcul (tels que la plage du placebo à très rapide en x264) afin d'ajuster le niveau de compression et calculez le temps à mes besoins. Mais gardez à l'esprit que la question initiale est de savoir comment puis-je calculer les différences image par image de deux vidéos et l'exporter dans un troisième fichier, afin que je puisse le regarder moi-même. Je pense que la connaissance (si elle est possible et n'a pas de limites sérieuses) me sera également utile à l'avenir.

20
polarka

Comparaison des données décodées avec le hachage MD5

Vous pouvez utiliser le FFmpeg MD5 muxer pour montrer que le décodage donne exactement la même sortie:

  1. Obtenez le hachage MD5 du flux vidéo à partir de votre entrée d'origine:

    $ ffmpeg -loglevel error -i original.vid -map 0:v -f md5 -
      MD5=5ee3ae1ee5feaf30618938290225f682
    
  2. Convertissez en sortie sans perte:

    $ ffmpeg -i original.vid -c:v libx264 -qp 0 lossless.mkv
    
  3. Comparez le hachage MD5 de la vidéo sans perte:

    $ ffmpeg -loglevel error -i lossless.mkv -map 0:v -f md5 -
      MD5=5ee3ae1ee5feaf30618938290225f682
    

Remarques:

  • Il se peut que vous n'obteniez pas le même hachage même avec un encodeur sans perte. Des modifications de divers attributs peuvent se produire qui peuvent altérer le hachage MD5 comme l'espace colorimétrique ou le sous-échantillonnage de chrominance .

  • Vous pouvez voir que le hachage MD5 peut changer si vous effectuez une sortie vers un format avec perte.

  • Les autres encodeurs vidéo compressés sans perte pris en charge par FFmpeg incluent: ffv1, ffvhuff, huffyuv et utvideo.

  • Voir framemd5 muxer pour afficher le hachage pour chaque image.


Comparaison visuelle

Avec le filtre de mélange

Viewing the difference of a lossy outputAffichage de la différence d'une sortie avec perte.

Vous pouvez utiliser le filtre de fusion pour comparer visuellement la différence.

Utilisation de ffplay

ffplay -f lavfi \
"movie=original.mkv[org]; \
 movie=encoded.mkv[enc]; \
 [org][enc]blend=all_mode=difference"
  • le mélange est lent et cette commande peut ne pas être lue en temps réel selon votre CPU et les entrées. Vous pouvez également produire une vidéo avec ffmpeg, puis la regarder comme indiqué ci-dessous.

  • Il existe des modes autres que difference qui peuvent répondre à vos besoins. Voir documentation .

Utilisation de ffmpeg

ffmpeg -i original.mkv -i encoded.mkv \
-filter_complex "blend=all_mode=difference" \
-c:v libx264 -crf 18 -c:a copy output.mkv
  • Vous devrez peut-être ajouter ,format=yuv420p à la fin de votre chaîne de filtres (immédiatement après difference) pour afficher la sortie dans les lecteurs non basés sur FFmpeg.

Avec le filtre de superposition

Voir Afficher la différence vidéo avec le filtre de superposition de ffmpeg .

34
llogan