미디어 메타 데이터에 대한 명령 및 지원 찾기


3

깊은 수준의 하위 폴더가있는 모든 유형의 비정형 파일이있는 폴더가 있으며 320kpbs (비트 레이트)가있는 모든 오디오 파일을 찾고 동일한 위치로 이동하지 않고 각 파일에 대해 실행하고 싶습니다. . 다음과 같은 것 :

find /some/folder -type f -regextype posix-extended -regex '.*\.(flac|ape|wa?v|m(p3|4a))' -BITRATE_IS_320kbps -exec ... \;

그러나 나는 이런 종류의 작업을 수행 할 수있는 명령 줄을 모른다.

나는 이것을 달성하기 위해 덜 우아한 방법을 이미 생각했지만 여전히 find메타 데이터로 파일을 어떻게하는지 알고 싶습니다.


1
비트 레이트를 테스트하는 명령이있는 -exec경우 파일의 종료 코드가 실제로 마하인지 여부를 결정하는 데 사용되므로 종료 코드를 사용할 수 있습니다 (종료 코드 0은 일치, 다른 것은 일치하지 않음)
Eric Renouf

게시물에는 오디오 파일에서 비트 전송률을 추출하는 몇 가지 옵션이 있습니다. 일단 그것을 얻으면 출력과 일부 쉘 스크립트를 사용하여 320과 비교하고 파일로 무언가를 할 수 있습니다.
blm

탐색기에서 *를 검색하고 디스플레이에 '비트율'열을 추가 한 후 정렬 할 수 있습니다. 이를 통해 해당 파일을 정확하게 선택할 수 있습니다.
Aganju

에릭의 의견에 대해, 예는 좋을 것입니다 ... 그리고 blm의 제안은 기본적으로 이것을 해결하기위한 그다지 우아하지 않은 방법으로 구성된 것입니다.
Pedro Vernetti

find유틸리티 와 함께 있어야합니까 ? 구문에 익숙하지 않은 것이 유용합니다. 나는 아직도 꽤 새롭고 bash이것은 좋은 운동처럼 보였으므로 나중에 무언가를 모으기 시작했습니다.
tjt263

답변:


2

@blm의 링크 된 답변 정보를 사용하면 다음과 같이 할 수 있습니다.

find /some/folder -type f -regextype posix-extended -regex '.*\.(flac|ape|wa?v|m(p3|4a))' -exec bash -c " file '{}' | grep '320 kbps'" \; -exec <do what you want>

첫 번째 명령 -exec은 320 kbps 인 파일 만 찾습니다. file명령에서 우리에게보고하기 때문입니다. grep일치 하는 것이 없으면 -exec거짓이되고 두 번째 -exec는 실행되지 않습니다. 그래도 grep일치하면 두 번째 -exec가 실행됩니다.

완전성을 위해이 기능은 매뉴얼 페이지-exec 에서 찾을 수 있습니다 .

-exec command ;  
     Execute command; true if 0 status is returned

편집하다:

file이 솔루션에서 의 사용과 관련하여 모든 사람에게 적용되는 것은 아닙니다. 따라서 다음을 사용하여 비트 전송률을 얻는 다른 방법이 있습니다 mediainfo.

#!/bin/bash

bitrate=$(mediainfo "$1" | grep -Ei 'overall bit ?rate.*[[:digit:]]+.*$' | grep -Eo [[:digit:]]+)
echo $bitrate

실행 권한으로 .sh 파일에 저장 한 다음 mediainfo대체 할 수있는 방식으로 전체 비트 전송률 정보 에 따라 파일의 비트 전송률 (숫자 만)을 제공합니다

-exec bash -c " file '{}' | grep '320 kbps'" \;

-exec bash -c "BITRATE_SCRIPT_PATH '{}' | grep '320'" \;

(1Mbps 이상의 비트 전송률을 갖는 무손실 오디오 파일에서는 제대로 작동하지 않을 수 있음)


나 자신이를 정리해 드리죠 ... find평가 -exec을주는 다른 테스트 옵션으로 영이 아닌 값을 반환 에드 명령을 false?
Pedro Vernetti

@PedroVernetti 오른쪽
Eric Renouf

알아두면 좋은 점 ... find맨 페이지를 몇 번 읽었 지만이 정보를 한 번도 본 적이 없습니다. 감사합니다
Pedro Vernetti

@JayC의 답변에서 지적했듯이 file원하는 정보를 제공하지 마십시오. 실제로 그것은 거의 정보를 제공하지 않습니다. 따라서 귀하의 답변에 비트 전송률 검사 스크립트를 추가하겠습니다.
Pedro Vernetti

@PedroVernetti mediainfo필요한 정보를 얻는 데 사용할 수 있습니다 .
slhck December

2

filecmd 에서 비트 전송률 정보를 얻는 방법을 모르지만 확실 하지 않습니다.

$: file 01\ -\ Trolleyed.flac
01 - Trolleyed.flac: FLAC audio bitstream data, 24 bit, stereo, 17842272 samples

$: file 01\ -\ Autumn\ Leaves.mp3
01 - Autumn Leaves.mp3: Audio file with ID3 version 2.4.0

어쨌든이 게시물 에서 영감을 얻은 외부 도구 (이 경우 mediainfo ) 가 필요한 솔루션을 생각해 냈습니다 . 섹시하거나 성능이 좋지는 않지만 좋아합니다.

find . -type f -regextype posix-extended -regex '.*\.(flac|ape|wa?v|m(p3|4a))' -exec sh -c 'for x; do export BITRATE=$(mediainfo --inform="Audio;%BitRate%" "$x"); if [ $BITRATE = 320000 ]; then echo "$x"; fi; done' _ {} +

여기에서 then명령문은 단순히 파일 이름을 표시하지만 실제로 다른 것으로 대체 될 수 있습니다.

모두에게 메리 크리스마스 ..


이것이 일반적인 문제 일 수 있음을 알려 주셔서 감사합니다. 나는 이것에 대한 내 자신의 해결 방법도 생각해야했다. 이는 내가 받아 들인 대답에 대한 편집을 통해 공유했다.
Pedro Vernetti
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.