Ubuntuで Youtube 動画のダウンロードに使っている ダウンローダ ー、 ClipGrab で指定した画質で取得出来ていない動画があり、 youtube-dl を使った解析と、フォーマット指定でのダウンロードと、さらに TVer からのダウンロードも試してみました。
ClipGrab on Ubuntu
Youtubeを始めとする多くの動画サイトに対応したダウンローダとして、Linuxで使えてGUIがシンプルで使いやすいClipGrabをずっと使ってきました。Ubuntu 18.04では以下の要領でLaunchPadの公式レポジトリを登録してインストールしました。
1 2 3 |
$ sudo add-apt-repository ppa:clipgrab-team/ppa $ sudo apt-get update $ sudo apt-get install clipgrab |
ですが、既にレポジトリの更新は廃止しているようで、ver.3.8.10で止まっています。この手のダウンローダは刻々と変わる動画サイト側の仕様に対応すべく、常に最新にしていないと機能しません(下図はレポジトリ版でエラーになる様子)。
AppImage版ClibGrab
最新版のClipGrabは公式サイトより、各プラットフォーム向けインストーラをダウンロードすることができ、Ubuntum向けにはAppImage版と言う、既にインストールされているソフトウェアの依存関係から独立した、Sandboxのような形で配布されているので、これをダウンロードして実行権限を付与し、ダブルクリックするだけでアプリが開きます。
公式サイトが何故か2つあり、言語によってドメインを分けているようですが、どちらからでも同じバージョンをダウンロードすることが出来ます。
ちなみにこのAppImage版の難点はファイルサイズで、システムにインストールしていた頃のバイナリと比べ、何十倍のファイルサイズになってしまいます。
1 2 3 4 5 |
$ ll ~/Downloads/ClipGrab-3.9.6-x86_64.AppImage -rwxrwxr-x 1 user user 95706824 Jul 19 09:36 ~/Downloads/ClipGrab-3.9.6-x86_64.AppImage* ClipGrab $ ll /usr/bin/clipgrab -rwxr-xr-x 1 root root 1177840 Dec 31 2019 /usr/bin/clipgrab* |
使い方は簡単で、動画ページのURIをClipGrabに貼り付け、ダウンロード可能な動画解像度を選んだら、ダウンロードボタンを押すだけです。
普段これで問題なく快適に使えたのですが、ある日ダウンロードした動画がHD1080P指定したはずが、再生してみるとどうみても画質がかなり低くてギザギザに。
youtube-dlのインストール
そこで試してみたのがこのyoutube-dlです。その名の通りこちらもYoutubeを始めとする主要な動画サイトから、動画をダウンロード出来るツールなのですが、ClipGrabと違ってGUIは用意されておらずCLIで操作します。そしてこちらもLinuxのみならずさまざまなOSで動作するよう作られています。
インストールは、Pythonで組まれたバイナリを公式サイトからダウンロードして実行に必要な権限を付与するのみ。
1 2 3 4 5 6 7 8 9 10 11 |
$ sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 3 100 3 0 0 1 0 0:00:03 0:00:01 0:00:02 1 100 3 100 3 0 0 1 0 0:00:03 0:00:01 0:00:02 0 100 614 100 614 0 0 246 0 0:00:02 0:00:02 --:--:-- 246 100 1797k 100 1797k 0 0 656k 0 0:00:02 0:00:02 --:--:-- 656k $ sudo chmod a+rx /usr/local/bin/youtube-dl $ ll /usr/local/bin/youtube-dl -rwxr-xr-x 1 root root 1840311 Jul 28 10:24 /usr/local/bin/youtube-dl* |
その他、各プラットフォーム向けのインストール方法や、オプションの使用法について、GitHubのプロジェクトページに詳しく解説されています。
そしてダウンローダの要とも言えるアップデートは、専用のオプションを付けて実行します。
1 2 |
$ youtube-dl -U youtube-dl is up-to-date (2021.06.06) |
ちなみに apt パッケージマネージャからもインストール出来ますが、こちらは少し古いバージョンでした。
1 2 3 |
$ sudo apt search youtube-dl youtube-dl/focal 2020.03.24-1 all downloader of videos from YouTube and other sites |
比較的最近のUbuntuでは、Python2が入っておらずPython3のみ入っているものの、デフォルトでは python コマンドが python3 にリンクしていないので、youtube-dlの実行前に以下の要領で確認、
1 2 3 4 5 6 7 8 9 |
$ python3 Python 3.8.10 (default, Jun 2 2021, 10:49:15) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. $ python Command 'python' not found, did you mean: command 'python3' from deb python3 command 'python' from deb python-is-python3 |
必要であれば python-is-python3 をインストールします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ sudo apt install python-is-python3 Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: python-is-python3 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 2,364 B of archives. After this operation, 10.2 kB of additional disk space will be used. Get:1 http://ap-osaka-1-ad-1.clouds.ports.ubuntu.com/ubuntu-ports focal/main arm64 python-is-python3 all 3.8.2-4 [2,364 B] Fetched 2,364 B in 0s (6,704 B/s) Selecting previously unselected package python-is-python3. (Reading database ... 133416 files and directories currently installed.) Preparing to unpack .../python-is-python3_3.8.2-4_all.deb ... Unpacking python-is-python3 (3.8.2-4) ... Setting up python-is-python3 (3.8.2-4) ... |
尚、youtube-dlは別途ffmpeg(もしくはavconv)が必須なので、実行時に次のようなエラーが挙がった場合は、確認してみてください。
1 |
ERROR: m3u8 download detected but ffmpeg or avconv could not be found. Please install one. |
youtube-dlの使い方 : Youtube
先ほどClipGrabで画質が低くなってしまったYoutube動画について、早速youtube-dlを試してみます。まず、動画で利用可能な映像・音声フォーマットの一覧を取得してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$ youtube-dl --list-formats https://www.youtube.com/watch?v=PJX2h07e### [youtube] PJX2h07eCH0: Downloading webpage [info] Available formats for PJX2h07e###: format code extension resolution note 249 webm audio only tiny 49k , webm_dash container, opus @ 49k (48000Hz), 20.91MiB 250 webm audio only tiny 66k , webm_dash container, opus @ 66k (48000Hz), 27.78MiB 140 m4a audio only tiny 129k , m4a_dash container, mp4a.40.2@129k (44100Hz), 54.15MiB 251 webm audio only tiny 131k , webm_dash container, opus @131k (48000Hz), 54.81MiB 160 mp4 256x144 144p 36k , mp4_dash container, avc1.4d400c@ 36k, 30fps, video only, 15.37MiB 278 webm 256x144 144p 74k , webm_dash container, vp9@ 74k, 30fps, video only, 31.07MiB 133 mp4 426x240 240p 77k , mp4_dash container, avc1.4d4015@ 77k, 30fps, video only, 32.23MiB 242 webm 426x240 240p 93k , webm_dash container, vp9@ 93k, 30fps, video only, 39.13MiB 134 mp4 640x360 360p 138k , mp4_dash container, avc1.4d401e@ 138k, 30fps, video only, 58.11MiB 243 webm 640x360 360p 158k , webm_dash container, vp9@ 158k, 30fps, video only, 66.28MiB 135 mp4 854x480 480p 224k , mp4_dash container, avc1.4d401f@ 224k, 30fps, video only, 93.68MiB 244 webm 854x480 480p 231k , webm_dash container, vp9@ 231k, 30fps, video only, 96.88MiB 136 mp4 1280x720 720p 367k , mp4_dash container, avc1.4d401f@ 367k, 30fps, video only, 153.77MiB 247 webm 1280x720 720p 391k , webm_dash container, vp9@ 391k, 30fps, video only, 163.89MiB 137 mp4 1920x1080 1080p 1112k , mp4_dash container, avc1.640028@1112k, 30fps, video only, 465.29MiB 248 webm 1920x1080 1080p 1128k , webm_dash container, vp9@1128k, 30fps, video only, 472.09MiB 18 mp4 640x360 360p 415k , avc1.42001E, 30fps, mp4a.40.2 (44100Hz), 173.67MiB (best) |
ここで行末に (best) と付与されている設定が、明らか低画質であることに気付きました。このままダウンロードしてしまうとおそらく設定が適用されてしまうので、高画質で取得したい場合は -f オプションでコード指定する必要があります。
1 |
$ youtube-dl -f 248+251 https://www.youtube.com/watch?v=PJX2h07e### |
次のように指定すると、webmではなくmp4形式に変換出力されるのですが、正常に再生出来ないことがあるので、ダウンロードと変換は別個に実行した方が良さそうです。
1 |
$ youtube-dl -f 248+251 --merge-output-format mp4 https://www.youtube.com/watch?v=PJX2h07e### |
youtube-dlの使い方 : TVer
youtube-dlの対象動画サービス一覧にTVerがあるのを見つけ、試してみることにします。日本国内ではブラウザで高画質なコンテンツを簡単に閲覧出来るTVerも、海外からは当然、Geo Restrictedエラーにより閲覧不能です。
youtube-dlには、このGeo Restricted回避の為のオプションも用意されていますが、
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ youtube-dl --help Usage: youtube-dl [OPTIONS] URL [URL...] Options: Geo Restriction: --geo-verification-proxy URL Use this proxy to verify the IP address for some geo-restricted sites. The default proxy specified by --proxy (or none, if the option is not present) is used for the actual downloading. --geo-bypass Bypass geographic restriction via faking X-Forwarded-For HTTP header --no-geo-bypass Do not bypass geographic restriction via faking X-Forwarded-For HTTP header --geo-bypass-country CODE Force bypass geographic restriction with explicitly provided two-letter ISO 3166-2 country code --geo-bypass-ip-block IP_BLOCK Force bypass geographic restriction with explicitly provided IP block in CIDR |
実はこうしたオプションを付与せずとも、youtube-dlから普通にダウンロード出来るようです。まずは利用可能なフォーマットの取得から。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
$ youtube-dl --list-formats https://tver.jp/corner/f0079### [TVer] Downloading JSON metadata [TVer] f0079639: Downloading JSON metadata [brightcove:new] 6265221082001: Downloading JSON metadata [brightcove:new] 6265221082001: Downloading m3u8 information [brightcove:new] 6265221082001: Downloading m3u8 information [brightcove:new] 6265221082001: Downloading m3u8 information [brightcove:new] 6265221082001: Downloading m3u8 information [brightcove:new] 6265221082001: Downloading MPD manifest [brightcove:new] 6265221082001: Downloading MPD manifest [info] Available formats for 6265221082001: format code extension resolution note hls-audio-0-en__Main_-0 mp4 audio only [en] hls-audio-0-en__Main_-1 mp4 audio only [en] hls-audio-1-en__Main_-0 mp4 audio only [en] hls-audio-1-en__Main_-1 mp4 audio only [en] hls-audio-2-en__Main_-0 mp4 audio only [en] hls-audio-2-en__Main_-1 mp4 audio only [en] dash-d2b7a46a-26e6-44fa-8c5d-5145dd9dc2a6-0 m4a audio only [en] DASH audio 63k , m4a_dash container, mp4a.40.2 (48000Hz) dash-d2b7a46a-26e6-44fa-8c5d-5145dd9dc2a6-1 m4a audio only [en] DASH audio 63k , m4a_dash container, mp4a.40.2 (48000Hz) dash-38e04949-ae89-452c-bcd2-0e2ead48ef42-0 m4a audio only [en] DASH audio 127k , m4a_dash container, mp4a.40.2 (48000Hz) dash-38e04949-ae89-452c-bcd2-0e2ead48ef42-1 m4a audio only [en] DASH audio 127k , m4a_dash container, mp4a.40.2 (48000Hz) dash-8822a860-d465-45c6-ae45-84be1740f97e-0 m4a audio only [en] DASH audio 192k , m4a_dash container, mp4a.40.2 (48000Hz) dash-8822a860-d465-45c6-ae45-84be1740f97e-1 m4a audio only [en] DASH audio 192k , m4a_dash container, mp4a.40.2 (48000Hz) dash-a331cc16-b86e-44c8-a1b0-9a469be91f18-0 mp4 480x270 DASH video 251k , mp4_dash container, avc1.420015, video only dash-a331cc16-b86e-44c8-a1b0-9a469be91f18-1 mp4 480x270 DASH video 251k , mp4_dash container, avc1.420015, video only hls-345-0 mp4 480x270 345k , avc1.420015, video only hls-345-1 mp4 480x270 345k , avc1.420015, video only dash-3833b114-5cf9-4ccf-9a42-d34e0d9b7c87-0 mp4 640x360 DASH video 418k , mp4_dash container, avc1.4d001e, video only dash-3833b114-5cf9-4ccf-9a42-d34e0d9b7c87-1 mp4 640x360 DASH video 418k , mp4_dash container, avc1.4d001e, video only hls-599-0 mp4 640x360 599k , avc1.4d001e, video only hls-599-1 mp4 640x360 599k , avc1.4d001e, video only dash-124f2050-26eb-40f3-b4f1-9d80b354fc25-0 mp4 960x540 DASH video 775k , mp4_dash container, avc1.4d001f, video only dash-124f2050-26eb-40f3-b4f1-9d80b354fc25-1 mp4 960x540 DASH video 775k , mp4_dash container, avc1.4d001f, video only hls-1063-0 mp4 960x540 1063k , avc1.4d001f, video only hls-1063-1 mp4 960x540 1063k , avc1.4d001f, video only dash-67bc8a2d-f0fa-4620-8aa1-16de1519bde2-0 mp4 1280x720 DASH video 1256k , mp4_dash container, avc1.4d001f, video only dash-67bc8a2d-f0fa-4620-8aa1-16de1519bde2-1 mp4 1280x720 DASH video 1256k , mp4_dash container, avc1.4d001f, video only hls-1592-0 mp4 1280x720 1592k , avc1.4d001f, video only hls-1592-1 mp4 1280x720 1592k , avc1.4d001f, video only dash-caf4d365-6d51-42cd-8151-f02ab2138c96-0 mp4 1920x1080 DASH video 2688k , mp4_dash container, avc1.640028, video only dash-caf4d365-6d51-42cd-8151-f02ab2138c96-1 mp4 1920x1080 DASH video 2688k , mp4_dash container, avc1.640028, video only hls-3168-0 mp4 1920x1080 3168k , avc1.640028, video only hls-3168-1 mp4 1920x1080 3168k , avc1.640028, video only hls-345-2 mp4 480x270 345k , avc1.420015, mp4a.40.2 hls-345-3 mp4 480x270 345k , avc1.420015, mp4a.40.2 hls-599-2 mp4 640x360 599k , avc1.4d001e, mp4a.40.2 hls-599-3 mp4 640x360 599k , avc1.4d001e, mp4a.40.2 hls-1063-2 mp4 960x540 1063k , avc1.4d001f, mp4a.40.2 hls-1063-3 mp4 960x540 1063k , avc1.4d001f, mp4a.40.2 hls-1592-2 mp4 1280x720 1592k , avc1.4d001f, mp4a.40.2 hls-1592-3 mp4 1280x720 1592k , avc1.4d001f, mp4a.40.2 hls-3168-2 mp4 1920x1080 3168k , avc1.640028, mp4a.40.2 hls-3168-3 mp4 1920x1080 3168k , avc1.640028, mp4a.40.2 (best) |
(best)が高画質にセットされているので、デフォルトで高画質ダウンロードになり、必然的にダウンロード掛かる時間も長くなります。少し低めの解像度を -o オプションで保存先指定して、以下の要領でダウンロードしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ youtube-dl -f hls-1592-3 https://tver.jp/corner/f0079### -o "/str500/download/%(title)s.%(ext)s" [TVer] Downloading JSON metadata [TVer] f0079639: Downloading JSON metadata [brightcove:new] 6265221082001: Downloading JSON metadata [brightcove:new] 6265221082001: Downloading m3u8 information [brightcove:new] 6265221082001: Downloading m3u8 information [brightcove:new] 6265221082001: Downloading m3u8 information [brightcove:new] 6265221082001: Downloading m3u8 information [brightcove:new] 6265221082001: Downloading MPD manifest [brightcove:new] 6265221082001: Downloading MPD manifest [hlsnative] Downloading m3u8 manifest [hlsnative] Total fragments: 573 [download] Destination: /str500/download/#####################################.mp4 [download] 100% of 1.03GiB in 18:13 [ffmpeg] Fixing malformed AAC bitstream in "/str500/download/#####################################.mp4" |
今回ClipGrabのちょっとしたダウンロード不具合に始まり、youtube-dlを使ったYoutube動画の画質指定ダウンロードと、その応用としてyoutube-dlを使えばTVerでの動画ダウンロード出来ることを知ることが出来ました。