$ pip install devine
메모
pip가 PATH 환경 변수에 없는 경로에 대한 경고를 표시하는 경우 즉시 해당 경로를 추가한 다음 열려 있는 모든 명령 프롬프트/터미널 창을 닫습니다. 그렇지 않으면 devine
찾을 수 없으므로 작동하지 않습니다.
짜잔? — 이제 devine
패키지가 설치되었습니다!
이제 명령줄 인터페이스를 사용할 수 있습니다. devine --help
사용해 보세요.
다음은 수동으로 설치해야 하는 프로그램 목록입니다.
.mkv
파일로 다중화하기 위한 MKVToolNix v54+.팁
가능하다면 패키지 저장소에서 이를 설치해야 합니다. Windows의 Winget/chocolatey를 포함합니다. PATH
환경 변수에 바이너리 경로가 자동으로 추가되며 향후 업데이트가 더 쉬워집니다.
중요한
이러한 종속성 중 대부분은 이식 가능한 유틸리티이므로 설치 프로그램을 사용하지 않습니다. Winget/choco/pacman과 같은 패키지 저장소에서 설치하지 않는 경우 현재 작업 디렉터리, Devine 설치 디렉터리 또는 PATH
환경 변수의 바이너리 경로에 넣어야 합니다. 이렇게 하지 않으면 Devine이 바이너리를 찾을 수 없습니다.
먼저 전체 도움말 문서를 보려면 devine --help
를 살펴보세요. 사용 가능한 모든 명령을 나열하고 Devine으로 수행할 수 있는 작업에 대한 자세한 정보를 제공합니다.
다음은 특별한 순서 없이 시작하기를 권장하는 사항에 대한 체크리스트입니다.
devine dl
에서 사용됩니다. ...-NOGRP
에 대한 devine cfg tag NOGRP
. 다음은 살펴볼 수 있는 몇 가지 고급 기능입니다.
구성에 대한 문서는 CONFIG.md 파일에서 확인할 수 있으며, 여기에는 편리한 설정이 많이 있습니다.
CLI 호출에 뭔가를 넣는 것이 지겹다면 한 번 살펴보는 것이 좋습니다!
youtube-dl과 같은 유사한 프로젝트와 달리 Devine은 현재 어떤 서비스도 제공하지 않습니다. 귀하는 자신의 서비스를 개발해야 하며 귀하가 그렇게 할 수 있는 법적 권리가 있는 서비스와 함께 Devine을 사용해야 합니다.
메모
Widevine이나 다른 DRM 시스템을 사용하지 않는 Devine용 서비스를 만든 경우 자유롭게 Pull Request를 만들어 다른 사람이 서비스를 사용할 수 있도록 하세요. youtube-dl(또는 yt-dlp)의 모든 서비스는 둘 다 Unlicense 라이선스를 사용하므로 Devine 저장소에 추가할 수 있으므로 코드를 직접 읽고 포팅하는 것은 합법적입니다.
경고
귀하에게 완전한 법적 권리가 있는 서비스에서만 서비스 코드를 생성하거나 사용하십시오.
서비스는 __init__.py
파일이 있는 폴더로 구성됩니다. 파일에는 폴더와 동일한 이름의 클래스가 포함되어야 합니다. 클래스는 Service 클래스를 상속하고 모든 추상 메서드를 구현해야 합니다. 최종적으로 CLI 인수를 정의하는 cli
라는 새 메서드를 구현해야 합니다.
/devine/services
내에 새 폴더를 만듭니다. 선택한 폴더 이름은 서비스 태그라고 합니다. 이 "태그"는 다양한 코드 검사, Key Vault 데이터베이스의 조회 키 등에 대해 다운로드한 파일의 최종 출력 파일 이름에 사용됩니다.__init__.py
파일을 만들고 Service 클래스를 상속하는 클래스를 작성합니다. 폴더 이름과 정확히 동일하게 이름을 지정해야 합니다. 대소문자를 구분합니다.cli
메서드를 구현하여 CLI 인수를 정의합니다. 이 메서드는 정적이어야 합니다(예: @staticmethod
). 예를 들어 일종의 타이틀 ID를 받기 위한 최소한의 구현 방법은 다음과 같습니다. @ staticmethod
@ click . command ( name = "YT" , short_help = "https://youtube.com" , help = __doc__ )
@ click . argument ( "title" , type = str )
@ click . pass_context
def cli ( ctx , ** kwargs ):
return YT ( ctx , ** kwargs )
cli
메서드를 구현해야 합니다. 핵심 CLI 기능이 클래스를 찾고 호출하려면 필요합니다.__init__()
메서드)를 재정의하여 CLI 인수를 수락합니다. def __init__ ( self , ctx , title ):
self . title = title
super (). __init__ ( ctx ) # important
# ... the title is now available across all methods by calling self.title
메모
@abstractmethod
)으로 표시된 Service
에서 상속된 클래스의 모든 메서드는 클래스에서 구현되어야 합니다.__init__()
메서드)를 재정의할 때는 해당 메서드를 슈퍼 호출해야 합니다(예: 재정의 상단에서 super().__init__()
. 이는 구현되지 않은 추상 메서드에는 적용되지 않습니다.get_session
메서드를 재정의한 다음 self.session
수정해야 합니다. self.session
처음부터 수동으로 만들지 마십시오. 팁
self.session
클래스 인스턴스 변수(예: self.session.get(url)
를 사용하십시오.__init__.py
옆에 config.yaml
파일을 만들면 self.config
를 사용하여 해당 파일에 액세스할 수 있습니다.서비스 태그는 일반적으로 다음 규칙을 따릅니다.
[A-Z0-9i]{2,4}
로만 구성되어야 합니다.i
일부 서비스에만 사용됩니다. 특히 BBC iPlayer와 iTunes.+
또는 Plus
있는 경우 마지막 문자는 P
여야 합니다. 예: Apple TV+
용 ATVP
, Discovery+
용 DSCP
, Disney+
용 DSNP
, Paramount+
용 PMTP
.이 규칙은 완전한 것이 아니며 지침으로만 사용해야 합니다. 이 규칙을 엄격하게 따를 필요는 없지만 일관성을 위해 그렇게 하는 것이 좋습니다.
압축된 서비스 폴더를 보내고 받는 것은 상당히 번거롭습니다. 서비스 코드에 대한 협업을 위한 대체 경로를 살펴보겠습니다.
경고
누구를 신뢰하고 무엇을 운영하는지 주의하시기 바랍니다. 서비스 코드에 대해 협력하는 사용자는 다음 호출 시 디바인을 통해 실행할 악성 코드로 서비스 코드를 업데이트할 수 있습니다.
여러 서비스에서 팀과 협력하는 경우 프로젝트를 포크하는 것이 가장 좋은 방법입니다.
git clone <your repo url here>
그런 다음 cd
로 들어갑니다.git remote add upstream https://github.com/devine-dl/devine
git remote set-url --push upstream DISABLE
git fetch upstream
git pull upstream master
git reset --hard v1.0.0
. 이제 서비스 또는 기타 변경 사항을 포크된 저장소에 커밋하세요.
일단 커밋되면 다른 모든 팀원이 쉽게 변경 사항을 가져오고 새로운 변경 사항을 푸시할 수 있습니다.
새로운 업데이트가 나오면 해당 업데이트 커밋으로 포크를 쉽게 리베이스할 수 있습니다.
git fetch upstream
git rebase upstream/master
그러나 리베이스하기 전에 각 버전 간의 변경 사항을 확인하고 새 버전으로 리베이스할 때 주요 변경 사항 및 지원 중단을 해결하세요.
git
처음 사용한다면 GitHub Desktop을 살펴보세요.
팁
이 방법의 큰 이점은 자체 서비스의 종속성을 동기화할 수도 있다는 것입니다! poetry
사용하여 종속성을 적절하게 추가하거나 수정하고 변경된 poetry.lock
을 커밋하세요. 그러나 핵심 프로젝트에도 종속성 변경 사항이 있는 경우 poetry.lock
변경 사항이 충돌하므로 충돌 해결/리베이스를 수행하는 방법을 배워야 합니다. 그래도 그만한 가치가 있습니다!
이는 분기 방법과 같은 작업을 수행하고 싶지만 어떤 변경 사항이 발생했는지, 언제 발생했는지 신경 쓰지 않고 팀 전체에 변경 사항을 동기화하려는 사람들에게 훌륭한 옵션입니다.
이는 또한 서비스 코드를 호스팅하거나 협업할 수 있는 방법을 열어줍니다. 그 안의 서비스만으로 업데이트되는 디렉토리를 받을 수 있다면 괜찮습니다. 옵션에는 FTP 서버, 공유 Google 드라이브, 서비스만 포함된 비포크 저장소 등이 포함될 수 있습니다.
services
디렉터리를 만들고 그 안에 모든 서비스를 보관하세요.services
디렉터리를 /devine
폴더에 Symlink로 연결합니다. /devine/services
/devine/services/services
폴더로 끝나야 합니다.원본 폴더가 변경 사항을 계속 수신하고 다운로드/스트리밍하는지 확인해야 합니다. 또한 로컬에 있는 디바인 버전이 서비스 코드에서 지원되는지 확인해야 합니다.
메모
파일이 열리면 해당 파일을 다운로드하는 클라우드 소스를 사용하는 경우 해당 파일이 자동으로 다운로드되므로 걱정할 필요가 없습니다. Python이 파일을 가져오면 다운로드가 시작됩니다. 그러나 시작이 지연될 수 있습니다.
Devine은 쿠키 및/또는 자격 증명을 사용하여 서비스를 인증할 수 있습니다. 자격 증명은 구성에 저장되고 쿠키는 devine env info
실행하여 찾을 수 있는 데이터 디렉터리에 저장됩니다.
서비스에 자격 증명을 추가하려면 자격 증명 구성에서 서비스당 하나 이상의 자격 증명 설정에 대한 정보를 살펴보세요. 서비스별로 하나 이상의 자격 증명을 추가하고 -p/--profile
사용하여 사용할 자격 증명을 선택할 수 있습니다.
서비스에 쿠키를 추가하려면 쿠키 파일 확장자를 사용하여 cookies.txt
파일을 만들고 이를 Cookies 디렉터리로 이동합니다. cookies.txt
파일의 이름을 서비스 태그의 이름(대소문자 구분)으로 바꿔야 합니다(예: NF.txt
). 서비스 쿠키 폴더(예: /Cookies/NF/default.txt
또는 /Cookies/NF/.txt
에 배치할 수도 있습니다.
고유한 이름을 사용하여 여러 쿠키를 /Cookies/NF/
폴더에 추가한 다음 -p/--profile
사용하여 사용할 쿠키를 선택할 수 있습니다. 예를 들어 /Cookies/NF/sam.txt
한 다음 --profile sam
과 함께 사용하세요. .txt
또는 default.txt
없이 다른 파일을 사용하여 서비스 쿠키 폴더를 만드는 경우 표시된 것처럼 -p/--profile
사용하지 않으면 쿠키가 로드되지 않습니다. 이를 통해 변덕스럽게 인증을 선택할 수 있습니다.
팁
-p/--profile
사용할 때 자격 증명 이름과 쿠키 파일 이름에 동일한 이름을 사용해야 합니다. 경고
프로필 이름은 대소문자를 구분하며 서비스별로 고유합니다. 임의의 문자나 길이 제한은 없지만 터미널이 혼란스러울 수 있으므로 편의상 특수 문자를 사용하지 않는 것이 좋습니다.
쿠키는 표준 Netscape 쿠키 파일 형식이어야 합니다.
권장되는 쿠키 내보내기 확장:
Rotem Dan
의 "쿠키 내보내기"Ninh Pham
의 "Open Cookies.txt",Rahul Shaw
의 "cookies.txt 가져오기"표준 Netscape 형식으로 내보내는 다른 확장은 이론적으로 작동합니다.
경고 Rahul Shaw의 Get Cookies.txt 확장 프로그램은 본질적으로 스파이웨어입니다. 사용하지 마십시오. 몇 가지 안전한 버전이 떠돌고 있지만(보통 확장의 이전 버전) 안전한 대안이 있기 때문에 아예 피하겠습니다. 출처: https://reddit.com/r/youtubedl/comments/10ar7o7
DRM으로 보호되는 콘텐츠에 대한 암호 해독 키가 포함된 라이선스를 취득하려면 Widevine 조항이 필요합니다. DRM 프리 서비스에서 디바인을 사용하는 경우에는 필요하지 않습니다. Widevine 장치 파일, 키 또는 조항은 제공될 수 없으므로 요청하지 마십시오.
Devine은 .WVD
파일(Widevine 장치 파일)만 지원합니다. 그러나 RSA 개인 키 및 장치 클라이언트 식별 Blob 프로비저닝을 Blob 파일(예: device_private_key
및 device_client_id_blob
)로 가지고 있는 경우 pywidevine create-device --help
실행하여 이를 .WVD
파일로 변환할 수 있습니다.
.WVD
파일이 있으면 devine env info
호출하여 찾을 수 있는 WVDs 디렉터리에 저장하세요. 그런 다음 devine cfg cdm.default wvd_name
사용하여 기본적으로 사용할 WVD(파일 이름만 사용)를 구성에서 설정할 수 있습니다. 여기에서 각 특정 서비스에 사용할 WVD를 설정할 수 있습니다. 가능하면 가장 낮은 보안 수준 조항을 사용하는 것이 가장 좋습니다.
대안은 pywidevine Serve 호환 CDM API를 사용하는 것입니다. 물론, 서비스를 제공하는 사람을 알아야 하며 그 사람이 귀하에게 액세스 권한을 부여해야 합니다. 설정 정보는 remote_cdm 구성 옵션을 살펴보세요. 이에 대한 자세한 내용은 pywidevine 저장소를 참조하세요.
Devine과 해당 커뮤니티 페이지는 다른 프로젝트와 마찬가지로 친절하게 다루어져야 합니다. 스팸을 보내거나 서비스의 최종 사용자 라이센스 계약을 침해하는 질문을 삼가하십시오.
이 소프트웨어는 GNU General Public License, 버전 3.0의 조건에 따라 라이센스가 부여되었습니다.
루트 폴더의 LICENSE 파일에서 라이센스 사본을 찾을 수 있습니다.
© rlaphonix 2019-2024