おはこんばんにちは!
曇りが続いていたんだけど、晴れ間が見えると一気に気温があったかくなってきましたね。
前置き
私は、よく外出時用にYouTubeの歌ってみた系を保存して、iPhoneに入れています。
保存する際に、俗に言うYouTube保存サイトを利用してmp3形式で保存していたのですが、たまたま今日気まぐれにおすすめサイトに出てきた保存サイトを利用しようとしたら、そこに保存する際に使用しているライブラリのことが書かれていました。
これは、自分で保存サイト作れるのではと思い、ライブラリについて色々調べていたら、MacのHomebrewで簡単にインストールすることができることがわかったので、やるしかない!って感じにインストールしました。
準備
Homebrewについては、省略します!
下記、公式サイトへ行ったらわかると思います。
brew.sh
で、目的のYouTubeの動画を保存するパッケージは、「yt-dlp」というパッケージです。
まずは、ターミナルを開いてHomebrewでyt-dlpパッケージをインストールします。
続いて、動画・音声の設定用にffmpegパッケージを入れます。
コマンドは下記の通りです。
brew install yt-dlp brew install ffmpeg
これで準備は終わりです。
使い方
yt-dlpの基本的なコマンドは下記の通りです。
yt-dlp [Url] [Option(省略可)]
例としては下記のような書き方になります。
yt-dlp "https://www.youtube.com/watch?v=A_uB51ZuCy0"
ちなみに例として使用しているYouTubeの動画は先日公開された戌神ころねさんの新しいオリジナル曲『TROUBLE “WAN”DER!』です。
ころさんらしい小ネタが満載で楽しい楽曲・MVになっています。
ぜひ、観てみてください。
話がそれました。
上記コマンドをターミナルで実行すると、YouTubeの動画が実行したディレクトリ上にwebm形式で保存されます。
Googleのサービスだから、標準の規格がwebmになっているんですね。
保存形式の指定
このままだと、面倒なのでオプション指定をします。
『-format』オプションを指定すると、出力形式の指定が出来ます。
ということで、下記のようにオプションを追加してみます。
yt-dlp "https://www.youtube.com/watch?v=A_uB51ZuCy0" --format mp4
上記のコマンドを実行すると、少し時間がかかってからmp4形式で保存されているかと思います。
これで、基本的なYouTube動画の保存ができるようになりました。
音声ファイルのみ保存したい
私的には、音声のみを保存したいので、オプションを書き換えていきます。
まずは、『-F』と『-f』というオプションがあるのですが、最初に『-F』のみを追加した状態でコマンドを実行します。
yt-dlp "https://www.youtube.com/watch?v=A_uB51ZuCy0" -F
すると、下記のような表が表示されます。
これは、どの形式で保存しますか?という表になっており、『-f』オプションに使用する値を調べる表になります。
ID EXT RESOLUTION FPS CH │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC ABR ASR MORE INFO ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── sb3 mhtml 48x27 0 │ mhtml │ images storyboard sb2 mhtml 80x45 1 │ mhtml │ images storyboard sb1 mhtml 160x90 1 │ mhtml │ images storyboard sb0 mhtml 320x180 1 │ mhtml │ images storyboard 233 mp4 audio only │ m3u8 │ audio only unknown [en] Default 234 mp4 audio only │ m3u8 │ audio only unknown [en] Default 599 m4a audio only 2 │ 794.04KiB 31k https │ audio only mp4a.40.5 31k 22k [en] ultralow, m4a_dash 600 webm audio only 2 │ 829.83KiB 32k https │ audio only opus 32k 48k [en] ultralow, webm_dash 139 m4a audio only 2 │ 1.23MiB 49k https │ audio only mp4a.40.5 49k 22k [en] low, m4a_dash 249 webm audio only 2 │ 1.20MiB 48k https │ audio only opus 48k 48k [en] low, webm_dash 250 webm audio only 2 │ 1.59MiB 63k https │ audio only opus 63k 48k [en] low, webm_dash 140 m4a audio only 2 │ 3.26MiB 130k https │ audio only mp4a.40.2 130k 44k [en] medium, m4a_dash 251 webm audio only 2 │ 3.16MiB 125k https │ audio only opus 125k 48k [en] medium, webm_dash 597 mp4 256x144 12 │ 836.90KiB 32k https │ avc1.4d400b 32k video only 144p, mp4_dash 602 mp4 256x144 12 │ ~ 2.10MiB 84k m3u8 │ vp09.00.10.08 84k video only 598 webm 256x144 12 │ 627.62KiB 24k https │ vp9 24k video only 144p, webm_dash 269 mp4 256x144 24 │ ~ 4.25MiB 169k m3u8 │ avc1.4D400C 169k video only 160 mp4 256x144 24 │ 1.66MiB 66k https │ avc1.4D400C 66k video only 144p, mp4_dash 603 mp4 256x144 24 │ ~ 4.16MiB 165k m3u8 │ vp09.00.11.08 165k video only 278 webm 256x144 24 │ 1.76MiB 70k https │ vp09.00.11.08 70k video only 144p, webm_dash 229 mp4 426x240 24 │ ~ 7.23MiB 287k m3u8 │ avc1.4D4015 287k video only 133 mp4 426x240 24 │ 3.06MiB 122k https │ avc1.4D4015 122k video only 240p, mp4_dash 604 mp4 426x240 24 │ ~ 7.07MiB 281k m3u8 │ vp09.00.20.08 281k video only 242 webm 426x240 24 │ 3.42MiB 136k https │ vp09.00.20.08 136k video only 240p, webm_dash 230 mp4 640x360 24 │ ~ 12.95MiB 515k m3u8 │ avc1.4D401E 515k video only 134 mp4 640x360 24 │ 5.59MiB 222k https │ avc1.4D401E 222k video only 360p, mp4_dash 18 mp4 640x360 24 2 │ 12.14MiB 482k https │ avc1.42001E mp4a.40.2 44k [en] 360p 605 mp4 640x360 24 │ ~ 14.88MiB 592k m3u8 │ vp09.00.21.08 592k video only 243 webm 640x360 24 │ 6.32MiB 251k https │ vp09.00.21.08 251k video only 360p, webm_dash 231 mp4 854x480 24 │ ~ 20.12MiB 800k m3u8 │ avc1.4D401E 800k video only 135 mp4 854x480 24 │ 11.27MiB 448k https │ avc1.4D401E 448k video only 480p, mp4_dash 606 mp4 854x480 24 │ ~ 23.02MiB 915k m3u8 │ vp09.00.30.08 915k video only 244 webm 854x480 24 │ 8.87MiB 352k https │ vp09.00.30.08 352k video only 480p, webm_dash 22 mp4 1280x720 24 2 │ ≈ 24.30MiB 966k https │ avc1.64001F mp4a.40.2 44k [en] 720p 232 mp4 1280x720 24 │ ~ 37.10MiB 1475k m3u8 │ avc1.4D401F 1475k video only 136 mp4 1280x720 24 │ 21.04MiB 837k https │ avc1.4D401F 837k video only 720p, mp4_dash 609 mp4 1280x720 24 │ ~ 45.17MiB 1796k m3u8 │ vp09.00.31.08 1796k video only 247 webm 1280x720 24 │ 20.81MiB 827k https │ vp09.00.31.08 827k video only 720p, webm_dash 270 mp4 1920x1080 24 │ ~142.58MiB 5668k m3u8 │ avc1.640028 5668k video only 137 mp4 1920x1080 24 │ 109.36MiB 4348k https │ avc1.640028 4348k video only 1080p, mp4_dash 614 mp4 1920x1080 24 │ ~ 87.64MiB 3484k m3u8 │ vp09.00.40.08 3484k video only 248 webm 1920x1080 24 │ 66.57MiB 2647k https │ vp09.00.40.08 2647k video only 1080p, webm_dash 616 mp4 1920x1080 24 │ ~143.73MiB 5714k m3u8 │ vp09.00.40.08 5714k video only Premium
出力したい形式を『-f ID』で指定します。
音声のみが欲しいので、ID「599」「139」「140」の辺りになります。
なので、コマンドは下記の通りになります。
yt-dlp "https://www.youtube.com/watch?v=A_uB51ZuCy0" -f 140
これで、音声ファイルのみの保存をすることができるようになりました。
ちなみに、表にあるvideo onlyのIDを指定すると映像のみで音声がないファイルが出力されます。
音声もつけたい場合は、下記のように書く必要があります。
yt-dlp "https://www.youtube.com/watch?v=A_uB51ZuCy0" -f 137+140 --merge-output-format mp4
『-f』オプションに『映像ID+音声ID』を指定して、『--marge-output-format』オプションで映像IDと音声IDの形式を合体してmp4形式で出力させる指定をしています。
もう一手間
これで、目的の音声のみ保存ができるようになったのですが、毎回毎回URLを書き換えて実行は面倒なのでcommandファイルで簡単に実行できるようにしていきます。
まずは、適当にcommandファイルを作成して、下記のように記述して保存します。
#!/bin/bash echo "Youtube Video Url:" read url yt-dlp "$url" -f 140 --output '~/Downloads/%(channel)s/%(title)s.%(ext)s' --write-thumbnail --convert-thumbnails jpg osascript -e 'tell application "Terminal" to close first window'
echoは、何も表示されないと寂しいから書いているだけです。
readコマンドで、動画URLの入力待ち状態にしています。
yt-dlpのところは、『$url』で入力されたURLを指定しており、『--output』オプションで、どこに保存するかを指定しています。
内容は、ダウンロードフォルダにチャンネル名のフォルダを作って、その中に動画タイトル名で保存してね、という内容です。
『--write-thumbnail』オプションは、一緒にサムネイルも保存してね、という内容です。
『--convert-thumbnails』オプションは、指定しないとGoogle規格のwebp形式で保存されるので、jpgで保存するように指定しています。
最後の行の『osascript』コマンドは、処理が終わったらウィンドウを閉じる確認ダイアログを出すコマンドになってます。
処理が終わったあと、[プロセスが終了しました]でウィンドウが開いたままになってしまうのを防ぐ目的に書いています。
これであとは、commandファイルに実行権限をつけてダブルクリックするだけで、ターミナルが起動してURL入力待ち状態になるので、YouTube動画のURLをコピペするだけで、ダウンロードフォルダに音声ファイルとサムネイルが保存されるようになります。
Dockに追加する
Dockの右側にcommandファイルをドラッグ&ドロップで追加することができるので、頻繁に使うようなら追加したら起動が楽ちんです。
yt-dlpについて
まさか、こんな便利なパッケージがあったとは...。
制作者に感謝です!!
Macで、とタイトルでは書いているけどPythonで出来ており、WindowsでもLinuxでも同じように動かせるようです。
masayoshi-9a7ee.hatenablog.com
なんか、久しぶりに長い記事を書いた気がする...🫠