はじめに

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であることが多いようです。しかし、画質と音声を指定した質でダウンロードすることもできます。この場合画質と音声は、それぞれ別にダウンロードすることになり、あとで自動的に結合されます。結合にはffmpegavconvが必要です。今回はffmpegapt 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