はじめに
YouTubeの動画をダウンロードするyoutube-dl
(GitHub)を試してみました。
インストール方法
GitHubのREADME.mdで最新の方法を確認してください。現時点では、バイナリをダウンロードする方法、pip
でインストールする方法、brew
などがあるようです。インストールした後、パスを通してください。
youtube-dlの使い方
youtube-dlは、
1$ youtube-dl [URL]
で簡単に使うことができます。しかし、保存場所や画質のオプションも含めると何度もコマンドを記述するのは大変なのでシャルスクリプトを作成します。今回利用するオプションは保存場所の指定、画質設定、字幕とサムネイルをダウンロードするの4つです。
保存場所の指定のオプション
保存場所を指定するには-o [path to file]
を利用します。下のように指定することでファイルのタイトル、チャンネル名、動画のidなどの情報をファイル名に含めることができます。
1-o $D_PATH'/%(title)s-%(uploader)s-%(id)s.%(ext)s' $URLs
画質と音質のオプション
画質と音質はデフォルトではbest
がダウンロードされます。これは、720pであることが多いようです。しかし、画質と音声を指定した質でダウンロードすることもできます。この場合画質と音声は、それぞれ別にダウンロードすることになり、あとで自動的に結合されます。結合にはffmpeg
かavconv
が必要です。今回はffmpeg
をapt insatall ffmpeg
によってインストールしました。画質のと音声のオプションは以下のように-f
オプションで行いました。
1-f bestvideo[height=$Image_Quality][ext=mp4]+bestaudio[ext=m4a]/bestvideo[height=1080][ext=mp4]+bestaudio[ext=m4a]/bestvideo[height=720][ext=mp4]+bestaudio[ext=m4a]/best
字幕をダウンロードするオプション
1--write-sub
サムネイルをダウンロードするオプション
1--write-thumbnail
シェルスクリプト
全体のシェルスクリプトです。URLと画質をコマンドライン引数として指定して、ダウンロードすることができます。
1URLs=$1
2if [ "$2" != "" ]; then
3 Image_Quality=$2
4else
5 Image_Quality=1080
6fi
7echo "Image_Quality : "$Image_Quality
8echo -e "URLs : "$URLs"\n"
9D_PATH=[file save path]
10
11### downloads
12youtube-dl -f bestvideo[height=$Image_Quality][ext=mp4]+bestaudio[ext=m4a]/bestvideo[height=1080][ext=mp4]+bestaudio[ext=m4a]/bestvideo[height=720][ext=mp4]+bestaudio[ext=m4a]/best \
13--merge-output-format mp4 \
14--write-sub \
15--write-thumbnail \
16-o $D_PATH'/%(title)s-%(uploader)s-%(id)s.%(ext)s' $URLs
17
18### check update and update if update available
19echo -e "\nchecking update ..."
20youtube-dl -U
時刻を指定してyoutubeをダウンロードする
ライブストリーミングや動画がプレミア公開された直後にダウンロードしたいときもあるでしょう。時刻を指定してダウンロードするためには、at
コマンドを利用します。1行目でatコマンドを利用するためのデーモンを起動します。2行では、日時を指定しており、3行目はスクリプトを実行しています。at
コマンドからは、ctrl+D
で脱出することができ、<EOT>
と表示されます。この際、標準出力やエラーをターミナルにリダイレクトするための設定が、> /dev/pts/0 2>&1
の部分です。/dev/pts/0
はご利用の境に合わせて、tty
コマンドなどで確認してください。設定を確認するためには、at -l
を利用します。
1$ sudo /etc/init.d/atd start
2$ at 17:05 03/11/2021
3at> youtube.sh URL > /dev/pts/0 2>&1
4at> <EOT>
5$ at -l