4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonを使ってM3U8ファイルから動画をダウンロードする方法

Posted at

Pythonを使ってM3U8ファイルから動画をダウンロードする方法

本記事では、Pythonとffmpegを使用してM3U8ファイルから動画をダウンロードする方法を解説します。特にライブストリーミングや動画配信サービスでよく使用されるM3U8フォーマットからのダウンロードが対象です。

必要なツール

このスクリプトを実行する前に、システムにffmpegがインストールされている必要があります。ffmpegは多くのフォーマットの動画や音声の変換、処理が可能な非常に強力なフリーソフトウェアです。

スクリプトの解説

インポート

import subprocess
import sys
  • subprocess: コマンドラインツールをPythonから実行するために使用します。
  • sys: コマンドライン引数をスクリプトで利用するために必要です。

関数 download_video_from_m3u8

def download_video_from_m3u8(m3u8_url, output_path):

この関数は、動画のURLと保存先のパスを引数として受け取ります。

ffmpegコマンドの構築

command = [
    'ffmpeg',
    '-protocol_whitelist', 'file,http,https,tcp,tls,crypto',
    '-i', m3u8_url,
    '-c', 'copy',
    '-bsf:a', 'aac_adtstoasc',
    output_path
]
  • -protocol_whitelist: ffmpegが使用するプロトコルを指定します。これにより、セキュリティ上のリスクを管理しつつ、必要なプロトコルでの通信を許可します。
  • -i: 入力ファイルの指定。
  • -c copy: エンコーディングを変更せずに、ストリームをそのままコピーします。
  • -bsf:a aac_adtstoasc: オーディオストリームに適用するビットストリームフィルター。AAC音声を適切に変換します。

コマンドの実行

subprocess.run(command, check=True)
  • subprocess.run: 上記で構築したコマンドを実行します。check=Trueは、コマンドが失敗した場合に例外を発生させるためのものです。

エントリーポイント

if __name__ == "__main__":

スクリプトが直接実行された場合のみ以下のコードが実行されます。

コマンドライン引数の処理

if len(sys.argv) != 3:
    print("Usage: python script.py <M3U8 URL> <Output Path>")
    sys.exit(1)

適切な引数が提供されているか確認し、問題があれば使用方法を表示して終了します。

関数の呼び出し

m3u8_url = sys.argv[1]
output_path = sys.argv[2]
download_video_from_m3u8(m3u8_url, output_path)

コマンドラインからURLと出力パスを取得し、ダウンロード関数を呼び出します。

まとめ

このスクリプトを使うことで、M3U8形式のストリーミング動画を簡単にダウンロードし、ローカルに保存することが可能です。ffmpegのオプションに慣れれば、さらに多様な動画処理が行えるようになります。

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?