카카오 TV 동영상 다운로드: m4s 파일 다운로드 방법
Youtube 동영상 다운로드 방법은 kibua20.tistory.com/23에 설명했고, 블로그 Q&A를 진행하다가 Naver TV 동영상 다운로드 방법을 kibua20.tistory.com/79에 정리하였습니다. 2개 포스팅은 누적 조회수가 20K 정도로 많은 분들이 방문해주셨습니다. 본 포스팅 또한 카카오 TV 다운로드 방법에 대한 문의가 있었고, 확인해보니 네이버 TV의 HLS(ts)와 다른 MPEG Dash(m4s) 라 다운로드에 필요한 내용을 정리하여 작성하였습니다.
★ 너무 자주 다운로드하면 카카오 TV 서버에서 해당 IP의 접속을 막아 버립니다. (Test를 많이 했더니 access deny -.-)
1. 카카오 TV 동영상 1080p 다운로드 방법 문의
※ 해당 동영상은 저작권이 있는 동영상으로 보이며, 본 블로그는 다운로드 방법만을 설명할 예정입니다. 콘텐츠 저작권이 침해되지 않도록 주의해주세요.
2. Chrome 확장 프로그램 사용 - Stream Recorder로 다운로드 (간편함, 느림)
IT 전공자가 아닌 분들에는 Chrome 확장 프로그램을 활용하는 방법을 추천드립니다. 다운로드 방법은 간단하지만, 느립니다. 또한 동영상을 제공하는 서버에서 접속 권한을 변경하거나, Chrome 버전이 업데이트 되면서 막힐 수 있습니다.
Naver TV 동영상 다운로드 방법 중에서 "4.2. Chrome 확장 프로그램"에서 설명한 방법입니다. 다운로드 방법은
Chrome 확장 프로그램을 설치하고 동영상의 해상도를 설정한 다음에 Stream Recoder의 Capture Mode 모드를 사용하는 것입니다. 이 방법은 동영상을 캡쳐하기 때문에 동영상 재생이 끝날 때까지 참을성(?) 있게 기다리고 파일로 저장하면 MP4 파일로 다운로드됩니다. 확장 프로그램이나 동영상 다운로드 사이트는 카카오에서 스트리밍 방식을 바꾸면 언제라도 막힐 수 있습니다.
3. m4s 파일을 다운로드 (복잡함, 빠름)
네이버 TV는 HLS의 TS 파일로 스트리밍을 하고 있지만, Kakao TV 동영상은 MPEG DASH의 m4s 스트리밍으로 서비스하고 있습니다. 기술적인 내용은 위키 백과를 참고해주세요. 간단하게 요약하면 다음과 같고, 포스팅 마지막에 Batch 파일을 공유했으니 참고하시면 될 것 같습니다.
- 네이버 TV: HLS (Http Live Streaming), ts와 m3u8 포맷 사용
- 카카오 TV: Mpeg4 DASH (Dynamic Adaptive Streaming over HTTP), m4s 포맷 사용
TS 파일은 비디오와 오디오가 합쳐진 작은 파일 단위 스트리밍이 되지만, m4s 파일은 Video와 Audio 파일을 각각 별도의 스트리밍으로 파일을 내려보내고, 초기 파일에 Audio와 Video 파일 디코딩 track 정보를 포함하고 있습니다. 그래서 카카오 TV에서 다운로드해야 하는 파일은 아래와 같이 4종류입니다. 첫 단계로 4 종류의 파일을 각각 다운로드하고 Video.m4s 파일과 Audio.m4s 파일로 합집니다. 두 번째 단계는 ffmpeg을 사용해서 동영상을 MP4 파일로 트랜스코딩하고, 트랜스코딩한 MP4 파일을 다시 Audio 파일과 합치게 됩니다.
카카오 TV 동영상 m4s 파일 구성
- Audio Init.m4s 파일
- Audio 스트리밍 파일: [000~999].m4s 파일
- Video Init.m4s 파일
- Video 스트리밍 파일: [000~999].m4s 파일
카카오 TV 동영상 m4s 파일 다운로드 방법 요약
카카오 TV 동영상 다운로드하는 방법은 아래와 같습니다.
- 카카오 TV 동영상 Audio와 Video의 m4s 파일 URL 확인: Chrome 개발자 메뉴의 Network 메뉴에서 "m4s" 필터링
- Audio/Video init 파일과 작은 스트링 파일 다운로드하기: curl 명령어 사용
- Audio/Video의 작은 단위의 m4s를 합쳐 하나의 m4s 파일로 만들기: copy /b 명령어 사용
- Video m4s 파일을 Video.mp4 파일로 transcoding: ffmpeg 사용
- Video.mp4 파일과 Audio.m4s 파일을 합치기: ffmepg 사용
카카오 TV 동영상 Audio와 Video의 m4s 파일 URL 확인: Chrome 개발자 메뉴의 Network 메뉴에서 "m4s" 필터링
3.1 카카오 TV 동영상 URL 확인
카카오 TV의 동영상 URL은 kibua20.tistory.com/79설명한 동영상의 URL을 확인하는 방법과 동일합니다. URL은 무한정 유효한 것이 아니고, 일정 시간이 지나면 Access 권한이 만료되고 URL이 변경됩니다.
- 다운로드하고자 하는 동영상의 Web page에 접속해서 동영상 재생 (화면 해상도 선택 가능)
- Chrome 개발자 메뉴(F12) 화면에서 Network 메뉴 선택
- 동영상을 URL을 확인하기 위해서 "m4s"로 필터링 선택
카카오 TV의 동영상 URL은 아래와 같습니다.
Audio 파일 URL
Init 파일: https://vsa.play.kakao.com/vod/(중략)/128-44100_init.m4s?px-time=160241(중략)/vhs
Stream 마지막 파일: https://vsa.play.kakao.com/vod/(중략)/128-44100_000188.m4s?px-time=160241(중략)/vhs
Video 파일 URL
Init 파일: https://vsa.play.kakao.com/vod/(중략)/HIGH4_init.m4s?px-time=160241(중략)/vhs
Stream 마지막 파일: https://vsa.play.kakao.com/vod/(중략)/128-44100_000188.m4s?px-time=160241(중략)/vhs
3.2 카카오 TV 동영상 다운로드 - Curl 명령어 사용
Window와 리눅스에 기본 설치되는 tool인 curl을 사용해서 동영상을 다운로드 방법을 설명합니다. curl은 http, https, ftp 등 다양한 protocol을 지원하며, 연속된 URL을 다운로드하기 위해서는 "[start-end]" 연산자를 사용할 수 있습니다. curl 명령어 사용 방법은 링크를 참조해주세요.
예제)
$ curl "https://example_url/[000001-000188].m4s" -o "#1.m4s"
→ https://example_url/000001.m4s~000188.m4s 까지 연속적으로 접속해서 response 결과를 000001.m4s ~ 000188.m4s로 저장
3.2.1. Audio 파일 (m4s) 다운로드
① Init 파일 다운로드: 128-44100_init.m4s URL 파일을 audio 폴더의 init.m4s로 저장
② Audio Stream 파일 다운로드: (시작 번호: 0, 마지막 번호: 188인 경우)
URL: 128-44100-000188.m4s 파일의 URL을 Copy & Paste 후에 128-44100-[000000-000188].m4s로 변경
output 위치 지정: -o ".\audio\#1.m4s" --> audio 폴더에 000000.m4s ~ 000188.m4s 파일로 저장
명령어
curl "https://vsa.play.kakao.com/vod/rvst2axy846krhz8jz76mk6f3/vhs/a_t0_96-44100/96-44100_init.m4s?px-time=1602511073&px-hash=0bf0bc7ecc2ca5486e3ed3a334b86299&px-path=%2Fvod%2Frvst2axy846krhz8jz76mk6f3%2Fvhs%2F&credential=TuMuFGKUIcirOSjFzOpncbomGFEIdZWK&expires=1602514673&signature=eUfvEU6yhdOETrRkShro9EhCHEI%3D&prefix=/dna/kamp/vod/rvst2axy846krhz8jz76mk6f3/vhs" -o ".\audio\init.m4s"
curl "https://vsa.play.kakao.com/vod/rvst2axy846krhz8jz76mk6f3/vhs/a_t0_96-44100/96-44100_[000000-000188].m4s?px-time=1602511073&px-hash=0bf0bc7ecc2ca5486e3ed3a334b86299&px-path=%2Fvod%2Frvst2axy846krhz8jz76mk6f3%2Fvhs%2F&credential=TuMuFGKUIcirOSjFzOpncbomGFEIdZWK&expires=1602514673&signature=eUfvEU6yhdOETrRkShro9EhCHEI%3D&prefix=/dna/kamp/vod/rvst2axy846krhz8jz76mk6f3/vhs" -o ".\audio\#1.m4s"
3.2.2. Video 파일 (m4s) 다운로드
① Init 파일 다운로드: HIGH4_init.m4s URL 파일을 video폴더의 init.m4s로 저장
② Video Stream 파일 다운로드: (시작 번호: 0, 마지막 번호: 188인 경우)
URL: HIGH4_000188.m4s 파일의 URL을 Copy & Paste 후에 HIGH4_[000000-000188].m4s로 변경
output 위치 지정: -o ".\video\#1.m4s" --> video 폴더에 000000.m4s ~ 000188.m4s 파일로 저장
명령어:
curl "https://vsa.play.kakao.com/vod/rvst2axy846krhz8jz76mk6f3/vhs/v_t0_HIGH4/HIGH4_init.m4s?px-time=1602511073&px-hash=0bf0bc7ecc2ca5486e3ed3a334b86299&px-path=%2Fvod%2Frvst2axy846krhz8jz76mk6f3%2Fvhs%2F&credential=TuMuFGKUIcirOSjFzOpncbomGFEIdZWK&expires=1602514673&signature=eUfvEU6yhdOETrRkShro9EhCHEI%3D&prefix=/dna/kamp/vod/rvst2axy846krhz8jz76mk6f3/vhs" -o ".\video\init.m4s"
curl "https://vsa.play.kakao.com/vod/rvst2axy846krhz8jz76mk6f3/vhs/v_t0_HIGH4/HIGH4_[000000-000188].m4s?px-time=1602511073&px-hash=0bf0bc7ecc2ca5486e3ed3a334b86299&px-path=%2Fvod%2Frvst2axy846krhz8jz76mk6f3%2Fvhs%2F&credential=TuMuFGKUIcirOSjFzOpncbomGFEIdZWK&expires=1602514673&signature=eUfvEU6yhdOETrRkShro9EhCHEI%3D&prefix=/dna/kamp/vod/rvst2axy846krhz8jz76mk6f3/vhs" -o ".\video\#1.m4s"
3.2.3. Audio/Video 파일 합치기
Audio/Video의 m4s 조각 파일을 합쳐서 하나의 m4s 파일로 만듭니다. 결과적으로 audio.m4s 파일과 video.m4s 파일을 생성합니다.
명령어:
copy /b .\audio\init.m4s+.\audio\0*.m4s audio.m4s
copy /b .\video\init.m4s+.\video\0*.m4s video.m4s
3.2.4. Video 파일을 m4s에서 mp4로 transcoding
ffmpeg를 사용해서 m4s 조각 파일을 합쳐서 하나의 m4s 파일로 만듭니다. ffmpeg을 링크에서 다운로드하고 압축을 풀면 사용 가능합니다.
명령어:
ffmpeg -i video.m4s -c:a copy video.mp4
3.2.5. Video mp4 파일과 Audio.m4s 파일 합치기
Video MP4 파일을 Audio m4s 파일과 합칩니다.
명령어:
ffmpeg -i video.mp4 -i audio.m4s -c:v copy -c:a copy video_audio_merged.mp4
3.2.6. 하나의 윈도우 batch 파일로 만들기
앞에서 설명한 내용을 하나의 batch 파일로 만들면 아래와 같습니다. Batch 파일에서 각 동영상에 맞는 ① Audio의 URL, ② Audio 스트림의 마지막 번호, ③ Video 파일의 URL, ④ Video 파일의 마지막 번호를 수정하면 사용할 수 있습니다.
앞에서 설명한 내용에 audio 폴더, video 폴더를 만들고, 중간에 생성한 파일을 삭제했습니다.
mkdir .\audio
mkdir.\video
curl "https://vsa.play.kakao.com/vod/rvst2axy846krhz8jz76mk6f3/vhs/a_t0_96-44100/96-44100_init.m4s?px-time=1602511073&px-hash=0bf0bc7ecc2ca5486e3ed3a334b86299&px-path=%2Fvod%2Frvst2axy846krhz8jz76mk6f3%2Fvhs%2F&credential=TuMuFGKUIcirOSjFzOpncbomGFEIdZWK&expires=1602514673&signature=eUfvEU6yhdOETrRkShro9EhCHEI%3D&prefix=/dna/kamp/vod/rvst2axy846krhz8jz76mk6f3/vhs" -o ".\audio\init.m4s"
curl "https://vsa.play.kakao.com/vod/rvst2axy846krhz8jz76mk6f3/vhs/a_t0_96-44100/96-44100_[000000-000188].m4s?px-time=1602511073&px-hash=0bf0bc7ecc2ca5486e3ed3a334b86299&px-path=%2Fvod%2Frvst2axy846krhz8jz76mk6f3%2Fvhs%2F&credential=TuMuFGKUIcirOSjFzOpncbomGFEIdZWK&expires=1602514673&signature=eUfvEU6yhdOETrRkShro9EhCHEI%3D&prefix=/dna/kamp/vod/rvst2axy846krhz8jz76mk6f3/vhs" -o ".\audio\#1.m4s"
curl "https://vsa.play.kakao.com/vod/rvst2axy846krhz8jz76mk6f3/vhs/v_t0_HIGH4/HIGH4_init.m4s?px-time=1602511073&px-hash=0bf0bc7ecc2ca5486e3ed3a334b86299&px-path=%2Fvod%2Frvst2axy846krhz8jz76mk6f3%2Fvhs%2F&credential=TuMuFGKUIcirOSjFzOpncbomGFEIdZWK&expires=1602514673&signature=eUfvEU6yhdOETrRkShro9EhCHEI%3D&prefix=/dna/kamp/vod/rvst2axy846krhz8jz76mk6f3/vhs" -o ".\video\init.m4s"
curl "https://vsa.play.kakao.com/vod/rvst2axy846krhz8jz76mk6f3/vhs/v_t0_HIGH4/HIGH4_[000000-000188].m4s?px-time=1602511073&px-hash=0bf0bc7ecc2ca5486e3ed3a334b86299&px-path=%2Fvod%2Frvst2axy846krhz8jz76mk6f3%2Fvhs%2F&credential=TuMuFGKUIcirOSjFzOpncbomGFEIdZWK&expires=1602514673&signature=eUfvEU6yhdOETrRkShro9EhCHEI%3D&prefix=/dna/kamp/vod/rvst2axy846krhz8jz76mk6f3/vhs" -o ".\video\#1.m4s"
copy /b .\audio\init.m4s+.\audio\0*.m4s audio.m4s
copy /b .\video\init.m4s+.\video\0*.m4s video.m4s
ffmpeg -i video.m4s -c:a copy video.mp4
ffmpeg -i video.mp4 -i audio.m4s -c:v copy -c:a copy video_audio_merged.mp4
rm video.mp4 audio.m4s video.m4s
batch 파일을 첨부하였습니다. ↓↓↓↓↓↓↓
4. youtube-dl로 mpd 파일을 활용하여 다운로드 (간단함, 빠름)
M4S 파일을 다운로드 방법은 IT 비 전공자 분이 진행하기에는 쉽지 않습니다. MPEG4 Dash의 MPD (Media Presentation Desciption) 파일을 youtube-dl 을 사용하는 방법이 더 편리한 것 같습니다. 상세 내용은 [개발환경/Tips] - 카카오 TV 1080p 동영상 다운로드: MPEG DASH의 MPD 활용을 참고하세요.
- 카카오 Tv에서 다운로드하고자 영상의 'adaptive.mpd' URL의 curl 명령어 확인
- curl 명령어서를 youtube-dl 명령어로 치환
- youtube-dl {mpd_url} 로 다운로드
관련 글
[개발환경/Tips] - 네이버 동영상 다운로드 방법 (동영상과 설명 포함)
[개발환경/우분투] - 우분투 20.04에서 Grub 편집: grub-customizer 와 Grub theme 설정
[개발환경/Tips] - OneDrive를 활용한 파일 공유 방법: URL 생성 및 삭제 방법
[개발환경/윈도우와 WSL] - Windows 10에서 한글 오타 발생 시 조치법
[개발환경/윈도우와 WSL] - WSL 2.0 Global configuration (.wslconfig) 을 통한 성능 향상
[개발환경/윈도우와 WSL] - 윈도우용 MobaXterm - SSH 및 X-Server 지원
[개발환경/Tips] - MediaInfo로 동영상 정보 파악하기
[개발환경/Tips] - Youtube 다운로드 방법 (광고 없는 오픈 소스 기반 tool 사용)
[개발환경/윈도우와 WSL] - [Tips] Windows XP 제품 키로 Windows 10 정품 인증
[개발환경/윈도우와 WSL] - [Tips] Windows 10 에서 화면 캡쳐/녹화 단축키
[개발환경/윈도우와 WSL] - [Tips] Windows 10 에서 PC 시간이 틀린 경우 조치법
[개발환경/Tips] - Microsoft Office 365 '무료'로 사용하기: 우분투 환경에서 학생/교사용으로 무료 등록