如何在 ffmpeg 中 md5 视频轨道(仅)

Dav*_*542 2 linux video checksum md5 ffmpeg

我有一个.mov包含视频和几个音轨的文件。要 md5 整个文件,我可以执行以下操作:

[pdev@d ~]$ md5sum 1_TRAILER_HD_2CH_ES419_ENSUB_16X9_178_2398_DIGITAL_FINAL.mov
042f0e177fe25f562079cc07208ec446
Run Code Online (Sandbox Code Playgroud)

虽然当我尝试在 中做同样的事情时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
Run Code Online (Sandbox Code Playgroud)

为什么值不同?此外,如何仅对视频轨道进行校验和?我有各种具有不同音轨的文件,想看看这些文件上是否有相同的视频轨道。


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

llo*_*gan 7

md5sum 与 ffmpeg

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

仅对视频轨道进行校验和

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

示例:解码

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

ffmpeg -i input.mp4 -map 0:v -f md5 -
Run Code Online (Sandbox Code Playgroud)

示例:流复制

这只是使用流复制模式获取 MD5 。没有解码。

ffmpeg -i input.mp4 -map 0:v -c copy -f md5 -
Run Code Online (Sandbox Code Playgroud)

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

使用streamhash 混合器

ffmpeg -i input.mp4 -map 0 -c copy -f streamhash -hash md5 -
...
0,v,MD5=50224fec84bc6dfde90d742bcf1d2e01
1,a,MD5=1d2a32ed72798d66e0110bd02df2be65
Run Code Online (Sandbox Code Playgroud)

示例:每帧

使用framehash 混合器

ffmpeg -i input.mp4 -map 0 -f framehash -
Run Code Online (Sandbox Code Playgroud)

更多信息

  • 有关更多信息,请参阅MD5哈希复用器文档。
  • 添加-v error如果你想减少冗长且仅输出散列/校验/ MD5(和任何错误)。
  • 要使用其他算法,您可以使用带有选项的哈希复用器 ( -f hash) -hash,例如-f hash -hash SHA512. 默认值为 SHA265。

  • @David542 是的,`0:a` 将包括所有音频流。`0:a:2` 将包含第三个音频流(ffmpeg 从 0 开始计数)。或者使用streamhash。参见示例#3。 (2认同)