2

I want to ask what command should I use to select video quality from mpd manifest?

mpd manifest link

https://anevia115(dot)mncnow(dot)id/vod/eds/kiko-season1-eps1-mobil-kabur-anv6/_/sa_dash_vmx/kiko-season1-eps1-mobil-kabur-anv6.mpd

Here, the mpd file:

<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" xmlns:cenc="urn:mpeg:cenc:2013" xmlns:mspr="urn:microsoft:playready" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" mediaPresentationDuration="PT7M59.240000S" minBufferTime="PT0S" maxSegmentDuration="PT4S">
  <Period duration="PT7M59.240000S">
    <AdaptationSet id="1" group="1" mimeType="audio/mp4" lang="en" contentType="audio" minBandwidth="32000" maxBandwidth="64000">
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/><ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="5094c697-d5c4-84b7-cf4f-7830ba7d58a8" />      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main" />
      <Representation id="mp4a_32000_eng=6" bandwidth="32000" audioSamplingRate="22050" codecs="mp4a.40.2">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2" />
        <SegmentTemplate timescale="10000000" initialization="kiko-season1-eps1-mobil-kabur-anv6-$RepresentationID$-init.mp4" media="kiko-season1-eps1-mobil-kabur-anv6-$RepresentationID$-$Time$.mp4">
          <SegmentTimeline>
            <S t="0" d="36223129" r="1" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" r="1" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" r="1" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" r="1" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" r="1" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="3715193" />
          </SegmentTimeline>
        </SegmentTemplate>
      </Representation>
      <Representation id="mp4a_64000_eng=2" bandwidth="64000" audioSamplingRate="22050" codecs="mp4a.40.2">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2" />
        <SegmentTemplate timescale="10000000" initialization="kiko-season1-eps1-mobil-kabur-anv6-$RepresentationID$-init.mp4" media="kiko-season1-eps1-mobil-kabur-anv6-$RepresentationID$-$Time$.mp4">
          <SegmentTimeline>
            <S t="0" d="36223129" r="1" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" r="1" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" r="1" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" r="1" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758731" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" r="1" />
            <S d="35758730" />
            <S d="36223130" />
            <S d="35758730" />
            <S d="36223129" />
            <S d="3715193" />
          </SegmentTimeline>
        </SegmentTemplate>
      </Representation>
    </AdaptationSet>
    <AdaptationSet id="2" group="2" frameRate="25" mimeType="video/mp4" startWithSAP="1" contentType="video" par="16:9" minBandwidth="150119" maxBandwidth="5002530" minWidth="256" maxWidth="1920" minHeight="144" maxHeight="1080">
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/><ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="5094c697-d5c4-84b7-cf4f-7830ba7d58a8" />      <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main" />
      <SegmentTemplate timescale="10000000" initialization="kiko-season1-eps1-mobil-kabur-anv6-$RepresentationID$-init.mp4" media="kiko-season1-eps1-mobil-kabur-anv6-$RepresentationID$-$Time$.mp4">
        <SegmentTimeline>
          <S t="0" d="36000000" r="132" />
          <S d="4400000" />
        </SegmentTimeline>
      </SegmentTemplate>
      <Representation id="avc1_150119=5" bandwidth="150119" width="256" height="144" codecs="avc1.4d400c" />
      <Representation id="avc1_500565=7" bandwidth="500565" width="640" height="360" codecs="avc1.4d401e" />
      <Representation id="avc1_1001193=9" bandwidth="1001193" width="854" height="480" codecs="avc1.4d401e" />
      <Representation id="avc1_2502286=1" bandwidth="2502286" width="1280" height="720" codecs="avc1.4d401f" />
      <Representation id="avc1_5002530=3" bandwidth="5002530" width="1920" height="1080" codecs="avc1.4d4028" />
    </AdaptationSet>
  </Period>
</MPD>

The video is not encrypted with DRM. When I tried to download with FFmpeg, success, but FFmpeg automatically select the worst quality (144p).

FFmpeg command I use:

ffmpeg -i https://anevia115(dot)mncnow(dot)id/vod/eds/kiko-season1-eps1-mobil-kabur-anv6/_/sa_dash_vmx/kiko-season1-eps1-mobil-kabur-anv6.mpd -c copy kiko1.mp4

Result from ffmpeg

ffmpeg version 3.4.6-0ubuntu0.18.04.1 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)
  configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
