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


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.