본문 바로가기

일::개발

ffmpeg 으로 .m3u8에서 .mp4로 만들기

HLS로 서비스되는 .m3u8 형식의 URL을 받아서 로컬에 영상 파일을 떨구기

 

스트리밍용 .m3u8 URL을 이용해서 영상 파일을 만들고 싶을 때. ffmpeg은 별도로 설치하지 않고 docker 이미지를 이용했다.

docker run --rm -v $PWD:/tmp/workdir jrottenberg/ffmpeg -y -i "http://video.testdomain.com/test.mp4/playlist.m3u8" -bsf:a aac_adtstoasc -vcodec copy -c copy test.mp4

[Docker parameters]

--rm 실행 후 docker container 삭제
-v container의 /tmp/workdir을 $PWD로 연결

 

[ffmpeg parameters]
-y 묻지 않고 overwrite
-bsf:a aac_adtstoasc aac_adtstoasc bsf(bitstream filter)를 오디오 스트림(a)에 사용. .m3u8이 .ts로 구성되어 있고 output이 .mp4일 때 필요(https://ffmpeg.org/ffmpeg-bitstream-filters.html#aac_005fadtstoasc)
-c copy -vcodec copy codec 사용하지 않고 demux & mux만

 

 

추가로 여러 개의 영상을 하나로 합치기(코덱이 같은 경우)

ffmpeg -f concat -safe 0 -i <(for f in ./*.mp4; do echo "file '$PWD/$f'"; done) -c copy output.mp4
ffmpeg -f concat -safe 0 -i <(find . -name '*.mp4' -printf "file '$PWD/%p'\n") -c copy output.mp4