모노로 변환하고 싶은 스테레오 MP3가 많이 있습니다. 이를 수행하는 가장 좋은 방법은 무엇입니까? 나는 일괄 처리할 수 있는 것을 선호합니다. 최대한 원본에 가까운 화질을 유지하고 싶습니다. 내 파일의 비트 전송률도 다르기 때문에 일부 파일이 128일 때 모든 파일을 320kpbs로 만들고 싶지 않습니다.
또한 내 전체 라이브러리에서 어떤 파일이 스테레오인지 빠르게 확인할 수 있는 방법이 있나요?
답변1
스테레오에서 모노로 변환하면 다시 인코딩되므로 동일한 비트 전송률을 유지하는 것은 의미가 없습니다. 실제로 128kbit/s MP3를 새로운 128kbit/s MP3로 변환하면 두 번째 MP3가 모노인 경우에도(따라서 동일한 주관적 품질에 대해 더 낮은 비트 전송률이 필요함) 엄청나게 형편없는 품질을 얻을 수 있습니다.
일반적으로 MP3에 대해 VBR(가변 비트 전송률) 설정을 사용합니다. 이 설정은 특정 품질을 목표로 하고 인코더가 필요한 비트 전송률을 설정할 수 있도록 합니다(완전히 조용한 오디오는 고래 노래보다 낮은 비트 전송률이 필요합니다. 고래 노래보다 낮은 비트 전송률이 필요합니다). 덥스텝). 명령줄에서 ffmpeg는 -ac 1
다음과 같이 옵션을 사용하여 오디오를 모노로 변환할 수 있습니다.
ffmpeg -i input.mp3 -c:a libmp3lame -q:a 2 -ac 1 output.mp3
보다이 페이지를 사용하는 방법에 대한 안내입니다 -q:a
. 해당 페이지의 표는 스테레오 오디오를 겨냥한 것입니다. 실제로 표시되는 비트 전송률은 다소 낮을 것입니다. 일반적으로 3~4를 권장하지만 원본 CD가 아닌 MP3에서 인코딩하는 것이므로 조금 더 높은 수준을 목표로 해야 합니다.
물론 이는 매우 쉽게 자동화될 수 있습니다. Linux/OSX/기타 UNIX 계열에서 MP3 디렉토리를 변환하려면:
for f in *.mp3; do ffmpeg -i "$f" -c:a libmp3lame -q:a 2 -ac 1 mono-"$f"; done
재귀적으로 그렇게 하려면:
find . -type f -name "*.mp3" -exec ffmpeg -i '{}' -c:a libmp3lame -q:a 2 -ac 1 mono-'{}' \;
GNU Parallel과 멀티 코어 머신이 있다면 다음이 유용할 수 있습니다:
find . -type f -name "*.mp3" | parallel ffmpeg -i {} -c:a libmp3lame -q:a 2 -ac 1 mono-{}
답변2
답변3
Lame은 -m 스위치를 사용하여 파일을 모노로 변환할 수 있는데, 메타 태그를 보존할 수 있다는 이점이 있습니다(ffmpeg도 그렇게 할 수 있는지 확실하지 않습니다).
다음은 가변 비트 전송률 품질 옵션 중 하나로 mp3를 트랜스코딩하기 전에 mp3의 비트 전송률을 결정하는 다소 복잡한 예입니다.
고양이 s2mono.sh #!/bin/bash mp3파일=$@ mp3크기() { du -sk "$1" | awk '{인쇄 $1 * 8 }' } mp3길이() { id3info "$1" | \ awk '/=== TLEN/ { if ($NF > 0) { len=int( $NF/1000) }} END {print len}' } mp3속도() { echo $(( `mp3size "$1"` / `mp3length "$1"` )) } 비트레이트=`mp3rate "$mp3file"` if [ $bitrate -gt 155 ]; 그러면 VBR='-V4'; fi if [ $bitrate -gt 190 ]; 그러면 VBR='-V2'; fi if [ $bitrate -gt 249 ]; 그러면 VBR='-V0'; fi 에코 다운샘플링 $mp3file lame --silent $VBR -mm --mp3input "$mp3file" \ "$(기본 이름 "$mp3file" .mp3 )-mono.mp3"
모든 mp3의 총 크기가 스테레오 형식으로 80MB인 폴더에서 이것을 실행했습니다. 결과 모노 mp3는 32MB만 소비했습니다.
find . -iname \*mp3 -print0 |xargs -0 -L1 sh s2mono.sh
(...)
du -skc *-mono.mp3| tail -n1
32376 total
find . -iname \*mp3 |grep -ve '-mono' |\
while read f; do du -sk "$f" ;done |\
awk '{ tot+=$1} END{print tot}'
80112
질문의 마지막 부분은 file
다음과 같습니다.
find /R/audio/muzica/_ripped/wav -exec file {} \+ |grep Monaural
답변4
이것이 내가 찾은 가장 쉬운 방법입니다
나 때문에.mp3; ffmpeg -i "$i" -ac 1 "${i%.} - 모노.mp3"; 완료
동일한 방법을 사용하여 다른 오디오 형식을 mp3로 변환하거나 모노로 변환할 수도 있습니다.
나 때문에.m4b; ffmpeg -i "$i" -ac 1 "${i%.} - 모노.mp3"; 완료