안녕하십니까 프로젝트를 하고있는 한 학생입니다.
mp4파일 구조를 분석하고
mp4파일에서 음성부분을 추출해서 mp3파일로 만들려고합니다. (라이브러리 사용x)
mp4 파일은 크게 ftyp, mdat, moov 로 나뉘어져있는데
mdat 안에는 오디오 트랙과 비디오 트랙이 있고
moov 안에도 오디오 트랙과 비디오 트랙이 있습니다.
처음 생각으로는 각각의 구조의 바이트를 다 계산해서
오디오 부분만 추출한 뒤 합쳐서 파일입출력으로 mp3 로 출력하려고 생각했습니다.
mp4 안에 mp3 가 들어있어서 원하는 부분만 추출한 뒤 mp3로 출력하면
될거라고 생각했는데 구조가 완전 달라서 어떻게 해야할지 자료수집 중에 있습니다ㅠ
어떤 식으로 접근해서 mp4파일에 있는 음성부분을 추출해서 mp3로 만들어야할지
모르겠습니다. mp4파일 같은경우는 isoviewer 프로그램으로 데이터의 구조를 확실히 볼수
있었지만 mp3파일 같은경우는 HxD 로 16진수의 데이터는 볼 수 있었으나
isoviewer처럼 파일의 데이터 구조를 볼 수는 없었습니다. 현재 찾아보는 중에 있습니다.
그리고 mp4파일에 있는 구조부분중 음성부분이 mp3파일의 AAU같은 데이터부분과
동일할 줄 알았는데 이름부터 달라서 어떤부분이 같은부분인지 모르겠습니다.
이런식으로 mp4에서 음성부분만 빼서 mp3를 만들 때 혹시 필터링 같은부분이 필요한지도
궁금합니다. 현재 이런식으로 mp4파일을 1byte씩 받아와서 필요한 부분만 뽑아와서
mp3파일을 만들어 보고있습니다. 이런 방식으로 하는게 맞는지도 궁금합니다.
조언 좀 해주시면 감사하겠습니다!
보통 MP4내부의 오디오 데이터는 mp3가 아니라 aac일겁니다. mp3 파일로 만드려면 aac->mp3인코딩 한 후 mp3컨테이너 스펙에 맞게 데이터를 넣어주면 되겠죠. 데스크탑에서는 간단하게 될 것이고, 안드로이드에 mp4 container parser, aac decoder, mp3 encoder, mp3 container generator정도가 있다면 어렵지 않게 할 수 있습니다. container계열은 직접 만들 수도 있구요. 필수적으로는 AAC decoder/mp3 encoder정도가 될겁니다.
http://perso.telecom-paristech.fr/~concolat/MPEGFileFormats.pdf 의 8~10 페이지를 보시면 문의하신 사항에 대해선 답변이 될 듯 합니다.
단지 파서를 구현하시려면 포멧 구조 부터 제대로 파악하셔야 할 듯 합니다.
ftyp box는 파일 포멧에 대한 설명이 들어가는 부분이고
moov에 어떤 형식의 데이터가 어느위치에 들어있느냐 같은 정보가 mdat에 실제 데이터가 들어있습니다.
ISO/IEC 14496-12 문서(http://jaadec.sourceforge.net/specs/ISO_14496-12_ISOBMFF.pdf) 읽어 보신 후 구현하시길 권장합니다.
stbl box를 파싱하면, 데이터의 offset과 length 같은 정보가 들어 있습니다. mp3를 포함한 대부분의 오디오 데이터는 이 데이터를 순서대로 연결해서 파일로 떨구면 동작 됩니다. 오디오 정보가 mp3라면 mp3 오디오 파일이, aac면 aac 오디오 파일이 된다 보시면 됩니다, 일부 오디오 헤더가 필요한 포멧은 헤더정보를 앞에 추가해 주면 재생이 되고요.
사족인데. 사과 회사 때문에 mp4에는 오디오를 거의 aac로 사용합니다. mp3로 된 파일은 구하기도 힘드실 겁니다. ^^:;