2020-02-05 20:54:30 +09:00
# youtube-dl_sjva
2022-04-28 00:55:38 +09:00
2020-11-14 15:09:43 +09:00
[SJVA ](https://sjva.me/ ) 용 [youtube-dl ](https://youtube-dl.org/ ) 플러그인입니다.
2020-02-09 18:51:58 +09:00
SJVA에서 유튜브, 네이버TV 등 동영상 사이트 영상을 다운로드할 수 있습니다.
2020-02-05 20:54:30 +09:00
2020-02-14 00:49:47 +09:00
## 설치
2022-04-28 00:55:38 +09:00
2020-02-14 00:49:47 +09:00
SJVA에서 "시스템 → 플러그인 → 플러그인 수동 설치" 칸에 저장소 주소를 넣고 설치 버튼을 누르면 됩니다.
`https://github.com/joyfuI/youtube-dl`
2020-02-05 20:54:30 +09:00
## 잡담
2022-04-28 00:55:38 +09:00
2020-11-14 15:09:43 +09:00
시놀로지 docker 환경에서 테스트했습니다.
2020-02-05 20:54:30 +09:00
2020-11-14 15:09:43 +09:00
API를 제공합니다. 다른 플러그인에서 동영상 정보나 다운로드를 요청할 수 있습니다.
2022-04-28 00:55:38 +09:00
다른 플러그인이 멋대로 다운로드를 중지할 수 없도록 다운로드를 요청할 때 임의의 키를 넘겨받습니다. 중지 요청 시 키가 일치해야 요청이 실행됩니다.
2020-03-06 22:16:30 +09:00
2022-07-24 21:56:46 +09:00
[youtube-dl ](https://github.com/ytdl-org/youtube-dl )의 DMCA 테이크다운 사태 이후, 비슷한 상황을 대비하기 위해 youtube-dl의 포크 프로젝트 [youtube-dlc ](https://github.com/blackjack4494/yt-dlc )의 포크 프로젝트(...)인 [yt-dlp ](https://github.com/yt-dlp/yt-dlp )를 추가했습니다.
2021-04-28 20:45:42 +09:00
설정에서 취향껏 골라서 사용하시면 되며 youtube-dl가 우선 지원됩니다.
2020-02-14 00:49:47 +09:00
## API
2022-04-28 00:55:38 +09:00
2020-02-14 00:49:47 +09:00
### 공통사항
2022-04-28 00:55:38 +09:00
2020-07-25 03:06:03 +09:00
모든 요청은 `POST` 또는 `GET` 만 받습니다. 그리고 응답은 `JSON` 형식입니다.
2022-04-28 00:55:38 +09:00
모든 요청엔 _ 플러그인 이름 _ 정보가 있어야 합니다. `plugin` 키에 담아서 보내면 됩니다. 만약 _ 플러그인 이름 _ 정보가 없으면 **403 에러**를 반환합니다.
2020-02-14 00:49:47 +09:00
요청을 처리하는 과정에서 예외가 발생하면 **500 에러**를 반환합니다. 이건 저한테 로그와 함께 알려주시면 됩니다.
모든 응답에는 `errorCode` 키가 있습니다. 코드의 의미는 아래 문단 참고
2022-04-28 00:55:38 +09:00
2020-02-14 00:49:47 +09:00
#### 에러 코드 (errorCode)
2022-04-28 00:55:38 +09:00
- `0` - 성공. 문제없음
- `1` - 필수 요청 변수가 없음
- `2` - 잘못된 동영상 주소
- `3` - 인덱스 범위를 벗어남
- `4` - 키 값이 일치하지 않음
- `5` - 허용되지 않은 값이 있음
- `10` - 실패. 요청은 성공하였으나 실행 결과가 실패
2020-02-14 00:49:47 +09:00
#### Status 타입
2022-04-28 00:55:38 +09:00
2020-02-14 00:49:47 +09:00
상태를 나타냄
2022-04-28 00:55:38 +09:00
- `"READY"` - 준비
- `"START"` - 분석중
- `"DOWNLOADING"` - 다운로드중
- `"ERROR"` - 실패
- `"FINISHED"` - 변환중
- `"STOP"` - 중지
- `"COMPLETED"` - 완료
2020-02-14 00:49:47 +09:00
### /youtube-dl/api/info_dict
2022-04-28 00:55:38 +09:00
2020-02-14 00:49:47 +09:00
동영상 정보를 반환하는 API
2022-04-28 00:55:38 +09:00
2020-02-14 00:49:47 +09:00
#### Request
2022-04-28 00:55:38 +09:00
| 키 | 설명 | 필수 | 타입 |
| -------- | ------------- | ---- | ------ |
| `plugin` | 플러그인 이름 | O | String |
| `url` | 동영상 주소 | O | String |
2020-02-14 00:49:47 +09:00
#### Response
2022-04-28 00:55:38 +09:00
| 키 | 설명 | 타입 |
| ----------- | ----------- | ------- |
| `errorCode` | 에러 코드 | Integer |
| `info_dict` | 동영상 정보 | Object |
2020-02-14 01:20:39 +09:00
2020-11-15 14:41:36 +09:00
동영상 정보(`info_dict` 키)에는 youtube-dl에서 생성한 info_dict 정보가 그대로 들어있습니다. 따라서 이 부분은 직접 주소를 넣어가며 반환되는 정보를 확인해보는 게 좋습니다.
2020-02-14 00:49:47 +09:00
간단한 예로 `thumbnail` 키엔 썸네일 주소, `uploader` 키엔 업로더 이름, `title` 키엔 동영상 제목, `duration` 키엔 동영상 길이 등이 들어 있습니다.
2020-03-06 22:16:30 +09:00
그리고 만약 주소가 플레이리스트라면 `_type` 키에 `"playlist"` 라는 값이 들어 있습니다. 이때는 `entries` 키에 리스트가 들어있어 동영상들의 제목과 ID를 확인할 수 있습니다.
2020-02-14 00:49:47 +09:00
### /youtube-dl/api/download
2022-04-28 00:55:38 +09:00
2021-04-25 17:27:27 +09:00
비디오 다운로드 준비를 요청하는 API
2022-04-28 00:55:38 +09:00
2020-02-14 00:49:47 +09:00
#### Request
2022-04-28 00:55:38 +09:00
| 키 | 설명 | 필수 | 타입 |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- | ------- |
| `plugin` | 플러그인 이름 | O | String |
| `key` | 임의의 키. 이후 다운로드를 제어할 때 이 키가 필요함 | O | String |
| `url` | 동영상 주소 | O | String |
| `filename` | 파일명. 템플릿 규칙은 https://github.com/ytdl-org/youtube-dl/#output -template 참고. 미지정 시 사용자 설정 | X | String |
| `save_path` | 저장 폴더 경로. 미지정 시 사용자 설정 | X | String |
| `format` | 동영상 포맷. 포맷 지정은 https://github.com/ytdl-org/youtube-dl/#format -selection 참고. 미지정 시 최고 화질 | X | String |
| `preferedformat` | 변환할 비디오 포맷. 가능한 포맷은 https://ffmpeg.org/general.html#File -Formats 참고. 미지정 시 변환하지 않음 | X | String |
| `preferredcodec` | 추출할 오디오 코덱. 가능한 값은 `"best"` , `"mp3"` , `"aac"` , `"flac"` , `"m4a"` , `"opus"` , `"vorbis"` , `"wav"` . 미지정 시 추출하지 않음 | X | String |
| `preferredquality` | 추출한 오디오의 비트레이트. 0 ~ 9 사이의 VBR 퀄리티 값(0에 가까울수록 좋음) 혹은 특정 비트레이트 값. `preferredcodec` 키가 있을 때만 유효. 기본값: `192` | X | Integer |
| `dateafter` | 지정한 날짜 이후에 업로드된 동영상만 다운로드. 미지정 시 모두 다운로드 | X | String |
| `playlist` | 플레이리스트를 다운로드할 때 범위나 순서 지정. 미지정 시 모두 순서대로 다운로드 | X | String |
| `archive` | 다운로드한 동영상의 ID를 기록할 파일 경로. 파일이 이미 있으면 이미 다운로드한 동영상은 다운로드 하지 않음. 미지정 시 기록하지 않음 | X | String |
| `start` | 다운로드 준비 후 바로 다운로드를 시작할지 여부. 기본값: `false` | X | Boolean |
| `cookiefile` | 다운로드 시 필요한 쿠키 파일 경로 | X | String |
2022-07-24 21:56:46 +09:00
| `headers` | 다운로드 시 사용할 HTTP 헤더 정보 | X | String |
2020-11-08 22:58:35 +09:00
2022-07-24 21:56:46 +09:00
`dateafter` 키에 넣을 수 있는 날짜는 `"YYYYMMDD"` 또는 `"(now|today)[+-][0-9](day|week|month|year)(s)?"` 형식의 문자열입니다.
`headers` 키에 넣는 값은 `json` 형식의 문자열입니다.
2021-04-28 20:45:42 +09:00
`playlist` 키에 넣을 수 있는 값은 `"1-3,7,10-13"` 형식의 범위 또는 `"reverse"` , `"random"` 입니다.
범위를 넣으면 플레이리스트에서 선택한 것만 다운로드합니다.
`"reverse"` 를 넣으면 전체 플레이리스트를 역순으로 다운로드합니다.
`"random"` 을 넣으면 전체 플레이리스트를 랜덤 순서로 다운로드합니다.
2022-04-28 00:55:38 +09:00
2020-02-14 00:49:47 +09:00
#### Response
2022-04-28 00:55:38 +09:00
| 키 | 설명 | 타입 |
| ----------- | ------------------------------------------------------- | ------- |
| `errorCode` | 에러 코드 | Integer |
| `index` | 동영상 인덱스. 이후 다운로드를 제어할 때 이 값이 필요함 | Integer |
2020-02-14 00:49:47 +09:00
2021-04-25 17:27:27 +09:00
### /youtube-dl/api/thumbnail
2022-04-28 00:55:38 +09:00
2021-04-25 17:27:27 +09:00
썸네일 다운로드 준비를 요청하는 API
2022-04-28 00:55:38 +09:00
2021-04-25 17:27:27 +09:00
#### Request
2022-04-28 00:55:38 +09:00
| 키 | 설명 | 필수 | 타입 |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---- | ------- |
| `plugin` | 플러그인 이름 | O | String |
| `key` | 임의의 키. 이후 다운로드를 제어할 때 이 키가 필요함 | O | String |
| `url` | 동영상 주소 | O | String |
| `filename` | 파일명. 템플릿 규칙은 https://github.com/ytdl-org/youtube-dl/#output -template 참고. 미지정 시 사용자 설정 | X | String |
| `save_path` | 저장 폴더 경로. 미지정 시 사용자 설정 | X | String |
| `all_thumbnails` | 모든 썸네일 다운로드 여부. `false` 는 대표 썸네일 하나만 다운로드. 기본값: `false` | X | Boolean |
| `dateafter` | 지정한 날짜 이후에 업로드된 동영상만 다운로드. 미지정 시 모두 다운로드 | X | String |
| `playlist` | 플레이리스트를 다운로드할 때 범위나 순서 지정. 미지정 시 모두 순서대로 다운로드 | X | String |
| `archive` | 다운로드한 동영상의 ID를 기록할 파일 경로. 파일이 이미 있으면 이미 다운로드한 동영상은 다운로드 하지 않음. 미지정 시 기록하지 않음 | X | String |
| `start` | 다운로드 준비 후 바로 다운로드를 시작할지 여부. 기본값: `false` | X | Boolean |
| `cookiefile` | 다운로드 시 필요한 쿠키 파일 경로 | X | String |
2022-07-24 21:56:46 +09:00
| `headers` | 다운로드 시 사용할 HTTP 헤더 정보 | X | String |
2021-04-25 17:27:27 +09:00
2022-07-24 21:56:46 +09:00
`dateafter` 키에 넣을 수 있는 날짜는 `"YYYYMMDD"` 또는 `"(now|today)[+-][0-9](day|week|month|year)(s)?"` 형식의 문자열입니다.
`headers` 키에 넣는 값은 `json` 형식의 문자열입니다.
2021-04-28 20:45:42 +09:00
`playlist` 키에 넣을 수 있는 값은 `"1-3,7,10-13"` 형식의 범위 또는 `"reverse"` , `"random"` 입니다.
범위를 넣으면 플레이리스트에서 선택한 것만 다운로드합니다.
`"reverse"` 를 넣으면 전체 플레이리스트를 역순으로 다운로드합니다.
`"random"` 을 넣으면 전체 플레이리스트를 랜덤 순서로 다운로드합니다.
2022-04-28 00:55:38 +09:00
2021-04-25 17:27:27 +09:00
#### Response
2022-04-28 00:55:38 +09:00
| 키 | 설명 | 타입 |
| ----------- | ------------------------------------------------------- | ------- |
| `errorCode` | 에러 코드 | Integer |
| `index` | 동영상 인덱스. 이후 다운로드를 제어할 때 이 값이 필요함 | Integer |
2021-04-25 17:27:27 +09:00
2021-04-27 21:54:48 +09:00
### /youtube-dl/api/sub
2022-04-28 00:55:38 +09:00
2021-04-27 21:54:48 +09:00
자막 다운로드 준비를 요청하는 API
2022-04-28 00:55:38 +09:00
2021-04-27 21:54:48 +09:00
#### Request
2022-04-28 00:55:38 +09:00
| 키 | 설명 | 필수 | 타입 |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------- | ---- | ------- |
| `plugin` | 플러그인 이름 | O | String |
| `key` | 임의의 키. 이후 다운로드를 제어할 때 이 키가 필요함 | O | String |
| `url` | 동영상 주소 | O | String |
| `filename` | 파일명. 템플릿 규칙은 https://github.com/ytdl-org/youtube-dl/#output -template 참고. 미지정 시 사용자 설정 | X | String |
| `save_path` | 저장 폴더 경로. 미지정 시 사용자 설정 | X | String |
| `all_subs` | 모든 자막 다운로드 여부. 기본값: `false` | X | Boolean |
| `sub_lang` | 자막 언어. 두 자리 국가 코드. 콤마(,)를 구분자로 여러 개 지정 가능. `all_subs` 키가 `false` 일 때만 유효. 기본값: `"ko"` | X | String |
| `auto_sub` | 자동생성 자막 다운로드 여부. 유튜브 전용. 기본값: `false` | X | Boolean |
| `dateafter` | 지정한 날짜 이후에 업로드된 동영상만 다운로드. 미지정 시 모두 다운로드 | X | String |
| `playlist` | 플레이리스트를 다운로드할 때 범위나 순서 지정. 미지정 시 모두 순서대로 다운로드 | X | String |
| `archive` | 다운로드한 동영상의 ID를 기록할 파일 경로. 파일이 이미 있으면 이미 다운로드한 동영상은 다운로드 하지 않음. 미지정 시 기록하지 않음 | X | String |
| `start` | 다운로드 준비 후 바로 다운로드를 시작할지 여부. 기본값: `false` | X | Boolean |
| `cookiefile` | 다운로드 시 필요한 쿠키 파일 경로 | X | String |
2022-07-24 21:56:46 +09:00
| `headers` | 다운로드 시 사용할 HTTP 헤더 정보 | X | String |
2021-04-27 21:54:48 +09:00
2022-07-24 21:56:46 +09:00
`dateafter` 키에 넣을 수 있는 날짜는 `"YYYYMMDD"` 또는 `"(now|today)[+-][0-9](day|week|month|year)(s)?"` 형식의 문자열입니다.
`headers` 키에 넣는 값은 `json` 형식의 문자열입니다.
2021-04-28 20:45:42 +09:00
`playlist` 키에 넣을 수 있는 값은 `"1-3,7,10-13"` 형식의 범위 또는 `"reverse"` , `"random"` 입니다.
범위를 넣으면 플레이리스트에서 선택한 것만 다운로드합니다.
`"reverse"` 를 넣으면 전체 플레이리스트를 역순으로 다운로드합니다.
`"random"` 을 넣으면 전체 플레이리스트를 랜덤 순서로 다운로드합니다.
2022-04-28 00:55:38 +09:00
2021-04-27 21:54:48 +09:00
#### Response
2022-04-28 00:55:38 +09:00
| 키 | 설명 | 타입 |
| ----------- | ------------------------------------------------------- | ------- |
| `errorCode` | 에러 코드 | Integer |
| `index` | 동영상 인덱스. 이후 다운로드를 제어할 때 이 값이 필요함 | Integer |
2021-04-27 21:54:48 +09:00
2020-02-14 00:49:47 +09:00
### /youtube-dl/api/start
2022-04-28 00:55:38 +09:00
2020-02-14 00:49:47 +09:00
다운로드 시작을 요청하는 API
2022-04-28 00:55:38 +09:00
2020-02-14 00:49:47 +09:00
#### Request
2022-04-28 00:55:38 +09:00
| 키 | 설명 | 필수 | 타입 |
| -------- | ----------------------------------------------------------- | ---- | ------- |
| `plugin` | 플러그인 이름 | O | String |
| `index` | 제어할 동영상의 인덱스 | O | Integer |
| `key` | 제어할 동영상에게 넘겨준 키. 이 값이 일치해야 요청이 실행됨 | O | String |
2020-02-14 00:49:47 +09:00
#### Response
2022-04-28 00:55:38 +09:00
| 키 | 설명 | 타입 |
| ----------- | ------------------------- | ------- |
| `errorCode` | 에러 코드 | Integer |
| `status` | 요청을 받았을 당시의 상태 | Status |
2020-02-14 00:49:47 +09:00
### /youtube-dl/api/stop
2022-04-28 00:55:38 +09:00
2020-02-14 00:49:47 +09:00
다운로드 중지를 요청하는 API
2022-04-28 00:55:38 +09:00
2020-02-14 00:49:47 +09:00
#### Request
2022-04-28 00:55:38 +09:00
| 키 | 설명 | 필수 | 타입 |
| -------- | ----------------------------------------------------------- | ---- | ------- |
| `plugin` | 플러그인 이름 | O | String |
| `index` | 제어할 동영상의 인덱스 | O | Integer |
| `key` | 제어할 동영상에게 넘겨준 키. 이 값이 일치해야 요청이 실행됨 | O | String |
2020-02-14 00:49:47 +09:00
#### Response
2022-04-28 00:55:38 +09:00
| 키 | 설명 | 타입 |
| ----------- | ------------------------- | ------- |
| `errorCode` | 에러 코드 | Integer |
| `status` | 요청을 받았을 당시의 상태 | Status |
2020-02-14 00:49:47 +09:00
### /youtube-dl/api/status
2022-04-28 00:55:38 +09:00
2020-02-14 00:49:47 +09:00
현재 상태를 반환하는 API
2022-04-28 00:55:38 +09:00
2020-02-14 00:49:47 +09:00
#### Request
2022-04-28 00:55:38 +09:00
| 키 | 설명 | 필수 | 타입 |
| -------- | ----------------------------------------------------------- | ---- | ------- |
| `plugin` | 플러그인 이름 | O | String |
| `index` | 제어할 동영상의 인덱스 | O | Integer |
| `key` | 제어할 동영상에게 넘겨준 키. 이 값이 일치해야 요청이 실행됨 | O | String |
2020-02-14 00:49:47 +09:00
#### Response
2022-04-28 00:55:38 +09:00
| 키 | 설명 | 타입 |
| ------------ | ----------------------------------------------- | ------- |
| `errorCode` | 에러 코드 | Integer |
| `status` | 요청을 받았을 당시의 상태 | Status |
| `type` | 다운로드 타입. `"video" "thumbnail" "subtitle"` | String |
| `start_time` | 다운로드 시작 시간 | String |
| `end_time` | 다운로드 종료 시간 | String |
| `temp_path` | 임시 폴더 경로 | String |
| `save_path` | 저장 폴더 경로 | String |
2020-02-14 01:20:39 +09:00
2021-04-28 20:45:42 +09:00
`start_time` 키와 `end_time` 키에 들어있는 시간은 `"YYYY-MM-DDThh:mm:ss"` 형식의 문자열입니다.
2020-02-14 01:15:44 +09:00
물론 해당 정보가 없으면 null입니다.
2020-02-05 20:54:30 +09:00
## Changelog
2022-04-28 00:55:38 +09:00
2026-01-24 22:22:02 +09:00
v0.1.2
- 유튜브 검색 속도 대폭 개선 (extract_flat 적용)
- 검색 결과 캐싱 추가 (5분 유지)
- 인피니티 스크롤 안정화 및 최적화
- 미니 플레이어 (스크롤 시 오른쪽 하단 고정) 추가
- Artplayer 영상 비율 버그 수정 (16:9 aspect-ratio 적용)
- UI 개선: 검색 후 초기 메시지 자동 숨김
2020-02-06 23:43:13 +09:00
v0.1.1
2022-04-28 00:55:38 +09:00
2026-01-06 19:23:17 +09:00
- 유지보수 업데이트
2020-02-06 23:43:13 +09:00
2020-02-05 20:54:30 +09:00
v0.1.0
2022-04-28 00:55:38 +09:00
- 최초 공개