2010-03-07 74 views
6

如何創建只有媒體數據沒有元數據的校驗和才能獲得媒體文件的穩定標識。最好是一個支持多種格式的庫的跨平臺方法。例如vlc,ffmpeg或mplayer。如何創建媒體文件的穩定校驗和?

(媒體文件應在常見格式的音頻和視頻,圖像將是不錯的有太多)

+2

我想你正在尋找一些指紋算法......這將是有趣的,因爲它也可以用來識別類似的媒體。期待答案,碰撞。 +1 – hurikhan77 2010-03-07 09:51:43

+0

指紋也很有趣,例如,音頻libofa [1](儘管補丁我無法在osx上編譯),但我想要更通用的東西來識別重複的文件,而不是重複的歌曲/電影。 [1] http://code.google.com/p/musicip-libofa/ – yawniek 2010-03-07 09:55:17

+0

「沒有標籤」是否指「沒有元數據」?如果是這樣,說「媒體數據」可能會混淆事物。 – cregox 2010-04-08 19:48:42

回答

3

我不瞭解任何現有平臺無關的軟件都可以實現這一點,但我確實知道這種方式可以通過像Java這樣的解釋性(與平臺無關)語言來完成。基本上,我們只需要從文件中去除任何元數據(標籤),事先將視頻文件解複用。理論上,在解複用和刪除元數據之後,可以對文件進行散列處理,並與經過相同處理的其他文件進行比較,以匹配相同的文件,儘管標記不同。與指紋不同,這不會識別類似的歌曲/電影,而是識別相同的文件(想象一下,您可能想要歸檔的某首歌曲的10種不同版本或比特率,但不希望其中任何一個相同的副本在四周浮動) 。

其中最麻煩的部分是刪除標籤,因爲標籤格式有很多不同的規格,這些規格不一定在不同的應用程序中實現相同,也就是說,通過兩個不同的應用程序分別給出相同標籤的同一確切音頻文件可能不會導致在相同的輸出文件中。唯一的方法可能會對純音頻校驗和的概念構成一個致命的問題,那就是流行標記軟件是否對文件的二進制音頻部分進行了任何更改,或者是否以非標準方式填充了音頻。

取得一個校驗和是微不足道的,但我不知道我的任何平臺獨立庫的頭頂,以demux和detag mpeg文件。我知道在'nix環境中,mpgtx是一個偉大的命令行工具,可以執行demux和detag,但顯然這不是獨立於平臺的解決方案。

也許有人覺得有雄心壯志?

+0

這是要走的路。 在此期間,我爲ffmpeg寫了ha patch來計算sha1散列而不是adler32校驗和。這基本上是訣竅。 如果有人願意幫我把這個改成ffmpeg那會很棒。 – yawniek 2010-04-30 12:06:24

0

一個可能的解決方案,我發現似乎與VLC:

./VLC -I rc snd.mp3 :sout='#std{mux=raw,access=file,dst=-}' vlc://quit | sha1sum 
+0

似乎不適用於電影,似乎不是平臺獨立的 – yawniek 2010-03-07 11:11:01