• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글
정보

시놀로지 나스에서 유투브 다운로더 및 ffmpeg H/W transcoding 사용하기.

신동 1967

1

8

<유투브 다운로더>

 

yuotube-dl이 오리지날인데, 사용해보니 이상하게 다운로드 속도가 엄청나게 느립니다. 포크 버전인 yt-dlp는 속도가 제대로 나와서 이걸로 사용하고 있습니다.

 

윈도우에서는 실행파일 1개라서 그냥 다운해서 아무 폴더에나 넣어놓고 파워쉘에서 실행하면 되지만, 리눅스에서는 설치가 필요합니다. 시놀로지 나스박스에서는 wget이나 pip가 쉘에서 바로 실행되지 않기 때문에, 파이썬 가상환경을 이용해야 합니다.

 

1. 첫번째로 나스에 ssh를 이용하여 접속합니다.
윈도우라면 파워쉘에서 ssh 명령어가 바로 실행됩니다. 시놀로지는 기본 설정이 ssh를 막아 놓았기 때문에, "제어판 -> 터미널 -> SSH 서비스" 활성화 해 주고 포트를 지정해 주어야 합니다.

 

2. ssh로 나스에 접속하면 개인 홈폴더가 보입니다. 일단 접속 아이디가 foobar라고 가정하고 적겠습니다.
pwd 명령어를 입력하면 이렇게 나옵니다.

foobar@ds1520plus:~$ pwd
/var/services/homes/foobar

 

여기서 /var/services/는 심볼릭 링크이고, 실제 나스에서 홈폴더의 정확한 위치는 /volume1/homes/foobar 가 됩니다.

** 이제부터는 프롬프트 부분은 빼고 실제 명령어만 적겠습니다.

 

3. DSM 7에서는 파이썬3.8이 기본으로 설치되어 있습니다. 파이썬 가상 환경을 만듭니다.
python3.8 -m venv /volume1/homes/foobar/pipvenv

 

pipvenv 폴더 이름은 원하시는대로 정해주셔도 됩니다.

 

4. 이제 pip를 설치합니다.
sudo python3.8 -m ensurepip
sudo python3.8 -m pip install --upgrade pip

 

이렇게 설치하면 root로 설치하지 말라는 경고 메시지가 나오는데, 안타깝게도 시노박스에서는 sudo로 안 하면 퍼미션 문제로 설치 자체가 안 됩니다.

 

5. pip를 이용하여 yt-dlp를 설치합니다.
sudo python3.8 -m pip install --upgrade yt-dlp

 

yt-dlp는 /usr/bin 에 설치가 됩니다. 이제 어느 폴더에서나 yt-dlp 를 입력하면 실행이 됩니다.
ffmpeg나 yt-dlp는 시노박스에서는 반드시 sudo로 실행을 해 주어야 합니다. 그냥 명령어를 입력하면 에러가 납니다.

 

그냥 실행한 경우

foobar@ds1520plus:/usr/bin$ ./yt-dlp
Traceback (most recent call last):
  File "./yt-dlp", line 5, in <module>
    from yt_dlp import main
ImportError: cannot import name 'main' from 'yt_dlp' (unknown location)

 

sudo로 실핸한 경우

foobar@ds1520plus:/usr/bin$ sudo ./yt-dlp
Password:
Usage: yt-dlp [OPTIONS] URL [URL...]

yt-dlp: error: You must provide at least one URL.
Type yt-dlp --help to see a list of all options.

 

6. 이제 yt-dlp를 사용하여, 시노박스에 유튜브 동영상을 직접 다운받을 수 있습니다.

 

이제 yt-dlp를 사용해 보겠습니다.

7. 유투브에 들어가서 동영상이나 플레이리스트의 아이디를 알아냅니다. 테스트로 tvN "뜻밖의 여정" 동영상을 사용해 보겠습니다.

 

