Contents
Pythonでyoutubeの動画をダウンロード
最近PythonでYoutube上の任意の動画をダウンロードできる「youtube-dl」というライブラリを見つけたので、メモ用に紹介していきたいと思います。
【Github】:https://github.com/ytdl-org/youtube-dl
youtube-dlの使い方
まずはいつも通りPIPでインストールします。
# youtube-dlのインストール $ pip install youtube-dl
後述すうMP3形式で動画をダウンロードするためには、PC自体に「ffmpeg」がインストールされている必要があります。インストール&環境変数登録は以下のサイトを参考に「ffmpeg」をインストールしてください。
参考サイト:https://fukatsu.tech/windows-ffmpeg
またレンタルサーバーなどでコマンドライン経由でインストールする場合は以下の記事を参照してください。
参考サイト:https://qiita.com/KENOSIN/items/9685dcbe9f43e665b96d
Youtube-dlでYoutubeから動画をダウンロードする
インストールが完了したらyoutube-dlを読み込んで、実際にpythonのスクリプトからyoutube上の動画をダウンロードしてみます。
# ライブラリの読み込み import youtube_dl # 初期設定 ydl = youtube_dl.YoutubeDL({'outtmpl': '%(id)s%(ext)s'}) # ダウンロードする動画のURL url = 'https://www.youtube.com/watch?v=sr--GVIoluU' # 動画情報をダウンロードする with ydl: result = ydl.extract_info( url, download=True )
ydl.extract_info
で動画情報を取得します。戻り値の変数resultの中に動画のタイトルとかファイルサイズとかのデータが辞書形式で格納されています。
また引数をdownload=True
としておくことで動画情報の取得だけではなく、動画のダウンロードが開始されます。
ファイル名の指定に関してはドキュメントを一通り読んでみたのですが、うまく設定する方法が分からなかったので、もしご存知のかたいらっしゃいましたらTwitterでコメントください笑
また、デフォルトのファイル名も動画ID+MP4という拡張子のない気持ち悪い形式になっており、そのままだと動画をダウンロードしても再生できないため、リネームしてあげる必要があります。
リネームは手動でもできますが、PythonのOSモジュールを使用することで自動化できます。
# ライブラリの読み込み import os from pathlib import Path # ダウンロードのデフォルトファイル名を推定 filename_before1 = url[32:] + 'mp4' filename_before2 = url[32:] + 'mp4.mkv' # リネーム後のファイル名を作成 filename_after1 = url[32:] + '.mp4' filename_after2 = url[32:] + '.mkv' # 現在の実行パスを取得 current_dir = Path(os.getcwd()) # ファイルネームを変更する try: os.rename(current_dir/filename_before1, current_dir/filename_after1) except: os.rename(current_dir/filename_before2, current_dir/filename_after2) print('処理が完了しました')
Youtubeにアップロードされている動画のファイル形式は大抵MP4かmkvなので、2パターンを想定して動画タイトル.MP4の形にリネームしています。書いてる自分も気持ち悪いなと感じるので、恐らくなんかもっとスマートな方法があるような気がしますが、とりあえずこれで動きはします。
Youtube-DLでMP3をダウンロードする
次はMP3形式でダウンロードしていく方法を紹介していきます。MP3形式のダウンロードには上述した「ffmpeg」のインストールが前提になるので、まずこれのインストールを済ませてください。
スクリプトは以下です、先ほどのMP4形式のダウンロードとの違いはydl = youtube_dl.YoutubeDL~
の引数の中身を変更するだけです。
ydl = youtube_dl.YoutubeDL({'outtmpl': '%(id)s%(ext)s', 'postprocessors': [{ 'key': 'FFmpegExtractAudio', 'preferredcodec': 'mp3', 'preferredquality': '192', }] }) # 動画ダウンロード with ydl: result = ydl.extract_info( url, download=True ) # ファイル名を変更 filename_before1 = url[32:] + 'mp4' + '.mp3' filename_after1 = url[32:] + '.mp3' os.rename(filename_before1, filename_after1) print('処理が完了しました')
次はこれをFlaskでwebアプリケーションの機能として実装していきたいと思います。
関連書籍
参照:https://stackoverflow.com/questions/50978713/angular-5-material-design-full-width-inputs
参照:https://morchin.hatenadiary.org/entry/20171209
コメント
[…] ・【Python】youtube-dlでmp4/mp3をYoutubeからダウンロードする […]
こちらのコードを参考にyoutube-dlを使ってみましたところ
リネームせずとも出力時に.mp4形式にすることが可能でした。
以下の該当箇所を
‘outtmpl’: ‘%(id)s%(ext)s’
‘outtmpl’: ‘%(id)s.%(ext)s’と変更しました。(変数idの後ろに [.])
%(id) youtube-dlで抽出した動画IDと %(exts) 動画形式でファイル名を整えているみたいです。
[…] 関連記事:【Python】youtube-dlでmp4/mp3をYoutubeからダウンロードする […]