两个包含同一首歌曲的文件(均为 M4A 格式)在计算它们的哈希值时输出两个不同的结果:
md5sum
f149e2d2a232a410fcf61627578c101a new.m4a
ad26ed675342f0f45dcb5f9de9d586df old.m4a
它们包含相同数量的字节:
ls -l
-rw-rw-r-- 1 cdc cdc 2978666 Jun 26 19:49 new.m4a
-rwxrwxr-x 1 cdc cdc 2978666 Jun 26 19:49 old.m4a
这exiftool
仅在创建日期方面有所不同(帕斯特宾为了new.m4a
和帕斯特宾为了old.m4a
)。
我使用 Audacity 的工具来比较两个文件(通过反转和混合它们,这使它们消除了彼此的相似性),结果是沉默,因为没有留下任何东西,这意味着两个文件之间没有区别。
命令cmp
给我:
cmp -l
54 375 23
55 51 305
56 41 112
58 375 23
59 51 305
60 45 116
170 375 23
171 51 305
172 41 112
174 375 23
175 51 305
176 41 112
270 375 23
271 51 305
272 41 112
274 375 23
275 51 305
276 41 112
cmp -b
new.m4a old.m4a differ: byte 54, line 1 is 375 M-} 23 ^S
唯一的真实的不同之处在于该old.m4a
文件是在 2020 年 12 月下载的,并且new.m4a
是在几个小时前下载的。
需要的话可以下载new.m4a
这里和old.m4a
这里。最初,两者都是从艺术家的 Bandcamp 页面下载的。
PS 我的人耳说这两者是相同的。
答案1
打印的元数据exiftool
是文件数据的一部分。 IE:
$ diff <(exiftool old.m4a) <(exiftool new.m4a)
2c2
< File Name : old.m4a
---
> File Name : new.m4a
18,19c18,19
< Create Date : 2020:12:31 18:13:30
< Modify Date : 2020:12:31 18:13:34
---
> Create Date : 2021:06:26 18:57:37
> Modify Date : 2021:06:26 18:57:41
32,33c32,33
< Track Create Date : 2020:12:31 18:13:30
< Track Modify Date : 2020:12:31 18:13:30
---
> Track Create Date : 2021:06:26 18:57:37
> Track Modify Date : 2021:06:26 18:57:37
40,41c40,41
< Media Create Date : 2020:12:31 18:13:30
< Media Modify Date : 2020:12:31 18:13:30
---
> Media Create Date : 2021:06:26 18:57:37
> Media Modify Date : 2021:06:26 18:57:37
(这是在使两个文件具有相同的文件日期之后 - 就像存储在磁盘上的日期一样 - 而不是存储的肉数据在文件)
md5 sum 创建时全部数据被使用。由于字节不同,校验和也不同。
也就是说;这音频数据是一样的。
除此之外,cmp
您还可以执行十六进制转储来查看原始差异。
例如(跳过前 50 个字节,最多 300 个类型 hex ):
$ diff <(od -j 50 -N 300 -t x1 old.m4a) <(od -j 50 -N 300 -t x1 new.m4a)
1c1
< 0000062 00 00 dc 13 c5 4a dc 13 c5 4e 00 00 ac 44 00 71
---
> 0000062 00 00 dc fd 29 21 dc fd 29 25 00 00 ac 44 00 71
8c8
< 0000242 68 64 00 00 00 07 dc 13 c5 4a dc 13 c5 4a 00 00
---
> 0000242 68 64 00 00 00 07 dc fd 29 21 dc fd 29 21 00 00
14,15c14,15
< 0000402 00 20 6d 64 68 64 00 00 00 00 dc 13 c5 4a dc 13
< 0000422 c5 4a 00 00 ac 44 00 71 bc 00 55 c4 00 00 00 00
---
> 0000402 00 20 6d 64 68 64 00 00 00 00 dc fd 29 21 dc fd
> 0000422 29 21 00 00 ac 44 00 71 bc 00 55 c4 00 00 00 00
例如:
OLD: 00 00 dc 13 c5 4a dc 13 c5 4e 00 00 ac 44 00 71
|___________||___________|
---
NEW: 00 00 dc fd 29 21 dc fd 29 25 00 00 ac 44 00 71
|___________||___________|
然后通过转换为日期:
m4a 使用 Apple Mac OS X HFS+ 时间戳(自格林尼治标准时间 1904 年 1 月 1 日午夜以来的秒数)。
old:
dc 13 c5 4a => 3692283210 => Thursday, December 31, 2020 18:13:30
dc 13 c5 4e => 3692283214 => Thursday, December 31, 2020 18:13:34
new:
dc fd 29 21 => 3707578657 => Saturday, June 26, 2021 18:57:37
dc fd 29 25 => 3707578661 => Saturday, June 26, 2021 18:57:41