송출이 불안정한 스트리머의 방송을 최소한의 딜레이로 녹화하도록 만들어진 녹화 스크립트입니다. 호스팅 채널을 녹화하지 않고, TS파일을 직접 저장합니다.
이 스크립트는 24/7 상시감시 및 녹화를 위해 준비된 스크립트이고 설정 과정에서 약간의 프로그래밍적 지식이 필요합니다. 단타성 녹화를 원한다면 더 단순한 거 찾아다 쓰십쇼.
치지직용 스크립트를 테스트하고 있습니다. 여러분의 많은 기여가 필요합니다 🙏🙏
윈도에서도 작동은 하겠지만, 진짜 봇을 구축하려면 이 글의 작성자는 리눅스를 사용하는 걸 추천합니다. 리눅스를 쓰는 이유는, 적어도 얘는 업데이트 있다고 지멋대로 재부팅하지는 않으니까요 (대충 트위치 카파 콘)
python3와 streamlink가 설치되어야 합니다.
- 리눅스: 터미널 창에서
sudo apt install python3
(혹은 자신의 리눅스 배포판에 맞는 명령어) 를 실행해 파이썬3을 설치하세요. 윈도: 이 주소로 이동해 파이썬3를 설치하세요. - PIP을 사용해
pip install --user streamlink
를 실행하여 streamlink를 설치해주세요. (이대로 하지 않으면 엄청 구버전이 설치됩니다) - 터미널 창에서
streamlink --version
을 입력해 설치된 버전을 확인해주세요.4.2.0
이상 버전이어야 합니다!
트위치 API의 정책 변경으로 인해 OAuth 토큰이 필요하고, 이를 위해 Client ID를 발급받아야 합니다.
- 녹화 스크립트 소스코드를 다운받아 적당한 곳에 저장합니다.
- 트위치 개발자 콘솔에 접속해 앱을 먼저 등록합니다. (녹화 스크립트도 트위치의 시점에서는 제삼자 앱이기 때문에 토큰 발급을 위해 등록이 필요합니다)
Name란에는 twitch라는 단어를 포함하지 않는 적당한 이름 (예: my_streaming_tool_test), OAuth Redirect URLs란에는
http://localhost
, Category는 적당한 것을 선택하고 MrDestructoid이(가) 아님을 인증한 다음 Create를 눌러주세요 - Developer Applications 하에 방금 등록한 앱 이름이 있을 것입니다. 우측의 Manage를 누릅니다.
- Client ID를 복사해 녹화 스크립트의
TWITCH_API_CLIENT_ID
에 붙여넣기해 주세요. - New Secret 버튼을 눌러 Client Secret을 발급받아 녹화 스크립트의
TWITCH_API_CLIENT_SECRET
에 붙여넣기해 주세요. - 수정된 녹화 스크립트를 저장해 주세요.
여기서 발급된 Client ID와 Client Secret은 개인에게 발급된 비밀번호와 같은 것으로 타인과 공유하여서는 안 됩니다.
RECORDING_SAVE_ROOT_DIR
: 녹화본이 저장되는 루트 디렉토리를 지정합니다. NAS에서 구동시키는 경우/srv/nfs/twitchrecords
정도가 적당하겠지요. 녹화 스크립트가 저장돼있는 디렉토리를 사용하려면./
를 입력해주세요.FILE_NAME_FORMAT
과TIME_FORMAT
: 녹화되는 파일의 이름 형식을 지정합니다. 기본값은 이전 버전 녹화 스크립트와 동일하게 설정돼있습니다.
python 녹화스크립트.py -u 스트리머_아이디
녹화스크립트.py에는 저장된 녹화스크립트의 파일명을 입력하고 (.py는 떼면 안 됩니다!) 스트리머_아이디에는 녹화하고자 하는 스트리머의 이름이 아닌 스트리머의 트위치 아이디를 입력합니다. (예: 똘똘똘이_
→ jungtaejune
)
위의 명령어를 시스템이 부팅되면 자동으로 실행되도록 합니다. 윈도 사용자는 윈도용 bat 파일을 만들어 시작프로그램에 등록하면 되고, 리눅스 사용자는 사용하는 배포판에 맞게 설정해주세요. (.bashrc에 등록하기보다는 자신이 사용하는 데스크탑 환경 — KDE라던지 GNOME이라던지 — 에서 제공하는 방법을 사용하십시오)
위와 같이 세팅한 후 재부팅하면 자동으로 녹화가 이루어질 겁니다.
Streamlink를 업그레이드하려면 터미널 창에서 pip install --user --upgrade streamlink
를 실행하여 주세요.
그냥 다시보기만 할 때는 후처리가 필요 없습니다. 그냥 TS파일 그대로 재생해서 보면 됩니다.
-트-가 -트-해서 (혹은 야방이어서) 녹화가 2개 이상으로 조각날 때가 있습니다. 그럴 때는 TS파일을 그냥 합쳐버리면 됩니다: cat 영상조각1.ts 영상조각2.ts 영상조각3.ts ... > 온전한영상.ts
이 글은 다음의 위치에서도 볼 수 있습니다:
- ImportError: no module named requests
- 터미널 창에서
pip install --user requests
를 사용해 모듈을 설치해 주세요.
- 터미널 창에서
- unrecognized arguments: twitch.tv/
- 아래의 알려진 버그 — Windows에서 Streamlink 2.x를 3.x로 업그레이드 시 주의할 점을 봐 주세요.
녹화 스크립트를 이 코드로 바꾸어 시도해 보세요. (외부 API를 사용해 일본 서버에서 m3u8 링크를 받아와서 작동합니다. Yoon0618님 제공)
Streamlink가 2.x버전에서 3.0으로 업그레이드 되면서 기본설정이 바뀌었는데, 업그레이드 후 rtmp-rtmpdump 오류 혹은 unrecognized arguments: twitch.tv/
오류가 발생할 수 있습니다. 이런 경우에는 Streamlink를 업그레이드한 다음, Streamlink의 설정파일을 만져줘야 합니다.
윈도키+R → %APPDATA%
입력후 엔터 → streamlink 폴더 → config 파일 메모장으로 열기 → rtmp-rtmpdump
가 있는 줄 삭제 (한 개가 아닙니다!)
자세한 정보는 아래에서 확인할 수 있습니다:
Twitch 쪽에서 화질 옵션을 이상한 형식으로 반환하는 문제가 있기 때문에 간헐적으로 1080p로 송출중인 방송이 720p로 녹화되는 경우가 간혹 있습니다. 이러한 경우에는 Streamlink를 4.2.0 이상 버전으로 업데이트해 주세요.
자세한 정보는 아래에서 확인할 수 있습니다:
일본 우회버전으로 잘 사용하고 있습니다.\
그런데 최근들어 다운로드된 영상이 깨지는 경우가 좀 심각하게 많아지기 시작했습니다. 영상 중간중간 오디오는 정상 재생되지만 영상이 약 1분여간 날아가는 경우도 생기고, 심한경우 영상의 플레이타임이 늘어지는 버그도 생기기도 합니다. 타 프로그램으로 영상복구를 돌려도 영상 싱크가 밀립니다. 이에 대한 해결방법이 있을까요?
그리고 트위치에서 구독하고 있는 스트리머의 영상을 다운받는 경우에도 종종 광고 대체영상이 삽입되곤 합니다. 코드에 넣는 토큰이랑 개인 인식코드는 다른것인가요? 아니면 단순 버그로 봐야할까요?
해당문제는 구독 이후 토큰 재발행으로 해결되었습니다. 같은 문제를 겪고 계실 분이 있을까 해서 남겨봅니다.
위 문제 해결 이후 새로운 문제가 생겼습니다. 모든 영상이 초반 10분이 완전히 망가져 복구가 불가능합니다. 이후 영상은 전부 멀쩡히 재생이 됩니다.
스트림링크 버전은 5.0.1로 확인됩니다. 업그레이드 명령어를 입력해도 다운로드 이후 계속 5.0.1로 표기되는 상황입니다.
현재 인텔 8세대, 16기가 램, rax20 공유기 사용중입니다. 따로 오버클럭이나 공유기 프록시 등은 설정하지 않았습니다. 혹시 오류에 하드웨어 사양이 포함되면 좋을까 해서 남겨봅니다.
초보라 질문을 제대로 한 것인지 조차 잘 모르겠습니다. 죄송합니다.