모든 메타 데이터를 유지하면서 ffmpeg를 사용하여 .flac를 .mp3로 변환


88

모든 메타 데이터를 유지하면서 .flac를 .mp3 로 변환하려면 어떻게해야합니까 (즉, .flac 파일의 Vorbis 주석을 .mp3의 ID3v2 메타 데이터로 변환)?


5
다음 번 ffmpeg에는 Super User 에서 CLI 사용에 대해 질문 해야합니다 . Stack Overflow 는 프로그래밍과 관련된 질문에만 해당됩니다. 또한 FLAC는 공식적으로 Vorbis 주석지원 하므로 "keep"대신 ID3v2로 변환하고 싶다고 가정합니다.
llogan

알겠습니다. 질문을 수정했습니다. StackOverflow에서 이와 같은 질문 (예 : this 또는 this )을 보았고 내 지식을 공유하는 것이 흥미로울 수 있다고 생각 했기 때문에 여기에서 질문 했습니다. 또한 ffmpeg 태그 가 있음을 알았습니다. 여기서 내 솔루션을 공유하지 않는 이유는 무엇입니까? ffmpeg는 많은 개발자가 많은 응용 프로그램에서 사용합니다.
Vito Gentile

3
는 FFmpeg 태그 "는 FFmpeg은 명령 줄 도구의 상호 작용 사용에 대한 질문이 슈퍼 사용자에 요구해야한다."라고 말한다. 큰 문제는 아니지만 제 생각에는 주제에서 벗어난 질문이 너무 많기 때문에 지적하고 싶었습니다.
llogan 2014 년

답변:


152

다음 명령은 .mp3 (320kbps)에서 고품질을 유지하고 .flac 파일의 메타 데이터는 .mp3 파일에 포함될 수있는 ID3v2 형식으로 변환됩니다.

ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3

1
"ffmpeg"를 "avconv"로 바꿔야 할 수도 있습니다.
shockburner 2016

5
FWIW ffmpeg3.2는을 지정할 필요없이 FLAC에서 ID3v2로 메타 데이터를 자동으로 복사 -map_metadata 0 -id3v2_version 3하지만 ID3v1 태그로 복사하지는 않습니다. 이를 위해 별도의 도구를 사용합니다.
Dai

1
가사는 여전히하지만 복사되지 않습니다
user151496

1
여러 부분이있는 경우 flac을 분할합니까?
Artyom

1
@Artyom 분할 지점이 표시되는 flac 과 함께 파일 이 있어야합니다 . 그렇다면 shnsplit (콘솔) 또는 flacon (GUI)을 사용하여 파일을 분할하고 부분을 mp3로 변환 할 수 있습니다. flac 이 하나 뿐인 경우 cui 를 작성 하거나 ffmpeg의 -ss-t 옵션을 사용하여 각 노래를 잘라낼 수 있습니다.

56

위의 완벽한 대답. 이 명령을 사용하여 하위 트리의 모든 FLAC 파일을 iTunes에 추가하기 위해 find와 함께 사용합니다.

find . -name "*.flac" -exec ffmpeg -i {} -ab 160k -map_metadata 0 -id3v2_version 3 {}.mp3 \;

결과 파일을 iTunes에 자동으로 추가하려면 다음을 사용하여 iTunes 가져 오기 디렉토리를 가져옵니다.

find ~/Music/ -name "Automatically Add*"

결과 예

/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized

그런 다음 예를 실행하십시오.

find . -name "*.mp3" -exec mv {} "/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized/" \;

변환 된 모든 트랙을 iTunes에 자동으로 추가하려면.


3
" / Users / sir ", lmao.
Harry Svensson 2018

일화 : 우리 회사의 모든 사용자는 3-5 자로 축약 된 별의 이름을 가지고 있습니다. 광산은 "시리우스"짧은 선생님입니다)
user2707001

인식 할 수없는 옵션 '이름'.
MonsterMMORPG 2018

14

약간의 공간을 절약하고 싶다면 hydrogenaud.io 의 추천을 시도해보세요 .

매우 높은 품질 : 최적의 파일 크기와 고음질, 가정, 또는 조용한 청취는, -V0 (~245 kbps), -V1 (~225 kbps), -V2 (~190 kbps)또는 -V3 (~175 kbps)권장됩니다. 이러한 VBR 설정은 일반적으로 투명한 결과를 생성합니다. 이러한 사전 설정간에 청각 적 차이가있을 수 있지만 거의 없습니다.

출처 : http://wiki.hydrogenaud.io/index.php?title=LAME

ffmpeg에서이 옵션을 사용하려면 -q:a 0별칭을 사용해야합니다 .

-qscale:a(또는 별칭 -q:a)을 사용 하여 품질을 제어합니다 . 값은 인코더에 따라 다르므로 libmp3lame의 경우 범위는 0-9이며 값이 낮을수록 품질이 높습니다. 0-3은 일반적으로 투명한 결과를 생성하고 4 (기본값)는 지각 적 투명도에 가까워 야하며 6은 "허용되는"품질을 생성합니다. 이 옵션 -qscale:a-V독립 실행 형 lame 명령 줄 인터페이스 도구 의 옵션 에 매핑됩니다 .

