2021年1月7日

FFmpegでm3u8形式の配信動画をダウンロードする


m3u8形式で配信されているストリーミング動画を保存する方法をメモメモ…




FFmpegを使ってストリーミング配信の動画を取得する手順です。この手の情報は割とネット上にも多く出ていると思いますが一応自分用に書き留めておきます。環境はWindows10を想定しています。

  1. 動画配信ページから対象のアドレスを取得する
    目標はhttps://~.m3u8というアドレス。ブラウザのコンソール画面(F12)からあらかじめネットワークを表示しておき「m3u8」でフィルタをかけて探すのが手っ取り早い。
  2. FFmpegを入手する
    ソースコードではなく実行ファイル(ffmpeg.exe)を手に入れる。公式サイトにある Get packages & executable files のリンクからダウンロード可能。動画関連のソフトを使っている場合はすでに持っているかも。
  3. ffmpeg.exeがあるフォルダでコマンドプロンプトかPowerShellを起動する
    エクスプローラーのアドレスバーにcmdpowershellと入力すれば、現在開いているフォルダをカレントディレクトリとして起動できる。dirと入力してffmpeg.exeが表示されればOK。
  4. 次のコマンドを実行する
    ffmpeg -i https://~.m3u8 -movflags faststart -c copy -bsf:a aac_adtstoasc video.mp4
    https://~.m3u8は1.で取得したアドレス(末尾にクエリ文字列がついていることもある)。video.mp4は出力する動画のファイル名なので自由に変更可。出力先はffmpeg.exeのあるフォルダ内。完了までしばらく時間がかかる。

    PowerShellの場合はコマンドをffmpegではなく.\ffmpegと書く必要があるかもしれない(その場合はエラーメッセージが表示されるので従う)。

基本的にURLさえ入手できればコマンド1つで保存できるので非常に便利ですね。

ちなみに上記コマンドの-movflags faststartは動画のメタデータを末尾から先頭に移動するためのオプション。動画を開くたびにファイルを最後まで読み込む必要がなくなるため、再生開始までの時間を短縮できます。-bsf:a aac_adtstoascは音声をADTSというストリーム形式からMPEG4用の形式に変換するためのもの…らしいのですが正直必要性はよくわかりません(エラー回避?)。動画にもよりますが、ぶっちゃけこれ↓だけでも問題なくダウンロードしてくれると思います。
ffmpeg -i https://~.m3u8 -c copy video.mp4

さらに、たとえば「指定した動画の開始60秒後から10秒間を抜き出し、ついでに画質を指定してファイルサイズを減らす」というようなこともコマンドラインから簡単に実行できます。
ffmpeg -ss 60 -i input.mp4 -t 10 -crf 26 output.mp4

その他FFmpegで利用可能なコマンドについてはネット上に解説記事も多いので是非調べてみてください。入門としてはこちらのページがわかりやすかったです。
それFFmpegで出来るよ! - Qiita
https://qiita.com/cha84rakanal/items/e84fe4eb6fbe2ae13fd8

配信動画のダウンロード自体は「私的利用を目的としている」「違法にアップロードされた動画ではない」「動画サイトの規約を破っていない」ということを最低限確認しておけばまず問題ないとは思いますが、著作権法には十分注意しましょう。

0 件のコメント:

コメントを投稿