tutorials

動画の直リンクからMP4をダウンロードする方法

MP4・WebM の動画直リンクを見分けて FlowPick で一発保存。403、404、CORS、ファイルが不完全になる問題を順番に解決します。
FlowPick チーム
9 分で読了
# 動画ダウンロード # MP4 # WebM # 直リンク # チュートリアル

動画の直リンクからMP4をダウンロードする方法

動画を見ていて、右クリックしても「名前を付けて保存」が出ない。アドレスバーにも .mp4 がない。そんな時、原因はほぼ二択です。M3U8/MPD みたいな分割配信か、直リンクだけど隠されているか。この記事は後者だけを扱います。隠された直リンクをどうやって掘り出すか、本当に落とせるかどうかを見極める方法、そして落とせない時の原因を詰めます。

先に整理:直リンクって何?

直リンクとは「1つの URL が 1 つのファイルを指している」ダウンロードです。URL を手に入れてダウンローダーに放り込めば、1 リクエストで MP4・WebM・MOV・MKV 全体が降ってきます。HLS/DASH みたいにプレイリストを組み立てて、セグメントを 1 個ずつ取ってくる必要はありません。

直リンクHLS / DASH 配信
URL の指す先単一ファイルマニフェスト + セグメント
ダウンロード方式1 リクエストマニフェスト解析 → 分割ダウンロード → 結合
失敗時の症状403 / 404 / 空ファイル映像が乱れる・音が出ない・結合失敗

ここから先は全部、直リンクの話です。手に入れたのが実は .m3u8.mpd の URL なら、この記事で粘らずに、M3U8/HLS ストリームをダウンロードする方法:完全入門ガイド音声付き DASH 動画をダウンロードする方法 へ。方向が違えば、どんな手法も無駄になります。

本当に直リンクかどうか確かめる