유투브 tvN 채널의 재생목록 탭에 들어가면 "뜻밖의 여정" 목록이 있습니다. 주소창을 보면 아래와 같이 나옵니다.
https://www.youtube.com/watch?v=ONfZgp_VEac&list=PLgbB1gJhmG7AUxjxRAddfHE8yA84fI702

 

여기서 list= 뒤에 있는 PLgbB1gJhmG7AUxjxRAddfHE8yA84fI702 부분이 필요합니다.

 

8. 복잡한 설명 다 치우고, 제가 사용하는 명령어를 적어보겠습니다.
sudo yt-dlp -o "/volume1/video/youtube/down/%(title)s.%(ext)s" -f 'bestvideo[height=1080][ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best[height=1080]' --download-archive /volume1/video/youtube/archive/ty.txt "https://www.youtube.com/playlist?list=PLgbB1gJhmG7Dd1WsI_2VamewsKNFP85QV"

 

명령어를 설명 드리겠습니다.

 

sudo yt-dlp
시노박스에서는 설명드린 것처럼 sudo로 실행을 해야 합니다.

 

 -o "/volume1/video/youtube/down/%(title)s.%(ext)s"
저장되는 위치와 어떤 파일명을 사용할지를 설정합니다.

 

 -f 'bestvideo[height=1080][ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best[height=1080]'
유투브에서는 영상과 음성이 따로 저장되어 있습니다. 영상도 해상도별 코덱별로 따로 되어 있습니다. 아래 명령어 처럼 해서 전체 목록을 볼 수 잇습니다.

 

sudo yt-dlp --list-formats "https://www.youtube.com/playlist?list=PLgbB1gJhmG7Dd1WsI_2VamewsKNFP85QV"
화면 출력을 중간에 끊으실때는 "control-c"를 누르세요.

 

avc1 코덱은 확장자가 mp4이고, VP9 코덱은 확장자가 webm 입니다. 따라서 위의 옵션은 avc1 코덱의 확장자 mp4 영상 중에서 1080 해상도를 다운 받겠다는 말입니다. 음성은 비트레이트가 가장 높은 것으로 받겠다는 겁니다.

 

 --download-archive /volume1/video/youtube/archive/ty.txt
가령 완결된 목록은 한번 받으면 땡이지만, 아직 완결되지 않은 경우는 이렇게 해서 아카이브 파일을 만들어 놓으면, 다음에 다운 받을때 이미 받은 것들은 건너뜁니다.

 

아카이브 파일 폴더와 이름인 archive/ty.txt는 임의로 지정해 주시면 됩니다.

 

 "https://www.youtube.com/playlist?list=PLgbB1gJhmG7Dd1WsI_2VamewsKNFP85QV"
다른 목록을 받을때는 "https://www.youtube.com/playlist?list=" 까지는 그대로 쓰시고 PLgbB1gJhmG7Dd1WsI_2VamewsKNFP85QV 부분만 바꿔주시면 됩니다.

 

마지막으로, 영상/음성 파일을 따로 받은 다음에, 시스템에 ffmpeg가 설치되어 있으면 merge해서 한개의 동영상 파일로 만들어 줍니다. 따라서 이제 ffmpeg를 설치하고 실행하는 방법을 설명 드리겠습니다.

 

<ffmpeg H/W transcoding 사용하기>

 

시노박스 패키지 센터에는 ffmpeg가 없습니다. 시노커뮤니티에서 받아야 합니다. 왜 이걸 받아야 하냐 하면, 시노박스에는 기본적으로 ffmpeg가 깔려있지만, HW encoder/decoder가 사용 못하게 빌드 되어 있습니다.

 

1. ffmpeg 설치
패키지 센터 -> 세팅 -> 패키지 소스 -> 추가
이름 -> synocommunity
위치 -> http://packages.synocommunity.com

 

이제 community 목록이 새로 생깁니다. 여기서 ffmpeg를 설치해 주세요.

 

