とあるサイトの動画の内部形式が変更になってmp4ファイル形式で動画がダウンロードできなくなりました。
ダウンロードすると落ちてくるファイルは拡張子がm3u8というわけのわからない小さなファイル。メモ帳で中身を見てみると.tsのファイル名っぽいのが記述されただけのテキストファイル。
こんなのでシュッシュッしろってレベル高すぎんよ・・・。
って思ってる人がいそうなので、m3u8ファイルのダウンロード方法を解説します。
ちなみに著作権がどうとかいろいろアレな話が絡みそうなので自己責任で!
ニコニコ動画をダウンロードする方法は以下の記事にて。
もくじ
m3u8ファイルとは何か?
これは単なるプレイリストファイルで、どの順番でどの動画ファイルを読み込んでいくかというただのテキストファイルに過ぎない。
元々の大きな動画ファイルを分割して細切れにした状態でサーバにtsの動画ファイルとしてアップされています。
このプレイリストのテキストファイルをutf-8で記述しましたよ、っていう意味の拡張子です。
対応したアプリだと順番に再生してくれるけど、もちろんネットから読み出しながらストリーミングで再生するのでシークは遅いしそもそも読み込み速度はネットワークに依存します。
ダウンロードしてみよう
m3u8ファイルには動画のファイル名が記述されていて、そのURLへアクセスしたら確かに動画がダウンロードできます。が、分割されたファイルになっていて、長時間の動画だと何十ものファイル数になっていたりします。
こんなのいちいちダウンロードしてられないので、これをまとめてダウンロードして結合までしてくれるアプリを使います。
ffmpegのインストール
このffmpegっていうアプリはm3u8ファイルを元に動画ファイルをダウンロードして結合してくれます。
インストールと言っても、本体はそのまま実行形式のファイルなので適当なフォルダに置いてコマンドプロンプトから実行するだけ。レジストリにゴミを残すこともないしスタートメニューに鎮座することもない。アンインストールはffmpegの入ったフォルダを削除するだけでOK。
ではさっそく使ってみます。
まずはffmpegのダウンロードから
公式サイト(https://www.ffmpeg.org/)へアクセス、左の
「Download」をクリック。
プラットフォームを選ぶ画面になるのでwindowsアイコンをクリック。
「Windows Packages」となりその下に
「Windows Builds」と表示されるのでこれをクリックするとダウンロードが始まる。
ダウンロードしたファイルを解凍すると3つのフォルダとテキストファイルが出てくるので、
binフォルダの中に入っている.exeファイルを好きな場所へコピーする。
(※日本語のフォルダ名は避けたほうがいいです)
Windowsのフォルダオプションで拡張子の表示をしない設定にしてある場合は.exeの部分は表示されません。デフォルトだと拡張子は表示されません。
僕はローカルディスク(C:)のルートにフォルダを作ってそこへ入れました。
「スタート」→「エクスプローラ」→「PC」→「ローカルディスク(C:)」とクリックしていった場所です。
そこに新しくffmpegというフォルダを作成します。
これで下準備完了。
この作業は初回のみで、次回からは必要がない手順。
動画サイトへアクセス
目的の動画のページを表示したら、右クリックで「ページのソースを表示」。
右クリックが禁止されているサイトはCtlr+uキーを試してみる。
これでもダメな場合はちょっと面倒だけどf12キーを押してデバッガモードにし、デバッガウインドウの「Source」タブをクリックするとhtmlソースコードが表示される(chromeの場合)。
ページのhtmlソースが表示されたら、その中から.m3u8という文字を見つける。
ctrl+fで検索すると速い。
見つけたら、m3u8の部分のアドレスをコピーしてメモ帳などに控えておく。
http://なんちゃら.m3u8 ってなってる部分です。
.m3u8のうしろにパラメーター(「=?以下続く謎の英数字」などの文字)が付いている場合はそれも含めて。
「“(ダブルクォーテーション)」と「”」で囲まれた部分全部です。たまに「‘(シングルクォーテーション)」を使っているサイトもあります。
何らかの方法ですでにm3u8のファイルを入手している場合、そのファイルをメモ帳で開いてみて、ファイル名.tsなどと動画ファイルを指定している部分にURLがhttpからフルに記述されている場合は、そのm3u8ファイルを先ほどのc:\ffmpegに移動しておこう。
書かれてなかった場合そのm3u8ファイルはゴミです。捨てていいです。
コマンドプロンプトを起動してffmpegの場所へ移動する
スタート → Windowsシステムツール → コマンドプロンプト を選ぶ。
C:\Users\ユーザー名>
という表示が出るので、
cd c:\ffmpeg
と入力してエンター。
そうすると
c:\ffmpeg>
という表示に変わる。
ちなみに先ほどffmpegの保存先を上記の例(c:\ffmpeg)とは別の場所にしていた場合はその場所を指定する。
なお、日本語のフォルダ名にffmpegを保存するとうまく動作しなくなるので注意。
ffmpegで動画をダウンロードして結合する
メモ帳に以下の内容をコピーペーストし、
ffmpeg -protocol_whitelist file,http,https,tcp,tls,crypto -user_agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36" -i "ファイル名.m3u8またはURL" -movflags faststart -c copy -bsf:a aac_adtstoasc test.mp4
「ファイル名.m3u8またはURL」
の部分に先ほどメモ帳に控えてあった動画サイトのm3u8のアドレスを貼り付ける。
すでにm3u8のファイルをダウンロードしていて、その中身がフルのURLで記述されている場合、「ファイル名.m3u8またはURL」の部分に、先ほどc:ffmpegへ移動したm3u8ファイルを指定しよう。
test.mp4 の部分は好きなファイル名にする。この名前で保存される。
(※日本語のファイル名は避けたほうがいい)
メモ帳上で以上の作業をしたら、それらをコピーしてコマンドプロンプトに貼り付けてエンター。
うまくできていたらダウンロードが始まる。
動画の長さにもよるけどしばらくこの画面の状態でダウンロード作業が続く。
サーバーの送り出し速度にもよりますが30分動画でもまぁ数分で終わります。
終わったら処理したframe数などの表示が出て止まる。
これでc:ffmpegの中に先ほど指定したファイル名で動画ファイルが保存されている。
たまにうまくいかないサイトがあるけど、他のサイトではうまくいっていてそのサイトではうまくいかないという場合はcookieの可能性がある。一部サイトでブラウザcookieを要求される(ログインしないと閲覧できないサイトに多い)。
エラーメッセージに cookie~みたいなのが含まれていたらcookieが要求されたので処理できませんでしたと言ってます。
cookie指定のやり方はマジでややこしくてこれだけで1記事書けそうなので今回はパス。
また、暗号化された動画で符号化キーが途中で何度も変わるタイプ(Abemaや2019年3月5日以降のニコニコ動画の一部チャンネル)は途中でキーが変わってしまうためにダウンロードが失敗してエラーで終了します。
オンラインで変換してダウンロードできるサイトがあるけど
オンラインでストリーミング動画を変換してダウンロードまでできる便利なサイトがあります。が、それを使用すると「変換して」「ダウンロードした」という情報が変換サイトの中に残ります。あなたがアレでアレなファイルとかを変換してダウンロードした記録がサーバ上に残っているというのはいい気がしない。
ダウンロード違法化の法案が通ったら非常にマズイです。
上記のffmpegを利用した場合ブラウザのユーザーエージェントを指定しているので、動画サイト側からは一見すると正規ブラウザで単に再生しただけのように見えます。
Youtubeなどの動画をダウンロードしたい場合は
こっちは画面をダイレクトに録画してくれるので画面に表示さえされていたらどんな動画でも保存できます。
このところ暗号化されてしまった配信サイトが急増しています。
もう画面を直接録画するくらいしか手段がなくなってきました。
ということで、ダウンロードしてもOKな動画共有サイトで好きな動画をダウンロードしまくりましょう。
片っ端からダウンロードしてるとすぐにハードディスクが一杯になってくるので、