출처 : https://trac.ffmpeg.org/wiki/Encode/MP3

ID3v1 메타 태그도 원한다면 -write_id3v1 1매개 변수를 추가해야합니다 .

그래서 내 마지막 명령은 다음과 같습니다.

ffmpeg.exe -y -i input.flac -codec:a libmp3lame -q:a 0 -map_metadata 0 -id3v2_version 3 -write_id3v1 1 output.mp3

8

다음 명령을 테스트하여 infile.flac파일을 다음으로 변환 했습니다 outfile.mp3.

ffmpeg  -i infile.flac  -q:a 0  outfile.mp3

Ubuntu 16.04부터 위의 명령은 메타 데이터를 복사하는 것 같습니다 (대부분? 전부?).

-q:a 0ffmpeg최고 품질의 VBR을 사용하도록 지시 합니다.

그러나, ffmpeg에서 내 앨범 아트 트랜스 코딩 된 jpegpng커버 아트의 크기를 증가.

Stream mapping:
  Stream #0:1 -> #0:0 (mjpeg (native) -> png (native))
  Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))

(위의 변환이 작동 방식을 고려할 때ffmpeg 의미가 있다고 생각 합니다 .)

약간의 파고를 한 후 -c:v copy비디오 스트림을 트랜스 코딩하는 대신 복사하도록 지정하는 옵션을 찾았습니다 . 전체 명령은 다음과 같습니다.

ffmpeg  -i infile.flac  -c:v copy  -q:a 0  outfile.mp3

위 명령의 결과는 다음과 같습니다.

Stream mapping:
  Stream #0:1 -> #0:0 (copy)
  Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))

3

중첩 폴더에있는 모든 flac 파일을 mp3에서 재귀 적으로 변환하려면 다음 명령을 사용했습니다.

find '~/Music/' -iname '*.flac' -exec bash -c 'D=$(dirname "{}"); B=$(basename "{}"); mkdir "$D/mp3/"; ffmpeg -i "{}" -ab 320k -map_metadata 0 -id3v2_version 3 -acodec libmp3lame "$D/mp3/${B%.*}.mp3"' \;

flac 파일이있는 폴더 안에 "mp3"라는 이름의 폴더가 생성되고, mp3 폴더 안에는 이전 파일 확장자를 유지하지 않고 320kbps의 비트 전송률로 상대 mp3 파일을 저장합니다.


3

한 줄로 모든 .flac파일을 .mp3단일 디렉토리 로 변환 하여 대부분의 메타 데이터를 유지 합니다.

for file in *.flac; do ffmpeg -i $file -q:a 0 ${file:r}.mp3; done

(참고 : ${file:r}주어진 파일 경로의 확장자를 제거합니다 . )

ffmpeg : flac에서 mp3로


$file같은 변수를 인용하십시오 "$file".
Chazy Chaz 19

:rzsh에서 작동하지 않는 수정자인 것 같습니다 bash. 배쉬에서는 대체 할 수 "${file:r}.mp3"와 함께 "${file%.flac}.mp3".
mivk

파일에서 파일 이름 만 표시하려면 bash 사용${file%.*}
Evhz

2

나는 이것이 요청되지 않았다는 것을 알고 있지만 이것이 수행 된 이유 중 하나 (적어도 내가하고 싶었던 것)를 고려하면 FLAC를 지원하지 않는 Apple iTunes로 음악을 가져올 수 있기 때문입니다. 이 경우 FLAC를 Apple의 무손실 형식 인 m4a로 변환하는 것이 더 합리적입니다. 이 명령을 사용하여 비슷한 파일 크기를 유지하면서 현재 폴더의 모든 파일을 변환했습니다.

find . -name "*.flac" -exec ffmpeg -i {} -map_metadata 0 -acodec alac {}.m4a \;


인식 할 수없는 옵션 '이름'. 인수 목록 분할 오류 : 옵션을 찾을 수 없음
MonsterMMORPG

@MonsterMMORPG 당신은 아마. 찾기 명령 후. . find는 현재 폴더에서 찾도록 지시하고 -name은 일치하는 파일 이름을 찾도록 지시합니다.
Dhiraj Gupta 2018

2

flac2mp3.sh 스크립트는 ffmpegFLAC 파일의 폴더 트리를 MP3 파일의 다른 폴더 트리로 변환하는 데 사용 합니다. 표지 아트가있는 경우 포함됩니다. CORES한 번에 여러 파일을 변환하는 백그라운드 작업을 생성 하도록 변수를 설정할 수 있습니다 .


오류 sed 제공 : -e 식 # 1, char 26 :
종결

정확히 내가 찾던 것, 감사합니다! VBR 및 기타 답변을 통합하기 위해 스크립트를 약간 조정했습니다. 여기에 업로드되었습니다. gist
aksh1618
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.