2. 설치된 ffmpeg는 DSM6과 DSM7에서 위치가 틀립니다.
DSM7에서는 /volume1/@appstore/ffmpeg/bin/에 보시면 ffmpeg 실행 화일이 있습니다.

 

@는 특수문자이기 때문에, 명령어를 칠때 escape(역슬래시)를 해 줘야 합니다. 가령 위의 폴더로 가려면

 

cd /volume1/\@appstore/ffmpeg/bin
이렇게 쳐야 합니다.

 

cd /volume1/@appstore/ffmpeg/bin
이렇게 치면 안 됩니다.

 

yt-dlp나 ffmpeg가 있는 폴더는 PATH에 있기 때문에, 어느 폴더에서든 그냥 명령어면 치면 됩니다. 하지만, 우리는 시노박스에 이미 있던 ffmpeg가 아니로 시노커뮤니티에서 받은 ffmpeg를 써야 합니다. 그래서 일단 파일을 복사 해서 작업할 폴더에 넣어 줍니다.

 

cp /volume1/\@appstore/ffmpeg/bin/ffmpge /volume1/video/transcoding/

 

3. 긴 말 치우고, 제가 쓰는 명령어를 적어 보겠습니다.
sudo /volume1/video/transcoding/ffmpeg -y -vsync 0 -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i input.mp4 -vf 'format=nv12|vaapi,hwupload,scale_vaapi=w=640:h=360' -c:v h264_vaapi -rc_mode CQP -qp 18 -b:v 0 -aspect 16/9 -c:a aac -ac 2 -b:a 128k output.mp4

 

명령어를 설명 드리겠습니다.

 

sudo /volume1/video/transcoding/ffmpeg
H/W 장치를 사용하기 때문에, sudo를 사용하지 않으면 에러가 납니다. 그리고 저렇게 정확히 파일 위치를 지정해 주지 않으면 시노박스에 있는 기존의 ffmpeg가 실행되어 버리기 때문에 H/W 트랜스코딩이 작동하지 않습니다.

 

저렇게 하기 번거로우면,
cd /volume1/video/transcoding
sudo ./ffmpgeg
이렇게 실행해 주셔도 됩니다. "./" 부분을 빼먹지 마세요. 현재 위치한 폴더에 있는 ffmpeg를 실행하겠다는 의미입니다.

 

 -y
실행 중에 나오는 "하시겠습니까? yes/no" 부분을 다 yes로 처리하겠다는 의미입니다.

 

 -vsync 0
큰 의미 없습니다.

 

 -hwaccel vaapi
H/W encoding/decoding을 위해 vaapi를 사용하겠다는 말입니다.

 

 -hwaccel_device /dev/dri/renderD128
본인 나스박스에 /dev/dri/renderD128 파일이 없으면 안됩니다. 인텔 내장 GPU의 퀵싱크 모듈에 대한 장치 드라이버입니다.

 

 -hwaccel_output_format vaapi
encoding에 vaapi를 사용하겠다는 말입니다.

 

 -i input.mp4
입력 파일 이름을 지정해 줍니다.

 

 -vf 'format=nv12|vaapi,hwupload,scale_vaapi=w=640:h=360'
비디오 필터 처리를 하는데, vaapi로 해서 해상도를 640x360으로 변경하겠다는 말입니다. H/W로 처리할때는 원래 비디오 필터가 안 먹는데, 이렇게 해주면 됩니다.

 

 -c:v h264_vaapi
비디오 인코딩 할때 vaapi용 h264 코덱을 사용한다는 말입니다.

 

 -rc_mode CQP
이건 화질을 조정하는건데 그냥 무난한게 이겁니다.

 

 -qp 18
역시 화질 조정입니다.

 

 -b:v 0
rc_mode를 지정해주면 비트레이트는 알아서 잡아주기 때문에 비디오 비트레이트는 0으로 놓습니다.

 

 -aspect 16/9
