배치 모드의 명령 줄에서 mp3 / ogg 파일에 앨범 아트 표지를 추가 하시겠습니까?


38

Linux에서 소프트웨어를 찾고 있는데, 앨범 모드 / 표지를 선택한 각 파일에 배치 모드로 추가합니다. 앨범 아트는 내 컴퓨터에 저장된 jpg / png입니다. 인터넷에서 가져올 수 있다면 좋을 것입니다.

현재 Rhythmbox와 Banshee를 모두 시도했습니다. 나는 또한 시도 lame하고 easytag, 그러나 그들은 배치 모드를 지원하지 않는 것 같습니다. lame되어 있지 속성을 추가하지만, 덮어 쓰기. (lame이 지금까지 사용 된 유일한 명령 줄 이라는 것을 알고 있습니다).

그래서 기본적으로 나는 찾고 있습니다 :

<some magic s/w> --picture=<my chosen picture> Music/Artist/*.mp3

그러면 파일의 메타 데이터에 그림이 영구적으로 추가됩니다.

그런 소프트웨어를 제안 해 주시겠습니까?

답변:


24

절름발이

사용 lame조금 스크립트를 사용하여이 작업을 수행 할 수 있습니다 :

$ lame --ti /path/to/file.jpg audio.mp3

파일 이름이 이와 비슷한 경우 쉘 스크립트를 만들어 원하는 작업을 수행 할 수 있습니다.

for i in file1.mp3 file2.mp3 file3.mp3; do
  albart=$(echo $i | sed 's/.mp3/.jpg/')
  lame --ti /path/to/$albart $i
done

위의 내용을 약간 더 작게 만들고 일치하는 접미사를 제거 sed하여 사용할 필요가 없습니다 bash.

...
albart="${i%.mp3}.jpg"
...

피카드 / 음악

이 작업을 대규모로 수행하려면 MusicBrainz 데이터베이스 사용을위한 프론트 엔드 도구 인 Picard를 사용하는 것이 좋습니다. Picard에는 "Cover Art Downloader"라는 플러그인이 있습니다.이 플러그인은 컬렉션 모음에이를 수 있습니다.

그러나 위의 명령 줄 구동되지 않습니다.

사탕무

또 다른 옵션은을 사용하는 것 beets입니다. 이것은 명령 줄에서 구동 할 수 있으며 앨범 아트 소싱을 위해 MusicBrainz 데이터베이스를 사용합니다.

당신이 중 하나를 사용하여 앨범 아트를 소싱 할 수 FetchArt 플러그인 또는 사용하여 포함 EmbedArt 플러그인 .

다른 옵션?

또한 이전에 요청한 U & L Q & A 제목 : Linux 용 mp3 태깅 도구는 무엇입니까? . 이 글타래에는 몇 가지 대체 도구가 있습니다.


sed와 같은 통화를 피할 수 있습니다 albart="${i%.mp3}.jpg". 더 중요한 것은 방금 당신의 절름발이 명령을 테스트하고 lame: unrecognized option -i...
evilsoup

@evilsoup-감사합니다. 스위치에 대시가 없습니다. 이어야 --ti ..합니다.
slm

@evilsoup – 사용하지 않는 것에 대한 피드백도 추가했습니다 sed. 감사!
slm

7
@ Exeleration-G-아니요 lame실제로 인코더이므로 사용하지 않는 것이 좋습니다 . mp3의 id3 태그를 조작하기위한 다른 도구가 있습니다. 첨부 된 이미지를 사용 id3v2 -r "APIC" *.mp3하거나 eyeD3 --remove-all-images *.mp3제거 할 수 있습니다 .
slm

1
참고로 버전 3.99에는 "--ti"옵션 (debian buster)이 없습니다. eyeD3이 좋은 대안 인 것 같습니다.
Benjamin Peter

17

한 가지 해결책은 ffmpeg를 사용하는 것입니다.

ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3

디렉토리의 모든 MP3를 수행하기 위해 이것을 for 루프에 넣을 수 있습니다.

for f in ./*.mp3; do ffmpeg -i "$f" -i cover.jpg -map_metadata 0 -map 0 -map 1 out-"${f#./}"; done

이렇게하면 별도의 출력 파일이 만들어집니다 (따라서라는 파일이 있으면 및로 foo.mp3끝납니다 ). ffmpeg가 입력을 덮어 쓸 수 없기 때문입니다. 다음과 같은 방법으로이 문제를 해결할 수 있습니다.foo.mp3out-foo.mp3

for f in ./*.mp3; do \
ffmpeg -i "$f" -i cover.jpg -map_metadata 0 -map 0 -map 1 out-"${f#./}" \
&& mv out-"${f#./}" "$f"; done

이 문제에 ffmpeg를 사용하는 것은 순항 미사일을 사용하여 너트를 깨는 것과 약간 비슷합니다. 보다 전문화 된 메타 데이터 조작 도구는보다 깔끔하고 짧은 명령으로이 작업을 수행 할 수 있습니다.


6
여기에 표시된 ffmpeg 명령은 오디오를 인코딩합니다. 다른 형식으로 변환하는 경우에는 문제가 없지만, 다시 인코딩하지 않고 기존 mp3에 아트를 추가하려면을 -acodec copy뒤에 추가 하십시오 -map 1.
jsd

이것은 특별한 이유가 있습니까? mp3 파일 만 얻지 만 축소판은 없습니다. @jsd
요리사 파라오

죄송합니다 @ChefPharaoh 왜 작동하지 않는지 모르겠습니다. 방금 아트를 추가하는 동안 wav-> mp3을 시도하고 위에 표시된 ffmpeg 명령을 사용하여 기존 mp3에 아트를 추가하려고했습니다. 두 번 모두 잘 작동했습니다.
jsd

@evilsoup 나는 매우 악한 일을하고 있는지 확실하지 않지만 프로세스 대체를 사용하여 대신 mp3 파일을 수정할 수 있습니다. Kinda는이 스크립트를 단순화하고 매우 빠릅니다.
rien333

간식처럼 일했고 나는 또한 ffmpeg가 절름발이보다 약간 빠르다는 것을 발견했습니다. :)
Tina

7

MP3의 경우 :

eyeD3 --add-image="cover.jpg":FRONT_COVER "file.mp3"

FLAC의 경우 :

metaflac --import-picture-from="cover.jpg" "file.flac"

OGG / Vorbis는 더 복잡해 보입니다 .


5

이를 위해 FancyAudio gem을 사용할 수 있습니다 . mp3 파일에 앨범 아트를 추가 할 수 있습니다. 설명서여기에서 볼 수 있습니다 .

풍모

  1. 단일 mp3 파일에 앨범 아트 추가
  2. 여러 mp3 파일에 앨범 아트를 추가합니다.

아래 스크린 샷은 이미지와 여러 mp3 파일이 들어있는 폴더에서 실행될 때 fancy_audio의 출력을 보여줍니다.

여기에 이미지 설명을 입력하십시오

아래 스크린 샷은 mp3 및 이미지 파일이 들어있는 폴더에서 실행될 때 fancy_audio의 출력을 보여줍니다.

이 이미지는 mp3 및 이미지 파일이 포함 된 폴더에서 실행될 때 fancy_audio의 출력을 보여줍니다.


이것은 쉽고, lame여러 mp3 파일에 동일한 이미지를 추가 할 때보 다 더 빠르게 작동 합니다. Ruby를 알 필요가 없습니다;)-이것은 독립형 스크립트입니다.
Tomasz Gandor

0

OP는 웹에서 표지를 다운로드하면 선호한다고 말하고 pip에서 설치할 수있는 eye3Dand 를 사용하여 꽤 괜찮은 스크립트를 작성했습니다 sacad. id3 태그의 유형에 관계없이 eye3D오디오를 다시 인코딩하지 않고 --to-v2.4플래그를 사용하여 mp3 파일을 처리 하므로이 목적에 매우 유용합니다 . mp3 파일이 포함 된 디렉토리에서 스크립트를 시작해야합니다. id3 태그에서 아티스트 및 앨범 이름을 추측하거나 인수로 수동 이름을 사용하여 인수없이 실행할 수 있습니다 (예 :) embedart "pink floyd" "dark side of the moon". 그것은 생선 껍질을 위해 쓰여졌지만 모든 set 명령을 변수 선언을 bash로 변경하면 쉽게 bash에 이식 가능해야합니다.

function embedart
    if echo $argv | grep -q -e '-h'
       echo 'embedart "[Artist]" "[Album]"'
       return
    end

    if test $argv[1]
        set artist $argv[1]
        set album $argv[2]
    else
        set artist (eyed3 (ls *mp3 | head -1) | ggrep -oP "artist.*: \K.*" | head -1)
        if not test $artist
            echo "No artist found!"
            return
        end
        set album (eyed3 (ls *mp3 | head -1) | ggrep -oP "album.*: \K.*" | head -1)
        if not test $album
            echo "No album found!"
            return
        end
    end

    sacad $artist $album 350 cover.jpg -v warning 2> /dev/null > /dev/null
    eyeD3 --to-v2.4 --add-image "cover.jpg:FRONT_COVER" *mp3 -Q 2> /dev/null > /dev/null

    rm cover.jpg
    echo "Done!"
end

-1

eyeD3 는 유니 코드에서 작동하지 않습니다 . ASCII가 아닌 문자가 .mp3 파일 이름 (또는 앨범 디렉토리와 같은 조상 디렉토리 이름)에 있으면 중단됩니다. LTA.

앨범이나 노래 제목이 영어로 작성되지 않은 경우 운이 좋지 않습니다!

예를 들면 다음과 같습니다.

cp yoursong.mp3 /tmp/Странджанска.mp3
eyeD3 --add-image folder.jpg:FRONT_COVER Странджанска.mp3

분명히 eyeD3는 .mp3 파일의 전체 경로를 .mp3 파일에 넣고 싶어하며 ASCII가 아닌 문자는 처리 할 수 ​​없습니다.

잡히지 않는 예외 : 'ascii'코덱은 5-16 위치의 문자를 인코딩 할 수 없습니다 : 서 수가 범위 내에 있지 않습니다 (128)
eyed3 : ERROR : 'ascii'코덱이 5-16 위치의 문자를 인코딩 할 수 없음 : 서 수가 범위 내에 있지 않음 (128)
역 추적 
... (긴 역 추적 생략) ...
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.