본문 바로가기
개발환경/Tips

지상파 3사(MBC/KBS/SBS) TV 다시 보기(VOD) 동영상 다운로드 방법

by Kibua20 2021. 2. 25.

지상파 3사의 TV 다시 보기 VOD 동영상 다운로드 방법을 설명합니다.  무료 콘텐츠는 확인을 했고, 유료 동영상은 확인을 못했습니다. 유료 계정이 있으신 분은 테스트 결과를 공유해주시면 감사드리겠습니다.

 

인터넷을 통해서 동영상을 Streaming 방식은 크게 HLS(Http Live Streaming)과 MPEG Dash 2가지 방식 중 하나입니다. 지상파 3사(MBC/KBS/SBS) TV 다시 보기와 네이버는 HLS를 사용하고 있고, 카카오TV는 MPEG Dash 방식을 사용하고 있습니다. 이전 포스팅한내용은 아래 링크를 참고해주세요. 

 

[개발환경/Tips] - 네이버 동영상 다운로드 방법 (동영상과 설명 포함)

[개발환경/Tips] - 카카오 TV 1080p 동영상 다운로드: MPEG DASH의 MPD 활용

[개발환경/Tips] - 카카오 TV 동영상 다운로드: m4s 파일 다운로드 방법

[개발환경/Tips] - youtube-dl로 Youtube에서 MP3 다운로드 시 아티스트와 앨범 아트(meta data) 포함시키는 방법

[개발환경/Tips] - Youtube 다운로드 방법 (광고 없는 오픈 소스 기반 tool 사용)

 

 

HLS(Http Live Streaming) 동작 방식

HLS은 하나의 동영상을 작은 크기의 segment로 나눠 Http를 통해서 전송하고 합니다.  작은 segment 정보 리스트 "확장 M3U list (M3U8)"에 저장하여 클라이언트에게 전달합니다.  작은 Segment 단위는 TS(Transport Stream) 포맷을 사용하며 Video와 Audio codec을 모두 포함하고 있습니다.

 

HLS를 사용하는 지상파(MBC/KBS/SBS) 3사의 동영상은 작은 파일의 TS 파일을 다운로드하고 이를 하나의 파일로 합치면 일반 동영상 플레이어에서 재생 가능합니다.  만일 TS 파일을 디코딩할 수 없다면 MPEG4 container로 변경해서도 무방합니다. 

 

 

HLS를 사용하는 지상파(MBC/KBS/SBS) 3사의 동영상 다운로드: 작은 파일의 TS 파일을 다운로드하고 이를 하나의 파일로 합침

 

 

MBC/KBS/SBS TV 다시 보기(VOD) 동영상 다운로드 방법 요약

MBC/KBS/SBS TV 다시 보기(VOD) 동영상 다운로드 방법 요약하면 다음과 같습니다 

 

  1. 동영상의 m3u8파일에서 첫 번째 TS 파일과 마지막 TS 파일 이름을 확인한다.
  2. curl로 각각 TS 파일을 일괄 다운로드한다. 
  3. 작은 조각의 TS을 합쳐서 하나의 큰 TS file(merge.ts)로 합친다. 
  4. (필요시)  Merge.TS  파일을  mp4 파일로 변환한다. 

Windows 10에서 사용 가능한 배치 파일은 아래 링크에서 다운로드할 수 있고,  Batch 파일 내용을 보면 쉽게 이해할 수 있습니다. 다른 동영상 다운로드 시 아래 Download script에서 ① 동영상 URL과 ② TS 파일의 list index 만 변경하면 됩니다.  TS 파일은 다운로드하는 프로그램도 있지만 광고와 악성코드 우려가 있어 거의 모든 OS에 기본 설치되어 있는 curl만을 사용했습니다.  

 

 

DownloadScript.bat
0.00MB

 

 

Download script을 설명하면 아래와 같습니다. 

 

# 임시 폴더를 만든다.

mkdir temp

cd temp

# curl 명령어로  00001.ts 파일부터 마지막 00068.ts파일을 다운로드 한다.