화면 비율 조정 입니다.

 

 -c:a aac
오디오 인코딩 코덱을 aac로 사용합니다.

 

 -ac 2
오디오 채널은 2채널을 사용합니다.

 

 -b:a 128k
오디오 인코딩 비트레이트 설정입니다.

 

 output.mp4
출력 파일 이름 입니다.

 

이렇게 하면 일단 트랜스코딩이 하드웨어로 됩니다. 헌데, 폴더에 있는 파일들을 일일히 입력/출력 이름을 지정해 주는것이 여간 번거로운 일이 아닙니다.

 

따라서, 폴더 내에 있는 모든 파일을 일괄로 변환하는 방법을 설명하겠습니다. 배시쉘의 for/do 문구를 사용하면 됩니다.

 

4. 제가 쓰는 일괄 작업 명령어 입니다.
for i in *.mkv; do sudo /volume1/video/transcoding/ffmpeg -y -vsync 0 -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i "$i" -vf 'format=nv12|vaapi,hwupload,scale_vaapi=w=640:h=360' -c:v h264_vaapi -rc_mode CQP -qp 18 -b:v 0 -aspect 16/9 -c:a aac -ac 2 -b:a 128k ./output/"${i%.*}.mp4"; done

 

설명을 드리자면 기본적으로

 

for i in *.mkv;

 

do
sudo /volume1/video/transcoding/ffmpeg -y -vsync 0 -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i "$i" -vf 'format=nv12|vaapi,hwupload,scale_vaapi=w=640:h=360' -c:v h264_vaapi -rc_mode CQP -qp 18 -b:v 0 -aspect 16/9 -c:a aac -ac 2 -b:a 128k ./output/"${i%.*}.mp4";

 

done

이렇게 세 부분으로 나눠 있습니다. 끝에 세미콜론 잊지 마세요. for 어쩌고; do 저쩌고; done 형식입니다.

 

do 부분에 명령어를 그냥 복붙 하면 되는데, 입력/출력 부분을 신경써 주세요.
입력 부분이 -i "$i" 로 바뀝니다.
출력 부분은 ./output/"${i%.*}.mp4" 로 바뀝니다. 출력파일은 서브폴더에 저장되게 했습니다.

 

DS-720/920/1520은 모두 셀레론 j4125 제미니레이크를 쓰는데, h264 1080을 변환해 보면 속도가 15배 정도 됩니다. 즉 15분짜리 변환하는데 1분 걸린다는 말입니다. hevc 4k는 아직 시도해 보지 않았습니다.

신고공유스크랩
8
profile image 1등
달소 2022.05.26. 13:48

크.. venv 만드는거부터 전문가의 향기가...

 

리눅스를 조금 다룰줄 아시는분들께서 응용하신다면 엄청난 효율일듯하네요.

정품시놀의 트랜스코딩은 부럽습니다 ㅎㅎ

신동 글쓴이 2022.05.26. 14:24
달소

달소님에 비하면 어찌 감히 전문가라고 부르겠습니다. 그냥 인터넷에서 얻은 정보를 짜집기 한 것에 불과합니다. 이건 정품 시놀의 기능을 사용한게 아니라서, 헤놀로지도 920을 까셨고, /dev/dri/renderD128이 있으면 됩니다. pve에 vm으로 까신 겅우라면 굳이 헤놀로지에서 할 필요 없이 pve에 ssh로 들어가셔서 하시면 동일하게 됩니다.

profile image 2등
ExpBox 2022.05.26. 14:04

좋네요. 스크립트 형태로 만들어서 제어판에서 스케줄러 등록해서 주기적으로 실행해도 괜찮을 것 같네요 ㅎㅎ

 

youtube-dl의 처참한 성능은 저도 약간 이해해볼 수 잇는게 전에 적었던 글인 Tube Archivist가 다 좋은데 다운로드 속도가 진짜.. 3메가/초 나오다가 점점 줄면서 아예 멈추는 경우가 많아요. 그래서 다른 솔루션을 일단 찾아보고있습니다.

