FFMPEG:如何从 mpd 清单手动 select 视频质量?
FFMPEG: How to manually select video quality from mpd manifest?
我想问一下我应该使用什么命令来 select 来自 mpd 清单的视频质量?
mpd 清单 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
这里是mpd文件:
<?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>
视频未使用 DRM 加密。当我尝试使用 FFmpeg 下载时,成功了,但是 FFmpeg 自动 select 质量最差 (144p)。
我使用的FFmpeg命令:
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
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%
尝试了 youtube-dl 和 streamlink 但失败了。
所以,我使用 FFmpeg 因为它成功下载了视频和音频。我已阅读 FFmpeg 文档,但不知道应该使用什么命令。
我应该使用什么命令来 select 另一种品质? (例如:音频 64 kbps,视频:720p)
Note: just change (dot) to .
如果您知道清单(表示集)中的流,则可以使用 ffmpeg 的“map”参数。您可以使用 ffprobe
列出流图
ffprobe yourmanifest.mpd
你会得到类似的东西
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
现在您可以使用
将清单转换为 MP4
ffmpeg -i yourmanifest.mpd -map 0:1 -map 0:2 -codec copy output.mp4
这将为您提供一个 MP4,其中包含第二个视频流(索引 1 处样本中的“290k”)和索引 2 处的音频流。
我想问一下我应该使用什么命令来 select 来自 mpd 清单的视频质量?
mpd 清单 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
这里是mpd文件:
<?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>
视频未使用 DRM 加密。当我尝试使用 FFmpeg 下载时,成功了,但是 FFmpeg 自动 select 质量最差 (144p)。
我使用的FFmpeg命令:
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
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%
尝试了 youtube-dl 和 streamlink 但失败了。 所以,我使用 FFmpeg 因为它成功下载了视频和音频。我已阅读 FFmpeg 文档,但不知道应该使用什么命令。 我应该使用什么命令来 select 另一种品质? (例如:音频 64 kbps,视频:720p)
Note: just change (dot) to
.
如果您知道清单(表示集)中的流,则可以使用 ffmpeg 的“map”参数。您可以使用 ffprobe
列出流图ffprobe yourmanifest.mpd
你会得到类似的东西
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
现在您可以使用
将清单转换为 MP4ffmpeg -i yourmanifest.mpd -map 0:1 -map 0:2 -codec copy output.mp4
这将为您提供一个 MP4,其中包含第二个视频流(索引 1 处样本中的“290k”)和索引 2 处的音频流。