AiPE

1. Laftel Downloader 구상 및 관련 법령 조사 본문

[XiBBaL] Development Project/Laftel Downloader

1. Laftel Downloader 구상 및 관련 법령 조사

Oshimaker XiBBaL 2023. 2. 1. 21:12
반응형

국내 애니 스트리밍 서비스 플랫폼인 라프텔에서 영상을 다운받을 수 있는 라프텔 영상 다운로더를 개발해보려고 한다.

https://laftel.net/

 

https://laftel.net/

 

laftel.net

 

 

 

1. 개발 목표

제목 그대로 라프텔의 영상을 .mp4파일로 다운로드 해 "소장" 하는 것이 목표이다.

 

영상을 단순히 소장만 하고 혼자 즐길거지, 누구한테 나눠줄 생각은 절대 없다.

 

 

 

 

2. 이론적인 방법론

먼저 가능한 이론적인 방법을 제시해보겠다.

 

프로그램 동작 FlowChart

 

  • 모든 언어는 Python을 기반으로 하려고 한다. 필요에 따라 부분 부분 다른 걸 쓸수도 있지만 일단은 최대한 Python만으로 끝내보려고 한다.
  • 라프텔 크롬 플레이어에서 자막(Caption이라고 표시되더라)을 껐다 켰다 할 수 있는 것으로 보아 라프텔 서버에서 받아 오는 영상자체에는 자막이 포함되어 있지 않다. 따라서 우리가 서버측에 요청에서 받아오는 영상에도 자막은 없다.  자막 파일은 따로 다운로드 해서 나중에 합치자. 자막은 꼭 라프텔이 아니라 다른 사이트에서 받아와도 된다.

 

 

  • 라프텔 서버와 클라이언트의 통신은 MPEG-DASH를 이용한다. 뭔지 궁금하면 잘 설명해놓은 글이 있으니 참고하자. https://www.cloudflare.com/ko-kr/learning/video/what-is-mpeg-dash/
  • MPEG-DASH 방식에서는 서버가 클라이언트에게 영상 전체의 정보를 담고 있는 마스터파일인 init파일 1개와 영상 조각인 segment파일 수십~수백개를 보낸다. segment파일의 이름은 seg-1.m4s seg-2.m4s ~~ seg.239.m4s 이런식이다. segment파일이 있더라도 init파일이 없으면 정상작동하지 않는다.
  • 라프텔은 MPEG-DASH 중에서도 원본 파일을 init.mp4와 segment.m4s파일로 쪼개는 방식을 이용한다. 이론상 이 파일들을 어떻게 다 합쳐주면 원본 파일로 변환할수 있다. (다른 예시로는 .. 카카오TV가 init.m4s파일과 segment.m4s로 쪼개는 방식을 이용한다.)

 

 

  • 크롬 개발자도구(F12)에 보면 Network탭에서 파일을 확장자별로 분류할 수 있다. .m4s파일의 개수는 영상의 길이에 따라 다르다. 23분가량의 영상은 239개, 52분 가량의 영상은 528개이다. 다행인 것은 같은 시리즈는 방영 시간이 거의 비슷해서 개수 변동이 거의 없다는 것이다. 
  • init파일이 m4s형식이 아니라 mp4형식으로 제공되는데, segment파일과 init파일의 확장자가 달라서 골치아프다
  • Network탭에서 하나의 Element를 클릭하면 우측 탭에서 Request URL을 확인할 수 있다. 이 Request URL은 클라이언트가 서버에 해당 Element를 요청할 때 쓰는 URL이다. 이 Reuqest URL을 이용해 엘리멘트를 직접 다운받을 수 있다.

크롬 개발자도구 >> Request URL 확인

  • 다운로드는 curl명령어를 사용하겠다. 윈도우 cmd에서 사용할 수 있고, 파이썬에서는 os.system("curl url")의 형태로 동작시킬 수 있다.

 

  • 다운받은 init과 segment를 합치는 것은 ffmpeg라는 인코딩 툴을 이용할 생각이다. 아직은 ffmpeg에 대한 이해가 부족해서 여러 가지 실험해 보고 확실히 되는 방법을 찾아야 한다.

 

  • 소리 없는 비디오인 full_video.mp4와 오디오 파일인 full_audio.m4s파일을 합친다. .mp4비디오에 .m4s오디오는 별도 인코딩 없이 입혀지는 것 같은데 이것도 실험해봐야 한다. 이후 어딘가에서 구해온 자막 파일을 합친다. 자막 파일은 따로 보관하고 싶을 수도 있어서 합칠지 말지 사용자가 결정하게 하려고 한다.
  • 이후 최종 영상을 제외한 작업에 사용했던 모든 파일 (init.mp4 segment.m4s 등등)을 삭제하고 최종 영상 파일 이름을 설정한다.

 

이 방법은 약간의 수정을 거치면 라프텔 뿐만 아니라 MPEG-DASH 중 init.mp4와 segment.m4s 로 파일을 조각내 송신하는 모든 사이트에 적용할 수 있겠다. 하나 만들어놓으면 다른 사이트의 다운로더를 제작하는 것도 쉬워질 것이다.

 

 

 

 

3. 관련 법령 조사

*법에 대해서는 공부해나가는 중입니다. 틀린 내용이 있다면 차차 수정해가겠습니다.

 

 

일단 라프텔에서의 영상은 아래의 두 가지 형태로 나뉜다.

 

1. 광고를 시청하면 무료로 끝까지 볼 수 있게 해주는 형태

2. 멤버쉽 가입을 요구하는 형태 ㅡ 멤버쉽이 없으면 전반 3분만 시청 가능함. 그 뒤로는 시청이 불가능.

 

