【Python】youtube-dlでmp4/mp3をYoutubeからダウンロードする

この記事は約6分で読めます。

 

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

 

 

 

コメント

タイトルとURLをコピーしました