我正在尝试使用命令行工具来匹配 Plex.app 为电影文件计算的哈希值(显然,它是电影第一个块(4k)而不是整个电影的 SHA1 哈希)。
我尝试使用以下命令使用命令行工具获取哈希,但不出所料,这两个哈希不匹配。
file="/path/to/mp4"
dd bs=4k count=1 if="$file" | openssl sha1
1+0 records in
1+0 records out
4096 bytes transferred in 0.000012 secs (341333333 bytes/sec)
7785d5d6d611a27ac03dfdff8a2c89e9ffeffa3b
file="/path/to/mp4"
head -c 4096< "$file" | openssl sha1
7785d5d6d611a27ac03dfdff8a2c89e9ffeffa3b
使用ffprobe
我意识到该 mp4 文件开头的大部分数据是编码设置而不是视频流。让我觉得无论 Plex 使用什么进程,它都可能避免文件的编码设置,因为它们可能完全相同。
请记住,这些值与尝试复制其哈希计算的适当工具不匹配的原因可能有很多。
您可以使用 ffmpeg 直接执行此操作。
ffmpeg -hide_banner -v 0 -f data -start 0 -end 4096 -i subfile:input.mp4 -map 0 -f hash -hash sha160 -
这会将输入从字节读取
0
到偏移前的字节4096
并计算 SHA-1 (160b) 哈希。结果打印为
请注意,MP4 并不总是在前面有标题。此外,标头包含的内容远不止视频编码设置。
为此,您需要了解 Plex 应用程序究竟是如何计算此哈希的。你可以在 Github 上找到 Plex 源代码。
为了更好地满足您的实际需求,您最终要实现的目标是什么?也许有一些更简单的方法可以到达那里。