라프텔 모바일 앱에는 자체적으로 다운로드 기능을 지원한다. 물론 완전한 형태의 다운로드는 아니고 라프텔 앱 내장 플레이어만으로 재생이 가능한 형태로 다운로드 된다. PC에서는 라프텔  다운로드를 지원하지 않는다.

 

 

 

3.1.

1번 형태의 경우 애초에 광고비를 받고 모든 이에게 무료로 스트리밍 하는 것이기에, 유튜브 등의 플랫폼과 동일한 취급이 가능하다.

공표된 저작물을 개인 소장용으로 복제하는 행위는 저작권 침해에 해당하지 않는다. 타인의 저작물을 이용하기 위하여는 원칙적으로 저작재산권자에게 이용 허락을 받아야 한다. (저작권법 제46조).

이 경우, 영상을 다운로드 하여 소장하는 것은 형사상 처벌을 받지 않는다. 이 영상을 유포하거나 영리 목적으로 쓰지 않으면 된다. 라프텔 다운로더의 목적은 어차피 애니메이션을 우리가 소장하는 것이기 때문에 1번 형태의 영상에 대해서는 위법성이 없다.

 

 

 

3.2.

2번 형태의 경우 해당 영상을 다운로드 할 경우 위법일 가능성이 상당히 높다. 라프텔 멤버쉽을 통해 제공되는 영상은 광고가 없으므로, 이를 멤버쉽이 없는 상태에서 다운로드 한다면 수익에 영향이 가기 때문에 문제가 생길 것이다. 실질적인 처벌이 어찌어찌 안 되더라도 라프텔 측에서 문제 제기를 할 가능성이 굉장히 높다. 여기에서의 문제 제기는 "고소" 보다는 "메일을 통한 경고"나 "IP차단"에 가까울 듯.

 

눈치가 빠른 사람은 앞의 이론적인 방법에 대한 설명을 듣고 깨달았겠지만, "3분 무료보기"라는 시스템이 존재하는 한 로그인 없이 멤버쉽 전용 영상 다운이 가능할 확률이 있다. 물론 단순히 curl명령어만으로 다운이 될 것 같지는 않고, 브라우저의 쿠키 설정 등 여러가지를 신경써야겠지만, 미로그인 상태에서도 Request URL 자체를 알아내는 데는 문제가 없기 때문에 가능성은 열려있다.

 

멤버쉽 전용 영상을 다운하려고 요청하면 어떻게 될 지 조금 더 조사해보아야겠다.

 

 

 

3.3

만약 라프텔 멤버쉽을 구매한 후 원래는 비공개였던 다운하면 어떨까? 이 경우는 1번 경우와 같은 이유로 형사처벌을 받지 않을 것이라고 "예상한다." 물론 라프텔 측에서 정책위반으로 IP차단을 먹일 수는 있다. 속도 조절을 잘 해가면서, 혹은 VPN을 사용해 다운 받는 것이 안전해 보인다.

 

저작권법은 저작권자가 고소를 해야 처벌이 가능하다. 우리는 어차피 라프텔 측 서버에서 정보를 받아오는 것이기 때문에 라프텔은 우리가 정보를 빼가고 있다는 것을 알 수 밖에 없다. 따라서 라프텔 측에서 문제제기를 할 가능성도 충분하다고 생각한다.

 

실제로 모 웹툰 사이트에서 웹툰을 다운받다가 일시적으로 IP차단을 먹은 적이 있다. 불법 웹툰 서비스 사이트에서 자기네들 사이트에 올릴 웹툰을 긁어가는 줄 알았던 것 같다. 이런 IP차단을 방지하기 위한 대책으로는, headers정보 똑바로 넣기, 일반 사용자 로딩 속도와 비슷하게 속도 조절 하기 등이 있겠다. 적절한 방법들을 나중에 좀 더 구체적으로 생각해보려 한다.

 

 

 

3.4.

결론적으로, 무료 공개된 영상을 다운하는 것은 형사처벌이 불가능하고, 유료/비공개 영상의 경우 다운하면 문제가 될 수 있다. 안전하게 하고 싶으면 멤버쉽을 구매하자.

기업이 개인을 상대로 얼마나 강경대응할지는 모르겠지만, 라프텔 다운로더를 만들어놓은 사람이 아무도 없는 것으로 보아 어느 정도 대응을 하리라 생각할 수 있다. 이 글도 라프텔측에서 문제삼을 수도 있겠다. 

 

 

 

 

 

4. 개발 계획

일단 앞의 FlowChart에 나온 대로 순서대로 만들 생각이다.

 

내가 생각하기에 고생할 만한 포인트는 4가지이다.

  1. Request URL을 파이썬으로 어떻게 읽어들일 것인가? Selenium을 좀 다루어 봤지만 개발자도구에 접근하는 방법은 들어본적이 없다.
  2. 영상 길이마다 매번 다른 .m4s개수를 어떻게 처리할 것인가? 개수가 일정하면 for in range(1, 240)으로 돌리려고 했는데 길이가 매번 달라서야 원 .. 영상 길이를 인식하는 코드를 짜야 하나?
  3. init.mp4와 segment.m4s의 서로 다른 포맷을 합치는 곳에서 상당히 고생할 듯 하다. 파일 분할 방식에 대해 좀 더 심도깊게 공부해서 이해해야 할 듯.
  4. 크롬 개발자도구 Network탭에 유명한 자막 파일 형식은 .vtt .srt .smi를 모두 검색해봤는데 아무것도 안 나온다. 자막을 어떻게 다운받아야 하나..

 

뭐 아무튼 순서대로 만들어보겠다. 

 

반응형