mp3, 파일의 flac 오디오 데이터를 비교하고 헤더 데이터 (ID3 태그)를 무시하는 방법은 무엇입니까?


16

일부 오디오 파일을 2 곳에서 백업하고 ID3 태그를 하나의 백업에 추가했지만 다른 백업은 추가하지 않았습니다. 시간이 지남에 따라 백업이 실제로 동일한 지 여부에 따라 메모리가 흐려졌지만 이제는 ID3 데이터가 있고 그렇지 않으면 기본 이진 비교가 실패하고 검사가 번거로울 것입니다.

mp3, flac 파일 및 ID3과 같은 헤더 데이터를 사용하는 기타 파일의 오디오 데이터 (헤더, ID3 아님) 만 비교할 수있는 도구가 있습니까?

http://www.scootersoftware.com/vbulletin/showthread.php?t=7413 비교할 수없는 스레드를 시작했습니다 .

이 작업을 수행하는 다른 비교 소프트웨어를 고려할 것

답변:


8

아, 영원한 곤경. 나는 나 자신이 너무 오랫동안이 질문에 어려움을 겪고 결국 많은 파일 찾기 응용 프로그램을 시도하여 결국 포기하고 직접 작성하기로 결정했습니다. 그런 다음 AllDup을 찾았습니다 .

AllDup은 ID3 태그와 Exif 데이터를 각각 무시하고 MP3와 JPEG 파일을 비교할 수 있는 빠른 DFF 이기 때문에 내 프로젝트를 무한정 백 버너로 만들었습니다 . 더 나은 점은 Michael Thummerer는 피드백에 매우 신속하게 반응하며 버그를 수정하고 제안 사항을 신속하게 구현할 수 있습니다 (FLAC 헤더 무시를 제안 할 수 있음). 모든 것을 끝내기 위해 AllDup은 무료입니다.


6

쉘에서 수행하는 방법은 다음과 같습니다. avconv데비안 / 우분투에있는가 필요합니다 libav-tools.

$ avconv -i INPUT_FILE -c:a copy -f crc - 2>/dev/null | grep CRC

다음과 같은 줄이 나타납니다.

CRC=0xabfdfe10

오디오 데이터의 모든 프레임을 비교하여 CRC를 생성합니다. 따라서 이와 같은 명령은 여러 파일을 비교할 수 있습니다.

ls *.mp3 | while read line; do echo -n "$line: "; avconv -i "$line" -f crc - 2>/dev/null | grep CRC; done

매우 빠르지는 않지만 mp3 파일에 고유 한 체크섬을 사용하여 중복을 확인하십시오. 고맙습니다.
fred727

당신이 PHP를 사용하는 경우 더 빠른 대안은 getid3 라이브러리입니다 : getid3.org/phpBB3/viewtopic.php?f=3&t=1936
fred727

3
@ fred727 avconv맨 페이지를 확인하고 crc옵션이 오디오를 디코딩하고 디코딩 된 오디오의 CRC를 계산 한다는 것을 깨달았습니다 . 그러나 오디오 코덱을로 설정하면이를 피할 수 있습니다 copy. 이제 내 시스템에서 명령이 1.13 초 대신 0.13 초 안에 실행됩니다. 답변을 업데이트 했으므로 이제 PHP 사용을 피할 수 있습니다. :)
blujay

2

foobar2000을이진 비교기 플러그인은이 작업을 수행 할 것입니다.


1
+1 Foobar2000은 환상적입니다. 왜? 적절한 Windows 고유 UI를 사용하기 때문에 VNC와 같이 멋지고 가벼우면서도 미니멀하고 기능이 풍부하며 실제로 노래 길이 와 같이 실제로 원하는 정보와 기능을 제공합니다 . 거의 사용하지 않는 기능을 모호하게합니다. 이진 비교기는 내가 묻는 질문에 훌륭한 기능입니다. 감사.
therobyouknow

당신이 그것을 좋아해서 다행입니다!
afrazier

2

