#インストール
###anaconda
ref) https://anaconda.org/conda-forge/youtube-dl
conda install -c conda-forge youtube-dl
###pip(未検証)
ref) https://github.com/ytdl-org/youtube-dl/blob/master/README.md
sudo -H pip install --upgrade youtube-dl
#import
import youtube_dl as ydl
#動画DL
動画DLにはydl.main()メソッドとydl._real_main()メソッドがある.
ソースを見ればわかるが,前者は後者のラッパーで,追加で例外処理を行う.後述の理由からここでは後者のメソッドを使う.
引数には色々指定できるが(本家git参照),オプション指定子とその実態との間にスペースを入れるとそのスペースも実態に含まれるので注意.
myURL = "https://www.nicovideo.jp/watch/so23335421" #保存したい動画のURL
myOUT = "-oout.mp4" #出力動画ファイル名指定
def main():
try:
ydl._real_main([myURL, myOUT])
except ydl.DownloadError:
main()
main()
4分以上のニコニコ動画をDLするとき,ydl.DownloadErrorクラスのエラーが出るのだが(実態はurlibのエラーで,執筆時点のyoutube-dlではこのエラーを回避できないように思われる[参考]),実はメソッドを繰り返せば続きからDLでき,DLが完了すれば当然エラーが出なくなる.よってydl._real_main()がydl.DownloadErrorを吐き続ける間は再帰的にydl._real_main()を実行させ続けることでエラーを見ずに済むようになる.
#備考
youtube_dlモジュールはsys.exitを多用しているので,jupyter notebookできちんと動そうとしたり,他のプログラムと組み合わせて動かしたいならソースを変えなければならないかも?tryブロックで呼べばなんとかなるかも.