본문으로 바로가기

파일의 IT 블로그

  1. Home
  2. 프로그래밍/Python
  3. [Python] m4a 음원 파일에 앨범 아트 추가하기

[Python] m4a 음원 파일에 앨범 아트 추가하기

· 댓글개 · KRFile

안녕하세요 파일입니다. 최근 들어 파이썬으로 작업하면서 m4a 음원 파일에 앨범 아트를 대량으로 추가해야 하는 경우가 생겼는데요. 이 이유에 관해선 나중에 별도로 포스팅 하도록 하겠습니다.

 

앨범 아트?

mp3던, m4a던 음성 포맷들에는 일반적으로 앨범 아트를 추가할 수 있습니다. 여기서 앨범 아트란 말 그대로 음성에 미리 보기 같이 넣어진 사진을 의미합니다.

 

앨범 아트가 없으면 이런식으로 윈도우 큰 미리보기에서 아무것도 뜨지 않지만

 

앨범 아트가 있으면 이런식으로 미리보기에 앨범이 뜹니다. 앨범 아트를 보여주는 기능은 PC 미디어 플레이어 뿐만 아니라 스마트폰 앱 뮤직 플레이어 (PowerAmp) 대부분이 지원하는 기능이기 때문에 추가해두면 확실히 좋죠.

오늘은 m4a 음원 파일에 앨범 아트를 프로그래밍적으로 추가하는 방법을 알아보겠습니다.

 

m4a 파일은 뭔가요

시작전에 m4a 파일이 뭔지 궁금해하시는 분들이 있으실건데요. 저도 사실 m4a 파일을 알고 쓴지는 얼마 안됐습니다. 한 3년정도? 일단 음악 파일의 강자인 mp3 파일은 대부분 아실겁니다. 엠피쓰-리 파일이면 노래 파일이다. 많이들 들어보셨죠? 

 

M4A 파일은 애플이 MP3를 대응해 개발한 파일 형식이다. M4A를 필두로한 iTunes Store 의 등장과 동시에, 스트리밍시장에서 M4A가 가장 보편화된 형식이 되었는데 이유는 아래와 같다. ​ M4A 파일은 AAC (Advanced Audio Coding) 코덱으로 인코딩되어 MP3 파일과 동일한 비트 전송률을 제공하면서도 압축률을 더 높일수있다. 이말인즉슨 파일 크기는 작아지지만 오디오 품질은 같다는 얘기다. ​ 만약 당신이 스포티파이, 멜론의 사장이라 치면 음질은 같은데 용량이 큰 A 와 용량이 적은 B 중 어떤걸 채택하겠는가 당연히 말할것도 없이 B이다. 그렇기에 모든 스트리밍 플랫폼 시장은 이 M4A가 장악했다고 보면 된다. 하지만 단점으로는 호환성이 낮아 스트리밍이 아닌 일반 기기에서는 재생이 힘들다는 점이다.

출처 : https://m.blog.naver.com/thepoundcake/222230103549

하지만 m4a라는 음원 파일도 있답니다. 

 

설명은 대부분 위에 나와 있는데요. m4a, mp3 둘다 압축 손실 음원으로 계속 해서 압축을 진행하면 음원 손실이 이루어지지만 m4a가 mp3보다 조금더 진보한 압축 기능을 제공해서 동일 음질에서 m4a가 mp3보다 더 적은 용량을 지원합니다. 기기에서 m4a 를 지원 못하는게 아닌 이상 안쓸 이유가 없는 파일 형식인 셈이죠.

 

저는 스마트폰에서 PowerAmp라는 음악 플레이어 앱을 사용하는데 m4a 잘 재생됩니다.

m4a가 재생 안되는 경우는 잘 못본 거 같네요.

 

파이썬으로 m4a 파일에 앨범아트 추가하기

이제 서론은 끝내고 본론인 파이썬으로 m4a 파일에 앨범아트 추가하는 방법을 알아봅시다. 처음엔 ffmpeg 같은걸 이용해서 추가해볼려고 했는데 mp3 에 앨범아트 추가하는 방법들은 많이 나와있어도 m4a에 추가하는건 잘 안나와 있더라구요 ㅜㅜ Bing Chat AI 와 구글링의 힘을 빌려서 mutagen 이라는 라이브러리를 찾아 해결할 수 있었습니다.

 

#pip install mutagen
from mutagen.mp4 import MP4
import mutagen.mp4

def add_album_art(m4a_file_path: str, album_file_path: str) -> None:
    try:
        audio = MP4(m4a_file_path)
        audio["covr"] = [
            mutagen.mp4.MP4Cover(
                open(album_file_path, "rb").read(),
                imageformat=mutagen.mp4.MP4Cover.FORMAT_JPEG,
            )
        ]
        audio.save()
    except Exception as e:
        # 예외는 처리하지 않고 상위에 전파
        raise e

add_album_art("test.m4a", "test.jpg")

코드는 위와 같이 매우 간단합니다. add_album_art() 함수를 사용해주시면 됩니다. 첫 번째 인자엔 앨범아트를 추가할 m4a파일 경로를 넘기고 두 번째 인자엔 앨범아트 파일 경로를 넘기면 됩니다.

 

참고로 mutagen 라이브러리를 설치해야 합니다. pip install로 설치해주시면 됩니다.

 

코드상 mutagen.mp4 를 불러와서 처리를 하고 있는데, mp4라고 적혀있긴 하나 m4a 앨범아트도 잘 처리가 됩니다. 보면 바이너리로 파일을 읽어서 (rb) MP4Cover 라는 class 생성자에 넘기고 있는데 바이너리 구조에서 mp4 에 이미지를 넣는 방식이나 m4a 에 이미지를 넣는 방식이 유사한것으로 추정됩니다.

 

더 이상 자세한건 제가 mp4 구조나 m4a 구조를 잘 몰라서 모르겠읍니다. 

뭐 구조는 몰라도 기능상 저 함수만 호출하면 잘 작동은 합니다.

+ 참고로 저기 covr 이란거 cover 오타 아님 그냥 냅두세요

 

잘 쓰세요 Chrome 20000~~

SNS 공유하기
💬 댓글 개
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.