# TS 파일의 처음과 마지막 index는 m3u8에서 확인 가능합니다.  아래 예제에서는  00001.ts 와 00068.ts입니다.

# curl명령어 [ ]  연산자와 #1을 통해서 연속된 URL의 동영상을 일괄 다운로드함

#  Windows에서는 URL과 -o (=output) 옵션에 따옴표(")를 꼭 붙어야 함

curl "http://mediafactory.gscdn.kbs.co.kr/vod/2021/02/23/6034e6610768184f3ef49070/video/6034e6610768184f3ef49070_500k_1614080032808_[00001-00068].ts" --output "#1.ts"

 

# Windows 계열: 00001.ts ​~ 00068.ts 파일을 합쳐 하나의 merge.ts로 만든다

copy /b 000*.ts merge.ts

 

# Linux 계열: 00001.ts ​~ 00068.ts 파일을 합쳐 하나의 merge.ts로 만든다.  copy /b 옵션 대신  cat 명령어와 >  연산자 사용

# ls 000*.ts | sort  | xargs cat > merge.ts

 

# Optional: TS to MP4 변환

ffmpeg -i merge.ts -acodec copy -vcodec copy merge.mp4

 

 

동영상의 m3u8 파일 내용 확인

다운로드를 원하는 동영상 웹 페이지에서 Chrome 개발자 메뉴(F12)의 Network Tab을 선택합니다.  웹 페이지를 로딩하면 Chrome에서 다운로드하는 모든 파일이 보일 것이고 이 중에서 Filter를 ".m3u8"로 설정합니다.  동영상 광고도 m3u8 파일을 사용하기 때문에 여러 개가 있다면 가능 나중에 받은 m3u8 파일을 선택하면 됩니다. 

 

동영상의 m3u8 파일을 선택하면 Preview에 내용을 확인할 수 있습니다.  m3u8 파일의 내용 중에서 TS 파일의 첫 번째 파일 이름과 마지막 파일 이름을 확인합니다.  첫 번째 파일 Index는 주로 000001.ts이고 마지막 파일은 index는 동영상의 길이에 따라서 상이합니다. 아래 예제에서는 마지막 index가 _00068.ts 파일입니다. 

동영상의 m3u8 파일 내용 확인

 

 

동영상을 재생하고 있는 상태에서 Filter를 ". ts"로 변경하면 재생하고 있는 작은 ts segment가 보입니다. 임의의 ts 파일을 선택하고 마우스 오른쪽 메뉴에서 Copy - Copy link address를 선택합니다.  TS 동영상의 URL이 클립보드에서 복사되고 이를 일부 수정해서 curl 명령어의 인자로 전달합니다. 

 

동영상의 TS파일을 Link 확인

 

curl로 각각 TS 파일을 일괄 다운로드 

TS 파일의 URL을 확보하면 curl 명령어로 일괄 다운로드합니다.  curl 명령어 명령어 중에서 [ ] 연산자를 사용합니다.  curl 명령어에 대한 설명은 "자주 사용하는 curl 명령어 옵션과 예제"를 참고하세요.  #1은 sequence URL을 의미하고, -o 옵션은 ouput 파일을 지정하

 

아래와 같이 연속된 sqeuence의 URL을 명령어 하나로 해결 가능합니다. 

 

# 각각 TS 파일을 다운로드 

$ curl mediafactory.gscdn.kbs.co.kr/....(중략).....2808_000001.ts --output 00001.ts

$ curl mediafactory.gscdn.kbs.co.kr/....(중략).....2808_000002.ts --output 00002.ts

....

$ curl mediafactory.gscdn.kbs.co.kr/....(중략).....2808_000068.ts --output 00068.ts

 

# 아래와 같이 명령어를 사용해서 한번에 '일괄' 다운로드 합니다.  [] 와 #1을 부분을 잘 수정해야 합니다.

$ curl mediafactory.gscdn.kbs.co.kr/....(중략).....2808_000[001-00068].ts --output 000#1.ts

 

 