.mp4 という拡張子だけでは足りません。多くのサイトは CDN の URL の後ろに署名付きパラメータを大量にくっつけ、拡張子を隠すこともあります。判断基準は 1 つだけ。レスポンスの Content-Typevideo/* かどうかです。

方法1:開発者ツールの Network で見る

動画ページを開き、F12 で開発者ツールを開いて Network タブに切り替え、mp4webm でフィルタして動画を再生します。

  1. URL に .mp4 / .webm が含まれるリクエストを探す。
  2. 開いてレスポンスヘッダーの Content-Type を確認する。
  3. video/mp4video/webm なら、それが直リンク。

方法2:curl で直接検証する

候補の URL が取れたら、curl で実際に何が返るか見ます(URL は自分のものに置き換えてください)。

curl -sI "https://cdn.example.com/course/lesson1.mp4" | head -n 10

注目するのはこの 2 行。

HTTP/1.1 200 OK
Content-Type: video/mp4
Content-Length: 52428800

Content-Typevideo/mp4 なら URL は正しい。text/html が返ってきたら、それは動画ではなく Web ページです。コピーした URL が間違っています。直リンクの検出原理と対応形式は、動画検出 — 対応動画形式 を参照してください。

FlowPick 拡張機能でダウンロードする

手順 1、動画が実際に再生されるページを開き、数秒再生して直リンクが本当にリクエストされるようにします。 手順 2、FlowPick 拡張機能を開き、リソース一覧を「動画」で絞り込み、video/mp4video/webm の項目を選びます。サムネイルやカバー画像は選ばないでください。 手順 3、右側のプレビューで正常に再生されること、形式に間違いがないことを確認してからダウンロードします。 手順 4、ダウンロードが終わったらファイルを開いて再生できることを確認してから、元のページを閉じます。

拡張機能は元のページの環境で動くため、Referer や Cookie が自動で付き、アンチホットリンクの検証はほとんど通過します。ここがオンラインツールより拡張機能が優れている点です。オンラインツールは自分のドメインで動くので、対象サイトのログイン状態を持ち込めません。この違いは オンラインツール — 拡張機能との違い で解説しています。

たまに 1 本だけ落とす場合で、アンチホットリンク検証がなければ、オンライン動画ダウンローダー も使えます。直リンク URL を貼ればダウンロードできます。

よくあるエラーを 1 個ずつ

403 Forbidden:リクエストヘッダーが不正

動画が本当に「権限なし」なことはほとんどありません。たいていは検証が通りませんでした。

  • Referer 検証:リクエストが特定のページから来ないとダメ。空の Referer は即拒否。
  • Cookie / ログイン状態:ログイン Cookie がないか、切れている。
  • 一時トークン:URL 内の ?token= が期限切れ。

curl で再現して、Referer が原因かどうか確認します。

# ヘッダーなし。裸のリクエストが何を返すか見る
curl -s -o /dev/null -w "%{http_code}\n" "https://cdn.example.com/course/lesson1.mp4"

# ページの Referer を付けて再試行
curl -s -o /dev/null -w "%{http_code}\n" \
  -H "Referer: https://www.example.com/course/123" \
  "https://cdn.example.com/course/lesson1.mp4"

Referer を付けたら通るなら、それはアンチホットリンクです。拡張機能に切り替えましょう。拡張機能は元のページ内で動くので Referer を自動で補完し、v1.1.1 以降はアンチホットリンクプロキシも内蔵していて、プレビューもダウンロードも正しいリクエストヘッダーを自動で付けます。オンラインツールではできません。プロキシの詳細は FlowPick v1.1.1:アンチホットリンクリソースのプレビューとダウンロード をどうぞ。

404 Not Found:URL の期限切れ、または取り違え

直リンクで一番腹が立つのが「昨日は落とせたのに、今日 404」。よくある原因は 3 つ。

  • 一時署名付き URL の期限切れ:クラウドストレージ(OSS、COS など)の直リンクは有効期限付きで、数分から数時間で切れます。
  • ファイルの削除:アップロードした人が消した、CDN キャッシュが消された。
  • URL の取り違え:コピーしたのがプレイヤー画面の URL で、ファイル直リンクではない。

URL が本当に死んでいたら手の出しようがありません。元の動画ページに戻って再検出し、新しい直リンクを取り直してダウンロードしてください。

CORS エラー:オンラインツール特有の落とし穴

オンラインツールでダウンロードしていて CORS エラーが出た場合、操作ミスではなくツールの制限です。オンラインツールは flowpick.com ドメインで動くため、ブラウザの同一オリジンポリシーがクロスオリジンの読み込みをブロックします。拡張機能に切り替えましょう。拡張機能は独自の権限を持ち、同一オリジンポリシーの制約を受けないので、検出範囲も成功率も一段上です。詳細は 動画検出 — 拡張機能とオンラインツールの検出の違い を参照してください。

ファイルが不完全:サーバーがレジューム非対応

ダウンロードは始まるのに、一時停止すると 0 からやり直し、あるいは途中で失敗する。これはサーバーが HTTP Range に対応しているかにかかっています。Range を使えばクライアントはファイルの一部だけを要求でき、レジューム(断点续传)はすべてこれに依存します。

サーバーが対応しているか試してみます。

curl -s -o /dev/null -w "%{http_code}\n" \
  -H "Range: bytes=0-1023" \
  "https://cdn.example.com/course/lesson1.mp4"
# 206 = Range 対応、レジューム可能
# 200 = 全体が返る、非対応

206 なら問題なし。200(全体)が返るなら Range 非対応なので、途中で一時停止せず一気に落としましょう。これはサーバー側の能力の問題で、ツールを変えても変わりません。

ダウンロードしたのに再生できない

ファイルは落ちた、サイズも正常なのに、プレイヤーが「形式非対応」と表示するか、黒画面になります。ここで コンテナコーデック の 2 つを分けて考える必要があります。.mp4 はコンテナで、中身は H.264 かもしれないし、H.265/HEVC や AV1 かもしれません。コンテナ対応とコーデック対応は別物で、プレイヤーは中身のコーデック層をデコードできて初めて再生できます。

コーデック非対応なら、形式変換 で互換性の高い H.264 MP4 に変換するのが手っ取り早いです。自分のブラウザが何を再生できるかは ブラウザ互換性 をどうぞ。

数百 MB の大容量ファイルがダウンロード途中で固まるのは、ブラウザがファイルをメモリに一時保存しているためです。FlowPick は File System Access API を優先(保存先フォルダを選ぶとストリーム書き込みでメモリを消費しません)し、非対応の場合は Blob モードにフォールバックします。大容量ファイルが固まるのはそのせいです。対策は簡単。デフォルトのダウンロードではなく「保存先フォルダを選択」を優先すること。それもダメなら低画質版を落としましょう。Blob モードのハードリミットは 既知の制限 にまとめてあります。

直リンクと M3U8・MPD が区別できない

URL の拡張子が .m3u8.mpd なら、それは直リンクではなくストリーミングのマニフェストです。無理に落とさないでください。

まとめ

直リンクのダウンロードは 4 ステップ。動画が実際に再生されるページを見つける → Network か FlowPick から video/* の URL を掘り出す → curl で取り違えがないか検証する → ダウンロード後に再生を確認してから次へ進む。403 なら拡張機能へ、404 なら再検出、CORS ならオンラインツールをやめる、ファイルが不完全ならまず Range を確認。それでも残る難問は、動画直リンクのダウンロードに失敗したら?MP4・WebM のトラブルシューティング に症状別の全チェックリストが載っています。保存する権利がある動画だけをダウンロードしてください。


関連記事

おすすめ記事