가능한 해결책으로 도구를 사용하여 메타 데이터 정보없이 파일을 압축되지 않은 스트림 ( pcm, wav) 으로 변환 한 다음 비교할 수 있습니다. 변환을 위해 ffmpeg, sox또는 원하는 소프트웨어를 사용할 수 있습니다 avidemux.

예를 들어 ffmpeg로 어떻게합니까?

메타 데이터가 다른 예제 2 파일이 있다고 가정 해 봅시다. $ diff Original.mp3 Possible-dup.mp3 ; echo $? Binary files Original.mp3 and Possible-dup.mp3 differ 무차별 대입 (Brute force) 비교는 서로 다르다고 불평합니다.

그런 다음 본문을 변환하고 비교합니다. $ diff <( ffmpeg -loglevel 8 -i Original.mp3 -map_metadata -1 -f wav - ) <( ffmpeg -loglevel 8 -i Possible-dup.mp3 -map_metadata -1 -f wav - ) ; echo $? 0

코스 외부 ; echo $?는 리턴 코드를보기위한 데모 용입니다.

여러 파일 처리 (다양한 디렉토리)

당신이 컬렉션의 중복을 시도하려는 경우가 체크섬 계산하는 가치가있다 (모든 등이 crc, md5, sha2, sha256) 데이터의 다음 그냥 거기에 충돌을 찾을 수 있습니다.

그 질문의 범위를 벗어 났지만 디렉토리 회계에서 파일의 중복을 찾는 방법에 대한 간단한 제안을 제안합니다.

  1. 먼저 각 파일의 데이터 해시를 계산하고 다음 처리를 위해 파일에 배치하십시오. for file in *.mp3; do printf "%s:%s\n" "$( ffmpeg -loglevel 8 -i "$file" -map_metadata -1 -f wav - | sha256sum | cut -d' ' -f1 )" "$file"; done > mp3data.hashes 파일은 다음과 같습니다. $ cat mp3data.hashes ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02:file1.mp3 54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480:file2.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3 모든 RDBMS는 개수를 집계하고 이러한 데이터를 선택하는 데 매우 유용합니다. 그러나 순수한 명령 행 솔루션을 계속 사용하면 추가 단계와 같은 간단한 단계를 수행 할 수 있습니다.

중복 해시가있는 경우 참조하십시오 (작동 방법을 보여주기위한 추가 단계, 듀피 찾기에는 필요하지 않음). $ count.by.regexp.awk '([0-9a-f]+):' mp3data.hashes [1:54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480]=1 [1:1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f]=2 [1:ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02]=1

  1. 내용으로 복제 된 파일을 나열하기 위해 모두 함께 : $ grep mp3data.hashes -f <( count.by.regexp.awk '([0-9a-f]+):' mp3data.hashes | grep -oP '(?<=\[1:).{64}(?!]=1$)' ) | sort 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3

count.by.regexp.awkawk정규 표현식 패턴을 계산하는 간단한 스크립트입니다.


1
+1 감사합니다 Hubbitus-오픈 소스를 기반으로 한 훌륭한 독립형 솔루션입니다. 알아 둘만 한. 배치에 넣을 때도 유용합니다.
therobyouknow

1

또한 질문에서 언급했듯이 Beyond Compare 포럼 에서이 질문을했으며 Beyond Compare도 솔루션을 제공합니다.

http://www.scootersoftware.com/vbulletin/showthread.php?t=7413

두 가지 방법 모두 고려할 가치가 있습니다.

  • AllDup 솔루션은 파일의 사본이 보존되고 디렉토리 폴더 트리에서 삭제되는 것을 신경 쓰지 않고 실행하려는 동일한 폴더에 태그가 지정된 파일과 태그가 지정되지 않은 파일이 혼합되어있는 경우 가장 좋습니다 중복 확인.

  • 구역 / 폴더 트리를 유지하고 2 개의 개별 폴더 / 디렉토리 구조를 비교하려는 경우 비교를 넘어서는 것이 가장 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.