[dash @ 0x562ae2e98000] Opening '[URL]https://anevia115(dot)mncnow(dot)id/vod/eds/kiko-season1-eps1-mobil-kabur-anv6/_/sa_dash_vmx/kiko-season1-eps1-mobil-kabur-anv6-avc1_150119=5-init.mp4[/URL]' for reading [dash @ 0x562ae2e98000] Could not read complete fragment.
[dash @ 0x562ae2e98000] Opening '[URL]https://anevia115(dot)mncnow(dot)id/vod/eds/kiko-season1-eps1-mobil-kabur-anv6/_/sa_dash_vmx/kiko-season1-eps1-mobil-kabur-anv6-avc1_150119=5-0.mp4[/URL]' for reading
[dash @ 0x562ae2e98000] Opening '[URL]https://anevia115(dot)mncnow(dot)id/vod/eds/kiko-season1-eps1-mobil-kabur-anv6/_/sa_dash_vmx/kiko-season1-eps1-mobil-kabur-anv6-mp4a_32000_eng=6-init.mp4[/URL]' for reading [dash @ 0x562ae2e98000] Could not read complete fragment.
[dash @ 0x562ae2e98000] Opening '[URL]https://anevia115(dot)mncnow(dot)id/vod/eds/kiko-season1-eps1-mobil-kabur-anv6/_/sa_dash_vmx/kiko-season1-eps1-mobil-kabur-anv6-mp4a_32000_eng=6-0.mp4[/URL]' for reading
[aac @ 0x562ae32ced00] channel element 2.3 is not allocated
[h264 @ 0x562ae32cc500] top block unavailable for requested intra mode -1
[h264 @ 0x562ae32cc500] error while decoding MB 0 0, bytestream 38
[h264 @ 0x562ae32cc500] concealing 144 DC, 144 AC, 144 MV errors in I frame
Input #0, dash, from '[URL]https://anevia115(dot)mncnow(dot)id/vod/eds/kiko-season1-eps1-mobil-kabur-anv6/_/sa_dash_vmx/kiko-season1-eps1-mobil-kabur-anv6.mpd[/URL]':
  Duration: 00:07:59.00, start: 0.000000, bitrate: 0 kb/s 
Program 0
     Stream #0:0: Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 256x144 [SAR 1:1 DAR 16:9], 153 kb/s, 25 fps, 25 tbr, 10000k tbn, 50 tbc  
     Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 32 kb/s
Output #0, mp4, to 'kiko1.mp4': 
   Metadata:   
      encoder         : Lavf57.83.100   
      Stream #0:0: Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 256x144 [SAR 1:1 DAR 16:9], q=2-31, 153 kb/s, 25 fps, 25 tbr, 10000k tbn, 10000k tbc
Stream mapping: 
   Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
[dash @ 0x562ae2e98000] Opening '[URL]https://anevia115(dot)mncnow(dot)id/vod/eds/kiko-season1-eps1-mobil-kabur-anv6/_/sa_dash_vmx/kiko-season1-eps1-mobil-kabur-anv6-mp4a_32000_eng=6-36223129.mp4[/URL]' for reading
[dash @ 0x562ae2e98000] Opening '[URL]https://anevia115(dot)mncnow(dot)id/vod/eds/kiko-season1-eps1-mobil-kabur-anv6/_/sa_dash_vmx/kiko-season1-eps1-mobil-kabur-anv6-avc1_150119=5-36000000.mp4[/URL]' for reading
....
....
frame=11978 fps= 99 q=-1.0 Lsize=    8891kB time=00:07:59.08 bitrate= 152.0kbits/s speed=3.97x
video:8779kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.269990%

Tried youtube-dl & streamlink but failed. So, I use FFmpeg because it success to download the video and audio. I have read FFmpeg documentation but I have no idea what command should I use. What command should I use to select another quality? (ex: audio 64 kbps, video: 720p)

Note: just change (dot) to .

Deoxys
  • 23
  • 1
  • 1
  • 3

1 Answers1

4

If you know the streams that are in the manifest (the representation sets) then you can use ffmpeg's "map" parameter. You can list the stream map with ffprobe

ffprobe yourmanifest.mpd

You'll get something like

Input #0, dash, from 'manifest.mpd':
  Duration: 00:27:36.00, start: -0.042667, bitrate: 0 kb/s
  Program 0
    Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 412 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      variant_bitrate : 1745920
      id              : video/avc1/1705k
    Stream #0:1: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 682x384 [SAR 1024:1023 DAR 16:9], 89 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      variant_bitrate : 296960
      id              : video/avc1/290k
    Stream #0:2(en): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 65 kb/s (default)
    Metadata:
      variant_bitrate : 67335
      id              : audio/en/mp4a/64k

And now you can convert the manifest to an MP4 with

ffmpeg -i yourmanifest.mpd -map 0:1 -map 0:2 -codec copy output.mp4

That'll give you an MP4 with the 2nd video stream (the "290k" from my sample at index 1) and the audio stream which is at index 2.

KBoek
  • 5,794
  • 5
  • 32
  • 49
  • should this `ffprobe manifest.mpd` or `ffprobe https://server.com/manifest.mpd` printout a stream mapping list? I always get `invalid data found when processing input` (edit) ignore this, I think my ffmpeg build does not use dash package. – Whome Apr 12 '21 at 10:49
  • you must point to the place of your manifest; if your manifest is accessible via an URL then you must use the full URI to the manifest) – KBoek Apr 12 '21 at 14:03
  • Yes, I was using a local disk file and fully qualified url. My windows ffprobe binary does not seem to support a dash input. I tried in linux box and ffprobe worked fine. / I need to study why is my windows binary broken for dash inputs. – Whome Apr 12 '21 at 15:01