tutorials

音声付きでDASH動画をダウンロードする方法

DASH動画をダウンロードしたのに音声がない?MPDのどれが映像でどれが音声かを見分け、video-onlyを選ばず、FlowPickで音声付きMP4に結合する方法を解説します。
FlowPickチーム
9 分で読了
# DASH # MPD # 動画ダウンロード # 音声 # 使い方

音声付きでDASH動画をダウンロードする方法

DASH動画をダウンロードしたら、画面は映るのに音声がまったくない——DASHで最もよくある失敗のひとつです。理由は簡単で、DASHは映像と音声を別々のストリームで配信しており、あなたは映像のほうだけを取ってしまった、ということ。この記事で覚えることは2つ。MPDを読んでどれが映像でどれが音声かを見分けること、そしてFlowPickでそれらを音声付きのMP4に結合することです。

DASHのダウンロードに音声がない理由

MPEG-DASHは、プレイヤーが画質を個別に切り替えられるよう、映像トラックと音声トラックを分けて配信します。プレイヤーは両方のストリームを同時に取得し、再生時に合成します。つまり「DASHをダウンロードする」とは実質2本のストリームを取得して1つに結合すること。映像トラックだけを取れば、当然音声はありません。

MPDファイルを開くと、いくつかのAdaptationSet要素があり、それぞれにRepresentation要素が並んでいます。

<AdaptationSet contentType="video">
  <Representation id="v1080" width="1920" height="1080">
    <SegmentTemplate initialization="video/init.mp4" media="video/$Number$.m4s" />
  </Representation>
  <Representation id="v720" width="1280" height="720">
    <SegmentTemplate initialization="video/720/init.mp4" media="video/720/$Number$.m4s" />
  </Representation>
</AdaptationSet>

<AdaptationSet contentType="audio">
  <Representation id="a128" bandwidth="128000">
    <SegmentTemplate initialization="audio/init.mp4" media="audio/$Number$.m4s" />
  </Representation>
</AdaptationSet>

contentType="video"が映像、contentType="audio"が音声です。Bilibiliのようなプラットフォームはこの分離が徹底しており、Bilibili動画のダウンロード方法 は典型的なDASH二重ストリームの実践例です。

MPDが初めてなら、まず DASHストリーミングとは?非開発者向けMPDファイル解析 を読むと、マニフェストの構造がよく分かります。SegmentTemplateやContentProtectionの詳細は DASH ディープ:MPD構造 へ。

FlowPickでダウンロードする手順

ステップ1、動画ページを開いて数秒再生し、DASHストリームが実際に読み込まれるのを待ちます。 ステップ2、FlowPick拡張機能を開き、リソースリストからMPD/DASHの項目を見つけます。 ステップ3、画質を選び、音声トラックが選択されていることを確認します(video-onlyを選ばないこと)。 ステップ4、ダウンロードを開始し、セグメントの取得とMP4への結合が終わるのを待ちます。 ステップ5、VLCなどのプレイヤーでMP4を開き、映像と音声の両方を確認します。

映像は映るのに音声がない場合はステップ3に戻ってください——ほぼ確実にvideo-onlyのrepresentationを選んでいます。音声トラックを含む項目に切り替えて再ダウンロードしましょう。

結合はFlowPickがブラウザ内でWebAssembly版のFFmpegを使って行います。サーバーは一切経由しません。その実装ロジックは FlowPickがブラウザ内で数百の動画セグメントをMP4に結合する仕組み に詳しくあります。

公開されたMPD URLがあるなら DASHオンラインダウンローダー に貼り付けるだけでもOKです。ただし、ストリームがページのCookie・ログイン状態・Refererチェックを必要とする場合は拡張機能のほうが安定——拡張機能は元ページのコンテキストで動作し、そうしたリクエストヘッダーを自動で付与します。

多言語の音声トラックの選び方

プラットフォームによってはMPDが複数の音声トラック(中国語、広東語、原音など)を用意しており、それぞれRepresentationが独立しています。

<AdaptationSet contentType="audio">
  <Representation id="a-zh" ...>...</Representation>
  <Representation id="a-en" ...>...</Representation>
</AdaptationSet>

FlowPickの音声トラックのドロップダウンから好きな言語を選んでください。結合後のMP4には選択したトラックだけが含まれ、全言語が詰め込まれることはありません。

ダウンロードしても音声がない場合の確認

この順で確認してください。

  1. video-onlyトラックを選んでいないか確認。MPDによっては音声が独立したAdaptationSetにあります。プレビューが再生できても、結合結果に音声があるとは限りません。
  2. 元ページを更新して再検出。MPD URLは有効期限付きのことが多く、期限切れだと404や403を返します。ページを開き直して新しいURLを取りましょう。
  3. リクエストにセッションが必要。マニフェストやセグメントが403を返すのは、RefererやログインCookieのチェックが原因——拡張機能は元ページ内で動作するので通常は通りますが、オンラインツールでは無理です。
  4. DRMがないか確認。Widevine・PlayReady・FairPlayで暗号化されたコンテンツはFlowPickでは対応・解析しません。こうした場合はコンテンツ提供元に連絡して許可を得てください。

この4つ以外にも細かい落とし穴があります。DASH動画に音声がない場合の対処法 に完全なチェックリストが載っているので、症状に合わせて確認してください。DASHではなくM3U8のセグメントストリームなら M3U8ダウンロードに失敗する場合の対処法 へ。

まとめ

DASHで音声が出ないのは、九割方「映像トラックだけ取得した」のが原因です。覚えることは2つ。MPDではcontentType="audio"が音声、ダウンロード時は音声トラックが選択されていることを確認する。結合はFlowPick任せで、ブラウザ内で完結します。サーバー不要です。


関連記事

おすすめの記事