如何比较/显示ffmpeg中2个视频的区别?

时间:2014-09-10 20:59:41

标签: video ffmpeg compare difference

我是编码的新手。我已经在无损模式下读取并尝试了x264(-qp 0),但是我想确保在我的新视频中,每个像素都包含与源文件相同的信息(在YUV 420中,所以据我所知,色彩转换的损失是可以避免的。我希望能够检查一下,因为如果有人说它无损,我就不相信。

我欢迎有关无损编码的其他编解码器的答案,我对编解码器的唯一要求是具有最佳压缩率之一,让我选择不同的计算时间(例如从安慰剂到非常快的x264范围)以便调整根据我的需要压缩级别和计算时间。但请记住,最初的问题是如何逐帧计算两个视频的差异并将其导出到第三个文件,所以我可以自己观看。我认为这些知识(如果可能并且没有严重的限制)将来对我有用。

1 个答案:

答案 0 :(得分:32)

解码数据与MD5哈希

的比较

您可以使用FFmpeg MD5 muxer来显示解码结果完全相同:

  1. 从原始输入中获​​取视频流的MD5哈希值:

    $ ffmpeg -loglevel error -i original.vid -map 0:v -f md5 -
      MD5=5ee3ae1ee5feaf30618938290225f682
    
  2. 转换为无损输出:

    $ ffmpeg -i original.vid -c:v libx264 -qp 0 lossless.mkv
    
  3. 比较无损视频的MD5哈希值:

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

    • 即使使用无损编码器,您也可能无法获得相同的哈希值。可能会发生各种属性的更改,这些更改可能会改变MD5哈希值,例如色彩空间或色度子采样。

    • 如果输出为有损格式,您可以看到MD5哈希值可能会发生变化。

    • FFmpeg支持的其他无损压缩视频编码器包括:ffv1,ffvhuff,huffyuv和utvideo。

    • 请参阅framemd5 muxer以查看每个帧的哈希值。


    视觉比较

    使用混合滤镜

    Viewing the difference of a lossy output 查看有损输出的差异。

    您可以使用blend filter直观地比较差异。

    使用ffplay

    ffplay -f lavfi \
    "movie=original.mkv[org]; \
     movie=encoded.mkv[enc]; \
     [org][enc]blend=all_mode=difference"
    
    • 混合很慢,根据您的CPU和输入,此命令可能无法实时播放。或者,您可以输出ffmpeg的视频,然后按如下所示进行观看。

    • difference以外的模式可能符合您的需求。请参阅documentation

    使用ffmpeg

    ffmpeg -i original.mkv -i encoded.mkv \
    -filter_complex "blend=all_mode=difference" \
    -c:v libx264 -crf 18 -c:a copy output.mkv
    
    • 您可能需要将,format=yuv420p添加到过滤链的末尾(紧跟difference之后),以便在非基于FFmpeg的播放器中查看输出。

    使用叠加过滤器

    请参阅Display video difference with ffmpeg’s overlay filter