최근 몇 주 동안 저는 .flac --> .mp3 트랜스코딩에 대한 상당히 "직접" 접근 방식에서 "설정하고 잊어버리는" 접근 방식으로 전환했습니다.
첫 번째 단계는 GUI 프런트엔드(LAME 플러그인을 사용한 Audacity) 사용을 중단하고 대신 제가 설명한 접근 방식을 사용하는 것입니다.여기.
두 번째 단계는 명령 루프가 재귀적으로 작동하도록 지시하여 많은 하위 디렉터리가 포함된 디렉터리를 간단한 한 단계로 코드 변환할 수 있도록 하는 bash 셸 스크립트를 찾는 것입니다. 저것답변askubuntu.com 사용자가 기고했습니다.
이제 ID3 태그 정보가 유지되도록 더욱 구체화하는 방법을 배우고 싶습니다. 이러한 방법은 위의 스트라이프 ID3 태그 데이터에 연결되어 최소한의 데이터(즉, 헤더 필드만)만 남깁니다.
누구든지 이와 같은 쉘 스크립트 작성 방법을 가르쳐 줄 수 있습니까?
쉘 스크립트가 다음과 같이 업데이트되었습니다:
#!/bin/bash
file="$1"
flac -cd "$file" | lame --preset fast extreme - "${file%.flac}.mp3"
id3cp "$file" "${file%.flac}.mp3"
~/Desktop/stack에서 작업을 수행하면 find . -name '*.flac' -exec ~/bin/flac2mp3 '{}' \;
다음과 같은 결과가 출력됩니다.
01 - Amon Tobin - Chomp Samba.flac: done
LAME 3.98.4 64bits (http://www.mp3dev.org/)
Using polyphase lowpass filter, transition band: 19383 Hz - 19916 Hz
Encoding <stdin> to ./01 - Amon Tobin - Chomp Samba.mp3
Encoding as 44.1 kHz j-stereo MPEG-1 Layer III VBR(q=0)
Parsing ./01 - Amon Tobin - Chomp Samba.flac: done. Copying to ./01 - Amon Tobin - Chomp Samba.mp3: done
id3info
원본 .flac과 생성된 .mp3에 대해 별도로 제공됩니다.
*** Tag information for 01 - Amon Tobin - Chomp Samba.flac
(즉, 아무것도 없음)
*** Tag information for 01 - Amon Tobin - Chomp Samba.mp3
*** mp3 info
MPEG1/layer III
Bitrate: 128KBps
Frequency: 44KHz
.flac에는 확실히 태그 정보가 있습니다. EasyTAG를 열어서 이를 확인할 수 있습니다. EasyTAG는 이것을 "FLAC Vorbis 태그"라고 부르지만 .mp3를 "ID3 태그"라고 부릅니다. 이것이 문제인가요?
답변1
#!/bin/sh
file="$1"
outfile=${file%.flac}.mp3
eval $(metaflac --export-tags-to - "$file" | sed "s/=\(.*\)/='\1'/")
flac -cd "$file" | lame --preset fast extreme \
--add-id3v2 --tt "$TITLE" --ta "$ARTIST" --tl "$ALBUM" \
--ty "$DATE" --tn "$TRACKNUMBER" --tg "$GENRE" \
- "$outfile"
답변2
mp3fs를 사용하여 flac을 mp3로 일괄 인코딩하는 방법
flac 파일을 mp3로 변환하는 프로그램을 사용하는 대신 mp3fs를 사용하여 해당 파일을 가상 mp3로 렌더링하고 복사 작업을 대기열에 넣을 수 있는 프로그램을 사용할 수 있습니다. 그것은 나에게 아주 잘 작동합니다.
mp3fs 및 Ultracopier를 다운로드하고 설치합니다.
sudo apt-get install mp3fs ultracopier
실행할 각 mp3fs에 대한 flac 및 mp3 디렉터리 쌍을 만듭니다. 듀얼 코어 CPU가 있으므로 둘 다 실행합니다. flac 디렉토리를 flac 파일과 동일한 파티션에 유지하면 파일을 빠르게 이동할 수 있습니다. 내 시스템에서는 이 파티션을 "스토리지"라고 합니다.
cd /media/Storage
mkdir mp3fs mp3fs/flac_1 mp3fs/mp3_1 mp3fs/flac_2 mp3fs/mp3_2
명령줄에서 디렉터리를 마운트하거나 에 추가할 수 있습니다 /etc/fstab
. 또한 설치 중에 가상 mp3의 비트 전송률과 인코딩 알고리즘을 구성할 수도 있습니다. 나는 320kbps의 일정한 비트 전송률 mp3를 원하며, 절름발이는 아마도 가능한 최고의 mp3를 생성하는 데 항상 시간이 걸릴 것입니다.
명령줄에서:
mp3fs -b 320 -oquality=0 /media/Storage/mp3fs/flac_1 /media/Storage/mp3fs/mp3_1 -o allow_other,ro
mp3fs -b 320 -oquality=0 /media/Storage/mp3fs/flac_2 /media/Storage/mp3fs/mp3_2 -o allow_other,ro
퓨즈가 불평하는 경우, 예를 들어.
퓨저 마운트: /etc/fuse.conf를 열 수 없습니다: 권한이 거부되었습니다
. 퓨저 마운트: "user_allow_other"가 etc/fuse.conf에 설정된 경우에만 허용_기타 옵션이 허용됩니다.
그런 다음 user_allow_other
해당 옵션의 주석 처리를 제거 /etc/fuse.conf
하거나 읽을 수 있도록 만드십시오.
sudo chmod 644 /etc/fuse.conf
또는 다음에서 /etc/fstab
:
mp3fs#/media/Storage/mp3fs/flac_1 /media/Storage/mp3fs/mp3_1 fuse user,ro,allow_other,bitrate=320,quality=0 0 0
mp3fs#/media/Storage/mp3fs/flac_2 /media/Storage/mp3fs/mp3_2 fuse user,ro,allow_other,bitrate=320,quality=0 0 0
에 디렉토리를 추가한 후 /etc/fstab
다음 명령을 사용하여 마운트할 수 있습니다.
sudo mount -a
완벽한! 슈퍼 복사기를 시작합니다. 그놈 패널이나 사용하는 모든 항목에 표시기 아이콘이 배치됩니다. 그것을 클릭하고 사본 추가를 선택하십시오. 두 개의 코어를 사용하기 위해 이 작업을 두 번 수행했습니다. 파일 브라우저를 사용하여 일부 flac을 flac_1로 이동하세요. mp3_1 디렉토리로 이동하고 mp3를 Super Copier 창 중 하나로 드래그하여 복사 대기열을 시작합니다. Ultracopier는 파일의 대상을 묻습니다. 이제 하나의 코어가 flac 배치를 mp3로 인코딩하는 데 사용됩니다.
다른 코어를 사용하려면 flac 파일을 flac_2로 옮긴 다음 mp3_2에서 mp3를 두 번째 슈퍼카피어 창으로 드래그하세요.
업데이트: 저는 이제 Ultracopier 대신 MiniCopier를 사용하고 있는데 사용하기가 훨씬 쉽습니다. 아래 댓글을 참조하세요.
답변3
id3cp
FLAC은 ID3를 사용하지 않고 대신 Vorbis 태그를 사용하므로 작동하지 않습니다.
ffmpeg
선택적으로 변환을 통해 레이블을 유지할 수 있습니다. 좀 변덕스럽네요.값은 코덱 조합에 따라 다릅니다., 그러나 귀하의 경우에는 다음과 같이 작동합니다(버전 3.4.8).
ffmpeg -i in.flac -map_metadata 0:g:0 out.mp3
폴더의 모든 FLAC 파일을 (재귀적으로) 적용하는 것은 다음과 같이 간단합니다 bash
.
for f in */**/*.flac; do
ffmpeg -i "${f}" -map_metadata 0:g:0 "${f%.flac}.mp3";
done
lame 은 ffmpeg
자동으로 사용되며 품질 등을 제어하기 위한 추가 옵션도 있습니다. 세부정보를 확인하세요 man ffmpeg
.
답변4
Raphael의 답변은 저에게 많은 도움이 되었습니다. 그러나 FLAC 파일 세트가 작동하도록 하려면 태그가 올바르게 유지되고 오디오가 mp3 파일의 첫 번째 스트림이 되도록 스트림을 수동으로 조정해야 합니다. 나는 다음 줄로 끝났습니다.
$nohup bash -c 'for f in */**/*.flac; do ffmpeg -i "${f}" -map 0:a -map 0:v:0? -map 0:v:1? -c:v copy -codec:a libmp3lame -qscale:a 2 -y "${f%.flac}.mp3"; done' 2>&1 > log.txt &
물음표를 사용하면 관련 스트림이 손실될 수 있습니다. qscale 매개변수는 ffmepg에 사용되는 Lame 인코더 라이브러리의 mp3 인코딩 품질을 정의합니다.