iPhone によるスクリーンキャプチャ
機種替えなどで余っている iOS 端末があれば、標準機能である画面収録(スクリーンキャプチャ)をいつでも開始できるようにしておくと便利です。コントロールセンターに画面収録が無い場合は、設定>コントロールセンターから画面収録を表示アイコンに加えましょう。
画面の表示がそのままキャプチャされるため、お休みモードをオンにして、録画中は画面の向きが変わらないよう注意します。また、音量を完全にミュートしてしまうと無音になるので、周囲に音が聞こえないようにしたい場合でも最低レベルまでにします(この状態でも動画の音量は通常の大きさです)。
youtube-dl + FFmpeg の組み合わせ
コマンドラインプログラムであり、うまく使えば強力なツールです。そのためには、ある程度 YouTube の仕様と動画のフォーマットの知識が必要になります。
YouTube の場合、ライブ配信中 → 終了直後 → アーカイブ完了 の各段階で対応が変わってきます。ライブ配信中~終了直後は、HLS (HTTP Live Streaming) になっており、この段階でストリームキャプチャした場合が最も画質が高くなります。
ライブ配信中
ライブ中は HLS ストリームデータのみになります。ライブはアーカイブにならない可能性もあり、保険の意味でこの段階の早いうちにストリームキャプチャを開始したいところです。
なお、オプションで --hls-use-mpegts を使ってください。理由は、正常に終了しなかったライブなどで Ctrl+C で中断すると mp4 にリネームしても再生不能な動画になってしまう可能性が高いためです。
format code extension resolution note 91 mp4 256x144 HLS 197k , avc1.4d400c, 30.0fps, mp4a.40.5@ 48k 92 mp4 426x240 HLS 338k , avc1.4d4015, 30.0fps, mp4a.40.5@ 48k 93 mp4 640x360 HLS 829k , avc1.4d401e, 30.0fps, mp4a.40.2@128k 94 mp4 854x480 HLS 1380k , avc1.4d401f, 30.0fps, mp4a.40.2@128k 95 mp4 1280x720 HLS 2593k , avc1.4d401f, 30.0fps, mp4a.40.2@256k (best)
具体的なコマンドは下記のとおりになります。
youtube-dl.exe --hls-use-mpegts https://www.youtube.com/watch?v=xxxxxxxxxxx
ライブ終了直後
ライブ終了直後から MPEG-DASH も選択可能になりますが、これは HLS とほぼ同等のデータと思われます。頭から保存したい場合で画質の劣化を抑えたい場合は、この段階が終了する前にダウンロードを開始しなければなりません。なお、ダウンロード開始していれば動画が削除されても最後まで受信できる可能性があります(たぶん)。
format code extension resolution note 139 m4a audio only DASH audio 64k , m4a_dash container, mp4a.40.5@ 48k (24000Hz) 140 m4a audio only DASH audio 144k , m4a_dash container, mp4a.40.2@128k (48000Hz) 160 mp4 256x144 DASH video 124k , mp4_dash container, avc1.4d400c, 30fps, video only 133 mp4 426x240 DASH video 258k , mp4_dash container, avc1.4d4015, 30fps, video only 134 mp4 640x360 DASH video 646k , mp4_dash container, avc1.4d401e, 30fps, video only 135 mp4 854x480 DASH video 1171k , mp4_dash container, avc1.4d401f, 30fps, video only 136 mp4 1280x720 DASH video 2326k , mp4_dash container, avc1.4d401f, 30fps, video only 91 mp4 256x144 HLS 197k , avc1.4d400c, 30.0fps, mp4a.40.5@ 48k 92 mp4 426x240 HLS 338k , avc1.4d4015, 30.0fps, mp4a.40.5@ 48k 93 mp4 640x360 HLS 829k , avc1.4d401e, 30.0fps, mp4a.40.2@128k 94 mp4 854x480 HLS 1380k , avc1.4d401f, 30.0fps, mp4a.40.2@128k 95 mp4 1280x720 HLS 2593k , avc1.4d401f, 30.0fps, mp4a.40.2@256k (best)
コマンドでは --hls-use-mpegts を付けない方が良いと思います。付けた場合の MPEG-TS は再生時にシークなどが重くなる(ストリーミング再生に適したフォーマットでシークは苦手な)ためです。付けない場合 DASH が選択され(なぜか best が付くのは HLS ですが)ますし、HLS が選択された場合でも MPEG-4 AVC になります。
youtube-dl.exe https://www.youtube.com/watch?v=xxxxxxxxxxx
また、ライブ配信中はどうしても途中からの録画になってしまいますので、配信終了直後に再度ダウンロードするようなバッチファイルを作成しておくと便利です。(追記へ)
ytlive-dl.bat
youtube-dl.exe --hls-use-mpegts -o "[%(upload_date)s] %(title)s - %(id)s onlive.%(ext)s" https://www.youtube.com/watch?v=%1 youtube-dl.exe -o "[%(upload_date)s] %(title)s - %(id)s complete.%(ext)s" https://www.youtube.com/watch?v=%1
アーカイブ完了後
その後アーカイブ処理が行われ通常の動画扱いになりますが、この際に再エンコードが行われ画質低下があります。また HLS データは削除され MPEG-DASH は残ったように見えますが、これは再エンコードされたもののようです。再エンコード時には、解像度が標準と異なる場合はリサイズされ、最悪のケースでは黒ベタが付いて更に解像度が落ちるようです。
ちなみに、アーカイブ処理が終わるとデータコピーが行われるためか、YouTube サイト上で動画が2個あるような表示になります。この状態を目安にすれば、間もなくアーカイブ処理が終了することが判断できます。
format code extension resolution note 139 m4a audio only DASH audio 51k , m4a_dash container, mp4a.40.5@ 48k (22050Hz), 3.72MiB 140 m4a audio only DASH audio 98k , m4a_dash container, mp4a.40.2@128k (44100Hz), 7.42MiB 160 mp4 256x144 DASH video 108k , mp4_dash container, avc1.4d400b, 30fps, video only 133 mp4 426x240 DASH video 242k , mp4_dash container, avc1.4d400c, 30fps, video only 134 mp4 640x360 DASH video 637k , mp4_dash container, avc1.4d401e, 30fps, video only, 21.66MiB 135 mp4 854x480 DASH video 1155k , mp4_dash container, avc1.4d4014, 30fps, video only 136 mp4 1280x720 DASH video 2320k , mp4_dash container, avc1.4d401f, 30fps, video only, 86.31MiB 17 3gp 176x144 small , mp4v.20.3, mp4a.40.2@ 24k, 6.62MiB 36 3gp 320x180 small , mp4v.20.3, mp4a.40.2, 18.95MiB 18 mp4 640x360 medium , avc1.42001E, mp4a.40.2@ 96k, 36.35MiB 22 mp4 1280x720 hd720 , avc1.64001F, mp4a.40.2@192k (best)
アーカイブ後は通常の動画と同じコマンドです。
youtube-dl.exe https://www.youtube.com/watch?v=xxxxxxxxxxx
補足情報
youtube-dl はデフォルトでベストな動画を選択してダウンロードしようとしますが、必ずしもベスト(様々な要求があるので仕方ありませんが)ではありません。特に縦長の動画に対しては、解像度の低いフォーマットが選択されてしまう場合があるので注意が必要です。
自分でフォーマットを選択したい場合は、まず -F オプションを付けてフォーマットリストを取得します。その中から、ダウンロードしたいフォーマットの番号を確認して -f <フォーマット番号> と指定してダウンロードさせます。注意点としては、video only になっているフォーマットは、-f "137+140" のように audio only になっている音声フォーマットも選んでください。この時フォーマットを合わせないと mkv になりますので、mp4 なら m4a、webm なら揃えて選ぶと良いと思います。
毎回手動でフォーマットを選ぶのは現実的では無いので、アッパースクリプトで制御して自分にとって適切なフォーマットが選ばれるような対応した方がいいでしょう。フォーマットの選び方は、人それぞれ好みがあると思いますので、ここでは私の使っているロジックのみ紹介しておきます。
- youtube-dl -F でフォーマットリストを取得する
- ビデオフォーマットで面積を計算して一番大きいものを選択(mp4 や webm はどちらでもよいが、同じ解像度は mp4 を優先する)
- ビデオフォーマットが video only の場合は、オーディオフォーマットを選ぶ
- オーディオフォーマットはビットレートが一番大きいものを選択(ただしビデオフォーマットに合わせて mp4 / m4a、もしくは webm / webm の組み合わせ)
- 選定したフォーマットを指定してダウンロードを実行する
解像度を何よりも優先するのがポイントです。これで今のところ最高画質の動画が選ばれるはずです。ただし、アップロード者が YouTube の再エンコード処理の終了を待たずに動画を公開した場合、すべての解像度が揃っていない場合があります。これは判定が難しいので、アップロードして間もない動画で解像度が低い場合は、時間を置いてもう一度ダウンロードしてみることをお勧めします。
追記
ライブ終了直後に再度ダウンロードを開始した場合、すべてのピースが揃っていない動画になることがあるようです。例えば、2時間半くらいのライブで最初の30分間がカットされていたことがありました。最初の30分を含めた長さの動画は、HLS データが削除されアーカイブされた後にダウンロード可能になりました。
従って、確実にダウンロードしたい場合は、下記のようにするのがベストかと思います。
- ライブが開始されたら早い時間に、--use-mpegts オプションでダウンロード開始する(終了直後に削除される設定の場合はこのキャプチャでしか取れません)
- ライブが終了したら、すぐに再ダウンロードを開始する(ユーザーが手動で削除してしまう場合もあるので直後に開始します。開始してフックしまえば最後まで取れます)
- アーカイブ終了したら、もう一度ダウンロードをする(動画の長さが足りない場合があるので取得しておきます。但し、リサイズされてしまう場合があります)