curl로 각각 TS 파일을 일괄 다운로드

 

 

다운로드한 작은 조각의 TS 파일 합치기

curl로 다운로드한 ts 파일의 작은 조각을 하나의 파일(merge.ts)로 합치는 과정입니다. Windows에서는  copy /b 옵션을 사용할 수 있고,  리눅스 계열에서는  cat 명령어와 > 연산자를 사용합니다.

 

# For window - 00001.ts ​~ 00068.ts 파일을 합쳐 하나의 merge.ts로 만든다

copy /b 000*.ts merge.ts 

 

 

다운로드한 작은 조각의 TS 파일 합치기 (윈도우)

 

 

# For Linux  - 00001.ts ​~ 00068.ts 파일을 합쳐 하나의 merge.ts로 만든다.   copy /b 옵션 대신  cat 명령어와 >  연산자 사용

$ ls 000*.ts | sort  | xargs cat > merge.ts

 

KBS TV 바로보기에서 다운로드한 merge.ts 파일을 확인하면 360p의 30 fps 동영상입니다.  Video는 AVC, VBR (Variable Bit rate), 8bit depth를 사용하고 있고 Audio는 AAC LC, sampling rate 48kHz, variable bit rate을 사용하고 있습니다. 

 

KBS TV 바로 보기에서 다운로드한 merge.ts 파일

 

TS 파일을 MP4 파일로 변환하기 (필요시)

대부분의 동영상 Player가 TS 파일을 지원하고 있기 때문에 TS 파일만 있어도 호환성에 큰 문제는 없습니다.  혹시라도 TS 파일을 지원하지 않는 동영상 플레이어가 있다면  ffmpeg을 사용하여 MP4 파일로 변환합니다.  Video codec과 Audio codec에는 변화가 없기 때문에 화질/음질의 차이는 없습니다. 

 

 

TS 파일을 MP4 파일로 변환하기

 

 

관련 글

[개발환경/Tips] - 네이버 동영상 다운로드 방법 (동영상과 설명 포함)

[개발환경/Tips] - youtube-dl m4a 다운로드시 에러 조치 방법: "ERROR: AtomicParsley was not found"

[개발환경/Tips] - youtube-dl로 Youtube에서 MP3 다운로드 시 아티스트와 앨범 아트(meta data) 포함시키는 방법

[개발환경/우분투] - 우분투20.04에서 Bluetooth 5.0 USB 동글 설치: Realtek 8716B Chipset

[개발환경/Tips] - Spotify 한국에서 사용하는 방법

[모바일 SW 개발/Android] - Android 스마폰을 PC 화면으로 미러링: Mirroid

[개발환경/Tips] - 카카오 TV 1080p 동영상 다운로드: MPEG DASH의 MPD 활용

[모바일 SW 개발/REST API] - 자주 사용하는 curl 명령어 옵션과 예제

[개발환경/Tips] - 광고 없는 Android 토렌트 앱: LibreTorrent

[개발환경/Tips] - IKnowWhatYouDownload.com에 대한 Torrent 개인 정보 노출 방지법: Socks5 및 익명모드

[개발환경/Google Cloud Platform] - 회사에서 방화벽으로 막혀 있는 사이트 우회 방법: SSH tunneling 과 Socks5 활용

[모바일 SW 개발/REST API] - 외부 망에서 Localhost를 접속하기: ngrok (일부 무료)

[모바일 SW 개발/REST API] - 외부 망에서 Localhost를 접속하기: localtunnel (무료, domain제공)

[모바일 SW 개발/REST API] - 공공 데이터 Open API 사용법: 코로나 확진자 현황 API (sample code)

[블로그 관리/티스토리 블로그 관리] - 파이썬 Selenium을 활용한 네이버 서치어드바이저 URL 입력 '자동화'

[개발환경/우분투] - 21:9 모니터 사용 시 화면 분할 기능 사용하기 (우분투, 윈도우10)

[개발환경/우분투] - 우분투 20.04에서 Grub 편집: grub-customizer 와 Grub theme 설정

 




댓글