*개발

영상에서 음악을 추출할 수 있었다

㉰짐。 2018. 7. 30. 02:02


전 글 마지막에 적었던 Apple AAC를 이용한 mp4 인코딩 - 나긋한 개발 을 쓰니까 뭘 해볼 틈도 없이 해결됐다.

괜히 복잡하게 고민했네..


qaac64만 쓰더라도 MP4 파일은 m4a로 바꿀 수 있다. 굳이 mp3로 바꿀 필요가 없다면 여기서 멈춰도 되는 것 같다.

그러니까 내가 써야 하는 명령어는


qaac64 -v [비트레이트 목표] -r keep --threading --artwork [파일] --date [날짜]


인 것 같다. 여기서 아트워크랑 날짜는 크롤링할 때 받아올 수 있으니까 넘기고 비트레이트 목표를 설정해줘야 하는데 이건 영상이 있으면 메타데이터에서 긁을 수 있다.


A python function utilising `ffprobe` to find any metadata related to a video file. Examples of what it can find include bitrate, fps, codec details, duration and many more. This gist returns the video height and width as an example.


사실 메타데이터라는 단어를 못 떠올려서 how to get information in video 같은 검색어로 한참 고민한 건 좀 부끄럽다.

ffprobe는 ffmpeg랑 같이 쓸 수 있는 프로그램인 모양인데 실행해보면 이런 느낌으로 뜬다.

여기서 필요한 건 아래쪽의 bit_rate랑 codec_name이다. aac가 아니면 qaac으론 못 긁으니까 좀 곤란하다.

이렇게 되어있으니 메타데이터 태그에서


height = ffprobeOutput['streams'][0]['height']


이 줄만


codec_name = ffprobeOutput['streams'][1]['codec_name']


이런 느낌으로 고쳐주면 될 줄 알았는데 다른 파일 보니까 오디오가 비디오보다 먼저 나와서 비디오 코덱이랑 비트레이트가 추출되는 경우도 있더라...


그래서 codec_name = ffprobeOutput['streams'][i]['codec_name'] 로 적고 바로 앞줄에 적절한 i값을 찾을 수 있도록 했다.



이런 느낌으로.

단순화할 수 있을 거 같기는 한데 잘 모르겠다.


문제는 flv파일이었는데 내부 오디오 포맷이 mp3로 돼있더라. 그래서 qaac64로 못 빼내고 lame도 해보니까 분석 불가능해서 돌아돌아가는 방법을 써야 했다.

그래도 전 게시물에서 찾아놓은 라이브러리를 참고하면 쉽게 만들 수 있겠지. 기왕 ffprobe 쓰니까 ffmpeg 쓰는 걸로 다시 짜면 될 것 같다.


Python, subprocess: hide console on Windows

mp4 영상에서 오디오 추출하기

Encode/MP3 – FFmpeg

ffmpeg Documentation

ffmpeg to extract audio from video - Stack Overflow