Python スクリプトを使用して ffmpeg を呼び出し、ts セグメント化されたビデオ ファイルをダウンロードする

一緒に創造し、成長するために一緒に働きましょう!「ナゲッツデイリー新プラン・8月アップデートチャレンジ」参加30日目ですイベント詳細はこちら

序文

今日のオンライン ビデオは mp4 形式ではなく、すべて ts ファイル形式です.著作権侵害やトラフィックと帯域幅の乱用を防ぐために、ts ファイル形式はビデオ セグメンテーション テクノロジーであり、主にインデックスが必要です.ファイルにはすべてのビデオのセグメント情報、時間の長さ、および ts ファイル名に関するいくつかの情報:

画像.png

これらのサブセグメント情報は、再生中に非同期にロードされます。また、デュレーションを直接計算することにより、特定のセグメントのロードをジャンプおよびスキップすることも非常に便利です。

画像.png

ts ファイルだけをダウンロードしても直接再生できないので、この問題を解決するにはどうすればよいでしょうか。多くの方法がありますが、私たちのような技術者にとって最も適した解決策を見つけました。それはffmpeg、ffmpeg コマンド ラインを直接使用してリモート インデックス ファイルにアクセスし、ダウンロードして 1 つの MP4 ファイルにマージできる有名な方法を使用することです。今日は、その使い方を簡単に紹介しましょう。

ダウンロード

ffmpeg は、オーディオとビデオを処理するための非常に使いやすいソフトウェア ツールキットです. Win10 で ffmpeg を使用するには、ダウンロードして環境変数を追加する必要があります. ダウンロード Web サイト: FFmpeg をダウンロード

画像.png

ダウンロードが完了したら、解凍し、解凍したファイルを適切な場所に移動します。

画像.png

環境変数を追加するには、以前の記事「Fiddler は HTTPS リンクをクロールできませんか? 」を参照できます。Move the Fiddler certificate into the system root certificate directory through Root permissions . Opennen SSL の構成と同じですが、ここでは最終構成のみを示します。

画像.png

この時点で、コマンド ラインをチェックして、環境変数が正しいかどうかを確認します。

ffmpeg -version
复制代码

画像.png正常にインストールされました

ダウンロード

ダウンロード ダウンロードする必要がある Web サイトのインデックス ファイルへのリンクを見つけるには、ブラウザの F12 デバッグ コンソールで次のように表示します。

画像.png

ネイティブ コマンドを使用してダウンロードしたコマンドが次の場合:

ffmpeg -i {m3u8链接} -c copy -bsf:a aac_adtstoasc {文件名}.mp4'
复制代码

ネイティブ コマンドを使用して直接ダウンロードできますが、Win10 システムは Python コマンド ラインで ffmpeg の環境変数を認識できません。したがって、ffmpeg の特定のディレクトリを追加するには、Python を使用して ffmpeg を呼び出して、動画をダウンロードする:


def one_video(urls, file_name):
    save_path = 'D:\Download\ts\'+file_name
    shell_str = 'D:\MiniTool\ffmpeg\bin\ffmpeg.exe -i '+url+' -c copy -bsf:a aac_adtstoasc '+save_path+'.mp4'
    os.system(shell_str)
urls = 'https://*****/videos/augdeduuigdrypzmvseh/index.m3u8?token=eyssddcflgjkmddsds********' 
file_name = 'test'
one_video(urls, file_name)
复制代码

効果:

画像.png

画像.png

要約する

ffmpeg は非常に強力なツールですが、スクリプト内の単一のスレッドが遅すぎます. ファイルが大きく、多くのファイルがある場合、非常に遅くなります. Scrapy で使用します.

また、この m3u8 インデックス ファイルは非常に重要なファイルであり、通常は暗号化されています. 私の例では、トークン リプレイ保護があり、1 回アクセスすると 2 回目のアクセスは期限切れになります. Web ページで復号化する必要があります.このトークンに問題はありませんが、実際の状況は一般的にもっと複雑です。

おすすめ

転載: juejin.im/post/7136823714410135559