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
.
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.