이 글에서는 아프리카tv의 동영상 컨텐츠들의 영상 전부, 혹은 일부 시간대만 지정해서 다운로드 받는 방법을 소개한다.
TwitchLink 라는 프로그램이 지금까지 찾아본 오픈소스 중에서는 가장 깔끔하고 라이브 스트리밍 다운로드, 클립및영상 다운로드 등 다양한 기능들을 지원하지만, 아프리카tv 주소 포맷에 대해서는 작동하지 않기 때문에 일단은 이 글을 작성한다.
방식은 트위치 때와 다른 점이 하나도 없다.
다운로드 받고자 하는 영상을 로드한 상태에서 개발자도구 > Network 탭에서 m3u8을 검색해준다.Ctrl+R
을 통해서 새로고침을 하게 되면,
와 같이 m3u8 메타데이터 파일들이 로드된 것을 확인할 수 있는데,
Request URL
을 보면 메타데이터 파일의 위치가 보인다. 해당하는 파일을 확인해보는 것도 좋다. 구성은 이전 트위치 글 때와 비슷하다.
풀 영상을 다운로드 받는 가장 쉬운 방법은 해당 m3u8 파일의 주소를 복사한 뒤, Jdownloader2
를 이용하는 방법이다. 사용법은 다른 블로그 글에서 찾아볼 수 있다.
그러나 풀 영상을 원본 화질로 받는 것은 용량을 너무 많이 요구한다. 따라서 내가 원하는 부분만을 다운로드 하고싶을 수 있다. 한 가지 방법은, 유저 클립을 생성한 뒤 위의 방법을 클립에 대해서 그대로 적용하는 방법이다. 하지만 역시나 클립의 길이에 제한이 있고, 애매한 시간 대 (10분~20분) 정도의 영상만 다운로드 하고 싶다면 불편한 점이 남아있다. 그래서 아주 간단한 스크립트 하나를 공유한다. m3u8 확장자 파일을 열어보게 되면,
위와 같이 구성되어있는데, 트위치 때와 조금 다른 점은 .ts파일로 분할되어있는 길이가 대략 3초 정도라는 것이다.
import requests
from tqdm import tqdm
def string_to_time(time_str):
splitted = time_str.split(':')
try:
return (int(splitted[0]), int(splitted[1]), int(splitted[2]))
except:
print("Your time format must be Hours:Minutes:Seconds")
def time_to_idx(time_tuple):
h, m, s = time_tuple
return (3600 * h + 60 * m + s) // 3
m3u8_url = input("Input m3u8 original url: ")
start_time = input("Input clip start time: ")
end_time = input("Input clip end time: ")
fname = input("Input output file name: ")
start_idx = time_to_idx(string_to_time(start_time))
end_idx = time_to_idx(string_to_time(end_time))
comb_start_idx = m3u8_url.find('playlist.m3u8')
general_url = m3u8_url[:comb_start_idx]
with open(fname, "wb") as ofile:
for i in tqdm(range(start_idx, end_idx)):
full_url = general_url + f'seg-{i}.ts'
data = requests.get(full_url).content
ofile.write(data)
메타데이터에서 읽은 정보를 바탕으로
1. m3u8 파일을 받아올 원본 url 주소
2. 동영상에서 저장하고 싶은 부분의 시작 시간 (예시: 00:40:30)
3. 저장하고 싶은 부분의 끝나는 시간 (예시: 00:46:38)
을 입력하게 되면, 위의 스크립트를 통해서 해당하는 부분만 다운로드 받을 수 있다. 사실 메타데이터를 전부 읽어서 시간대 계산을 정확하게 하는 것이 맞겠지만 영상이 대략 3초정도로 잘려있다는 것을 통해서
time_to_idx
함수가 정확한 계산을 하고 있지는 않은데 원한다면 그 부분만 변경해주면 된다. 위의 python script를 실행하면 다운로드 받을 수 있다.
마지막으로 남은 부분은 동영상 인코딩 파트이다. 이렇게 분할 동영상 파일들을 원하는 부분만 합치고 나면, 플레이어들에서 재생가능한 .ts파일의 동영상이 나오는데 .mp4 같은 포맷보다 용량이 크다. 유저가 ffmpeg 같은 인코더를 사용하여 .mp4 형식으로 인코딩을 직접할 수는 있겠지만 Jdownloader2나 Twitchlink 같이 패키징이 되어있는 소프트웨어를 사용할 때보다 속도가 현저히 느린 것을 알 수 있는데, 해당 소프트웨어들에서 어떻게 인코딩을 진행하는 지에 대해서는 아직 잘 알지 못한다. 시간이 허락한다면 Twitchlink의 코드를 읽어보거나 코드 기여를 통해서 AfreecaTV 주소에 대해서도 동작하도록 하는 것이 가장 깔끔한 구현이 될 것 같다.
'게임, 트위치' 카테고리의 다른 글
라이엇 계정 잠금 (0) | 2024.05.12 |
---|---|
치지직 동영상,클립 다운로드 (5) | 2024.03.16 |
아프리카 댓글 하이라이트 링크 만들기 (0) | 2022.12.23 |
트위치 포인트 자동 파밍 (Twitch point miner) (0) | 2022.06.15 |
Blackcomb 마우스 커서 (0) | 2022.05.24 |