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

pol*_*rka 19 video compare ffmpeg difference

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

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

llo*_*gan 35

解码数据与MD5哈希的比较

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

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

    $ ffmpeg -loglevel error -i original.vid -map 0:v -f md5 -
      MD5=5ee3ae1ee5feaf30618938290225f682
    
    Run Code Online (Sandbox Code Playgroud)
  2. 转换为无损输出:

    $ ffmpeg -i original.vid -c:v libx264 -qp 0 lossless.mkv
    
    Run Code Online (Sandbox Code Playgroud)
  3. 比较无损视频的MD5哈希值:

    $ ffmpeg -loglevel error -i lossless.mkv -map 0:v -f md5 -
      MD5=5ee3ae1ee5feaf30618938290225f682
    
    Run Code Online (Sandbox Code Playgroud)

笔记:

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

  • 您可以看到,如果输出为有损格式,MD5哈希值可能会更改.

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

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


视觉比较

使用混合滤镜

查看有损输出的差异 查看有损输出的差异.

您可以使用混合滤镜直观地比较差异.

运用 ffplay

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

  • 除此以外的模式difference可能符合您的需求.请参阅文档.

运用 ffmpeg

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

使用叠加过滤器

请参阅使用ffmpeg的叠加过滤器显示视频差异.