신동 글쓴이 2022.05.26. 14:26
ExpBox

네. 저희집 인터넷이 100mbps인데, yt-dlp를 사용하면 다운로드 속도가 거의 100mbps 풀로 나옵니다.

profile image
ExpBox 2022.05.26. 16:27
신동

다만 cli로 관리해야하는 점이 아쉬운 점이네요. Tube Archivist의 관리가 쉬운 점을 높게 보고있는데 사실 속도가 안나와서 실망을 많이 했거든요. yt-dl 쓰는 코드를 수정하고 다시 빌드해야하나 싶기도 하고 참 어렵네요.

신동 글쓴이 2022.05.26. 16:30
ExpBox

그렇습니다. 하지만, 텍스트 파일에 필요한 경우의 명령어 조합을 저장해놓고, 터미널로 복붙해서 쓰는데 익숙해지면, GUI로 하는 것과 비교도 안되게 효율/속도가 빨라집니다.

profile image
ExpBox 2022.05.27. 15:10
신동

맞습니다. 하지만 터미널을 계속 열어놓는게 부담스러워서 포트포워드 열었다가 닫았다가 그러다보니 터미널을 사용하는게 영 시원찮네요. 앞서 말씀드린대로 스크립트 형태로 제어판에서 스케줄러 등록해서 쓰던가 아예 도커로 찾아서 DSM-Docker-컨테이너 터미널 쪽으로 사용하는게 좀 더 낫지 않을까 싶어서 찾아보는 중입니다. 좋은 방법 소개해주셔서 감사합니다.

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

cmt alert

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story
번호 분류 제목 글쓴이 날짜 조회 추천
공지 정보 DSM 7.2v) Mshell로 헤놀로지 부트로더 빌드하기. 59 달소 23.05.29.01:57 23047 +23
공지 정보 DSM 7.2v) ARPL-i18n(rr)으로 헤놀로지 부트로더 빌드하기. 71 달소 23.05.23.23:58 24721 +23
업데이트 RR-24.3.7 업데이트 10 EXP 1일 전12:25 355 +3
후기 27000원 헤놀 머신 조립 (장난감) 10 헤놀로지맨 1일 전19:51 741 +4
업데이트 릴리즈 봇이 v1.0.2.4 를 너무 여러번 올려 버려 민망하네요. ㅎㅎ 6 화정큐삼 2일 전00:52 357 +4
4969 질문
normal
프리맨2000 6시간 전12:16 64 0
4968 질문
normal
지축또타 7시간 전11:06 105 0
4967 질문
normal
모랄로 7시간 전10:48 193 0
4966 질문
image
양수 18시간 전00:08 103 0
4965 잡담
image
훔친수건 16시간 전01:47 302 0
4964 질문
image
레이져 21시간 전21:16 94 0
4963 질문
image
스맛홈매니아 21시간 전20:21 74 0
4962 업데이트
image
EXP 1일 전12:25 355 +3
4961 질문
image
유니파트 1일 전22:15 233 0
4960 후기
image
헤놀로지맨 1일 전19:51 741 +4
4959 질문
image
유니파트 1일 전18:24 69 0
4958 질문
normal
Skywa1ker 2일 전17:46 168 0
4957 질문
normal
블랙앤해적 2일 전17:37 42 0
4956 질문
normal
요트 2일 전17:13 304 0
4955 질문
normal
zip 2일 전13:01 129 0
4954 질문
normal
모랄로 2일 전09:30 126 0
4953 업데이트
normal
화정큐삼 2일 전00:52 357 +4
4952 후기
image
kmw_ 3일 전16:06 620 +2
4951 질문
image
메가펀치 3일 전15:42 84 0
4950 질문
normal
모랄로 3일 전13:01 117 0