태그 보관물: beyondcompare

beyondcompare

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

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

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

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

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



답변

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

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


답변

쉘에서 수행하는 방법은 다음과 같습니다. 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


답변

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


답변

가능한 해결책으로 도구를 사용하여 메타 데이터 정보없이 파일을 압축되지 않은 스트림 ( 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정규 표현식 패턴을 계산하는 간단한 스크립트입니다.


답변

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

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

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

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

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


답변