如何在ffmpeg中仅对视频轨道进行md5 更多信息

问题描述

我有一个.mov文件,其中包含视频和一些音轨。要对整个文件进行md5处理,

[pdev@d ~]$ md5sum 1_TRAILER_HD_2CH_ES419_ENSUB_16X9_178_2398_DIGITAL_FINAL.mov
042f0e177fe25f562079cc07208ec446

尽管当我尝试在ffmpeg中执行相同的操作时,却得到了不同的值:

$ ffmpeg -i 1_TRAILER_HD_2CH_ES419_ENSUB_16X9_178_2398_DIGITAL_FINAL.mov -f md5 -
MD5=74bd904f1edb4eb1368040e2792d7497   0kB time=00:01:59.11 bitrate=   0.0kbits/s speed=2.36x
frame= 2867 fps= 56 q=-0.0 Lsize=       0kB time=00:01:59.57 bitrate=   0.0kbits/s speed=2.35x
video:23222700kB audio:22421kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unkNown

为什么值不同?此外,如何仅 校验视频轨道?我有多个具有不同音轨的文件,并想查看这些文件上是否有相同的视频轨。


更新:我相信此答案显示了如何计算纯音频校验和,但是不确定纯视频:https://superuser.com/a/1044419/118248

解决方法

md5sum与ffmpeg

  • md5sum包含完整的文件。
  • ffmpeg仅计算视频和/或音频流的MD5。如果您不希望元数据或其他非媒体流数据影响MD5,则很有用。它还将允许您获取特定流的校验和(仅视频或音频,或同时获取两者,或为每个流分配单独的哈希)。您还可以选择许多算法(MD5,SHA256,CRC32,adler32等)。

要仅对视频轨进行校验和

添加-map option仅选择视频流。使用-map会禁用默认的stream selection行为,并允许您手动选择所需的流。

示例:已解码

视频和/或音频将被完全解码。这可能很慢。

ffmpeg -i input.mp4 -map 0:v -f md5 -

示例:流已复制

这仅使用stream copy模式获取MD5。没有解码。

ffmpeg -i input.mp4 -map 0:v -c copy -f md5 -

示例:分别显示视频和音频校验和

使用streamhash混合器:

ffmpeg -i input.mp4 -map 0 -c copy -f streamhash -hash md5 -
...
0,v,MD5=50224fec84bc6dfde90d742bcf1d2e01
1,a,MD5=1d2a32ed72798d66e0110bd02df2be65

示例:每帧

使用framehash混合器:

ffmpeg -i input.mp4 -map 0 -f framehash -

更多信息

  • 有关更多信息,请参见MD5hash多路复用器文档。
  • 如果要减少冗长程度,仅输出哈希/校验和/ MD5(以及所有错误),请添加-v error
  • 要使用其他算法,可以将hash多路复用器(-f hash)与-hash选项一起使用,例如-f hash -hash SHA512。默认值为SHA265。