Lame-모든 320kbps mp3를 192kbps mp3로 다시 인코딩하는 방법


9

제목에 따라. 320kbps 형식의 MP3가 많으며 192kbps로 변환해야합니다. 현재 lame --mp3input -b 192는 이름이 같지만 추가 .mp3 확장자를 가진 파일을 만드는 파일을 사용하고 있습니다. 그래서 나는 결국 foo.mp3.mp3.

디렉토리를 입력하고 하위 디렉토리를 320kbps로 스캔하고 192kbps로 변환하고 발견되면 덮어 씁니다. Lame이 가장 적합한 도구입니까?

감사

답변:


12

lame완벽하게이 작업에 적합하지만, 내가 사용하는거야 ffmpeg그리고 ffprobe그들은 단지 MP3 파일보다 더 일반화 될 수 있기 때문에 내가 내 손의 뒷면처럼 그들을 알고 있기 때문에,이 대답을합니다. 가장 먼저:

sudo apt-get install ffmpeg

내가 알고있는 도구는 미디어 파일을 읽은 다음 즉시 입력을 덮어 쓸 수 있습니다. 중간 파일을 사용해야합니다. 단일 파일의 경우 다음을 수행 할 수 있습니다.

ffmpeg -i file.mp3 -c:a libmp3lame -b:a 192k temp.mp3
mv temp.mp3 file.mp3

이를 한 줄로 결합 할 수 있습니다.

ffmpeg -i file.mp3 -c:a libmp3lame -b:a 192k temp.mp3 && mv temp.mp3 file.mp3

&&것을이 의미 mv명령하지 않는 한 실행되지 않습니다 ffmpeg(성공을 의미) 0의 상태로 종료됩니다.

파일의 비트 전송률을 확인하려면 다음을 사용할 수 있습니다 ffprobe.

ffprobe -show_streams -select_streams a:0 -v quiet file.mp3 | grep -F 'bit_rate=320000'

-show_streamsffprobe개별 스트림에 대한 정보를 표시하도록 지시 합니다. 어느 것을 선택 -select_streams해야하는지 알려주고 '첫 번째 오디오 스트림 (비디오 스트림으로 저장된 표지 아트의 경우 MP3 파일에 중요 함)을 의미합니다. 파이프 ( )는 표준 출력을 가져와 공급합니다 . 주어진 패턴과 일치하는 행 (이 경우 문자열을 포함하는 행) 만 인쇄합니다 . 320kkbps MP3에서이를 실행하면 다음과 같은 줄이 나타납니다.a:0|ffprobegrepgrepbit_rate=320000

bit_rate=32000

다른 비트 전송률로 실행하면 출력이 전혀 없습니다. grep이 일치하지 않고 상태 1로 종료됩니다. 이는 ffmpeg 명령으로 해당 명령을 연결할 수 있음을 의미합니다.

ffprobe -show_streams -select_streams a:0 -v quiet file.mp3 | grep -F 'bit_rate=320000' && ffmpeg -i file.mp3 -c:a libmp3lame -b:a 192k temp.mp3 && mv temp.mp3 file.mp3

또는 좀 더 읽기 쉽게 :

ffprobe -show_streams -select_streams a:0 -v quiet file.mp3 | grep -F 'bit_rate=320000' &&
ffmpeg -i file.mp3 -c:a libmp3lame -b:a 192k temp.mp3 &&
mv temp.mp3 file.mp3

320kbps MP3에서만 작동합니다. 몇 가지 테스트 파일로 시도하십시오.

다음 단계는 여러 파일로 작업하는 것입니다. 이를 수행하는 표준 방법에는 for루프와 find명령 의 두 가지가 있습니다. 다음은 디렉토리의 모든 MP3에서 작동합니다.

for f in *.mp3; do 
ffprobe -show_streams -select_streams a:0 "$f" | grep -F 'bit_rate=320000' &&
ffmpeg -y -i "$f" -c:a libmp3lame -b:a 192k /tmp/temp.mp3 && mv /tmp/temp.mp3 "$f"
done

이것은 하위 디렉토리에 들어 가지 않을 것입니다. 그렇게하려면 globstar쉘 옵션 을 설정해야합니다 .

shopt -s globstar
for f in **/*.mp3; do
ffprobe -show_streams -select_streams a:0 "$f" | grep -F 'bit_rate=320000' &&
ffmpeg -y -i "$f" -c:a libmp3lame -b:a 192k /tmp/temp.mp3 && mv /tmp/temp.mp3 "$f"
done

find:

find . -name '*.mp3' -exec sh -c 'ffprobe -show_streams -select_streams a:0 "$0" | grep -F "bit_rate=320000" &&
ffmpeg -y -i "$0" -c:a libmp3lame -b:a 192k /tmp/temp.mp3 && mv /tmp/temp.mp3 "$0"' '{}' \;

이들 모두는 순차적으로 엄격하게 실행되며 한 번에 하나의 파일 만 변환합니다. 그러나 프로세서는 그 이상의 기능을 제공 할 수 있습니다. 작업 속도를 높이기 위해 GNU를 사용할 수 있습니다 parallel.

sudo apt-get install parallel
shopt -s globstar
parallel 'ffprobe -show_streams -select_streams a:0 {} | grep -F "bit_rate=320000" &&
ffmpeg -y -i {} -c:a libmp3lame -b:a 192k {.}.temp.mp3 && mv {.}.temp.mp3 {}' ::: **/*.mp3

또는:

find . -name '*.mp3' | parallel 'ffprobe -show_streams -select_streams a:0 {} | grep -F "bit_rate=320000" &&
ffmpeg -y -i {} -c:a libmp3lame -b:a 192k {.}.temp.mp3 && mv {.}.temp.mp3 {}' 

멋진 답변. 나는 절름발이를 사용하여 무언가를 자갈로 만들었지 만 이번에는 줄 것입니다. 다시보고합니다.
Moif Murphy

이 오류가 발생합니다 : Unrecognized option 'select_streams' Failed to set value 'a:0' for option 'select_streams'
Moif Murphy

avconv로 대체하십시오 :avconv -i {} -b:a 192k {.}.temp.mp3 && mv {.}.temp.mp3 {}
lepe

2

Lame 이 작업을 수행 할 수있는 최고 중 하나입니다.

당신은 명령을 사용할 수 있습니다 lame -b 192 input.mp3 output.mp3

파이핑 명령에는 좋지 않지만 exiftoolmp3 파일의 비트 전송률을 얻는 데 사용할 수 있습니다

exiftool -AudioBitrate File.mp3 

그러나 여전히 mp3 파일 찾기, 비트 전송률 확인 및 변환 명령을 파이프하는 방법이 필요합니다 ...


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