ffmpeg를 이용한 mp3 파일 metadata 수정하기(Edit metadata in mp3 using ffmpeg)

테스트 중 mp3 파일에 metadata 편집할일이 있어서 exiftool로 수정하는데 이런 에러가 났습니다.

$ exiftool -artist=“hahwul<br>11" a.mp3
Error: Writing of MP3 files is not yet supported - a.mp3
0 image files updated
1 files weren't updated due to errors


지원 안한다고?? 그래서 찾아보니… 정말 지원 대상이 아니더군요.
https://www.sno.phy.queensu.ca/~phil/exiftool/



그래서 고민하다가 이참에 ffmpeg도 되나 싶어 찾아보니 가능하더라구요.
(예전에 취약점 때문에 보던걸 이런식으로 사용하게 될줄이야..)

간략하게 어떻게 확인하는지 정리해봅니다.

How to Install?

brew, apt, yum 등 패키지 관리자는 정말 좋은 것 같습니다. brew로 쉽게 설치 가능해요.
(단 디펜던시가 좀 많아서… 오래걸립니다)

$ brew install ffmpeg


진짜많다...

Edit mp3 metadata with ffmpeg

우선 대략적으로 실행 패턴과 옵션 정리를 먼저 해보면…

$ ffmpeg -i inputfile -metadata title="제목" outputfile

-i : 입력파일(즉 metadata를 변경할 파일)
-metadata : metadata 수정 옵션으로 하위 값으로 metadata 이름과 값이 들어갑니다.

음.. 뭐 별거없네요…

$ ffmpeg -i test.mp3 -metadata title="asdf<svg/onload=alert(45)>" -metadata Lyrics="this is lyrics<br>asd" inject_test.mp3



exiftool로 잘 됬나 봐보면…

$ exiftool inject_test.mp3
ExifTool Version Number : 11.30
File Name : 123.mp3
Directory : .
File Size : 3.4 MB
File Modification Date/Time : 2019:04:04 23:57:36+09:00
File Access Date/Time : 2019:04:04 23:57:33+09:00
File Inode Change Date/Time : 2019:04:04 23:57:36+09:00
File Permissions : rw-r--r--
File Type : MP3
File Type Extension : mp3
MIME Type : audio/mpeg
MPEG Audio Version : 1
Audio Layer : 3
Audio Bitrate : 64 kbps
Sample Rate : 44100
Channel Mode : Stereo
MS Stereo : Off
Intensity Stereo : Off
Copyright Flag : False
Original Media : False
Emphasis : None
ID3 Size : 175
Title : asdf<svg/onload=alert(45)>
Artist : Silent Partner
Album : YouTube Audio Library
Genre : Pop
User Defined Text : (USLT) asdf<br>asdf
Encoder Settings : Lavf58.20.100
Duration : 0:07:27 (approx)




ffmpeg metadata list 

(https://wiki.multimedia.cx/index.php/FFmpeg_Metadata#QuickTime.2FMOV.2FMP4.2FM4A.2Fet_al.)
KeyiTunes fieldLow-level identifier
"title"Name'\251nam'
"author"Artist'\251ART'
"album_artist"Album Artist'aART'
"album"Album'\251alb'
"grouping"Grouping'\251grp'
"composer"Composer'\251wrt'
"year"Year'\251day'
"track"Track Number'trkn'
"comment"Comments'\251cmt'
"genre"Genre'\251gen'
"copyright"??'\251cpy'
"description"Description'desc'
"synopsis"Information dialog when selecting "Show Description" in context menu'ldes'
"show"Show'tvsh'
"episode_id"Episode ID'tven'
"network"??'tvnn'
"lyrics"Lyrics'\251lyr'