emarsden / dash-mpd-cli Goto Github PK
View Code? Open in Web Editor NEWDownload media content from a DASH-MPEG or DASH-WebM MPD manifest
Home Page: https://emarsden.github.io/dash-mpd-cli/
License: MIT License
Download media content from a DASH-MPEG or DASH-WebM MPD manifest
Home Page: https://emarsden.github.io/dash-mpd-cli/
License: MIT License
Hi Eric,
Not sure where the issue is on the MPD below. There is 1 period, 2 audio and 5 video streams + subtitles. Even though I'm forcing to download video only, it is still failing due to an error associated with the subtitles. Any idea?
Thanks!
dash-mpd-cli --verbose --video-only --keep-video ".\video\video.mp4" --cookies-from-browser Chrome "https://vod-as-09-14.video.globo.com/j/eyJhbGciOiJSUzUxMiIsImtpZCI6IjEiLCJ0eXAiOiJKV1QifQ.eyJjb3VudHJ5X2NvZGUiOiJCUiIsImRvbWFpbiI6InZvZC1hcy0wOS0xNC52aWRlby5nbG9iby5jb20iLCJleHAiOjE2OTE5MDEwNzUsImlhdCI6MTY5MTg5MzA0MiwiaXNzIjoicGxheWJhY2stYXBpLXByb2QtZ2NwIiwib3duZXIiOiI4MjYzN2Q1ZS00MWI1LTRlZDAtODUwYi1mNzg3YjJmNzAzYjgiLCJwYXRoIjoiL3IyNDBfNzIwL3Y0NS9kYi82Mi9jYS83MDU2NzIzX2NhMDJiNDU3OWI2NjQwODIxMDE2MjI4OTk4YWIzYTdiMDNmNzIxODcvNzA1NjcyMy1XTjByNVEtbWFuaWZlc3QuaXNtLzcwNTY3MjMubXBkIn0.id5Os60-NfkEKZR5Qmxfo3r0SadZiHauXqS5-2M1vgDq5COWK-hAIQ6bTvmm8Gb9GytjCdYJ7hoA-sSABEt7nw61YJB1P_V-acTTeSqrHtCOlrFuzTy4EaGzNCgE1E-bjd0vpeZRbDieCgTBI-dPTT7WY63n3b4MRvby-IlwPuybhHhvUP-DGKvXth0uT3E147qQZUoqqf1hjnnz7j0OvikSbOVvnBhY8xPFkz0s48pfTh6mbRV9-zy8CLkL4HKF_3P3qYV0Zogpp4Qh1_6th4mTyClN1PR4YTEybad3SX4y2KfZTcGdvBH41IDAteFuJKeL08z-BB6TpuPFsl8gag/r240_720/v45/db/62/ca/7056723_ca02b4579b6640821016228998ab3a7b03f72187/7056723-WN0r5Q-manifest.ism/7056723.mpd"
[0s] [>-------------------------------------------------] Fetching DASH manifest Fetching the DASH manifest
DASH manifest has 1 period
Streams in period 1 (#1), duration 2677.556s:
audio mp4a.40.2 | 125 Kbps | lang=en
audio mp4a.40.2 | 125 Kbps | lang=pt
video avc1.64001E | 351 Kbps | 640x360
video avc1.64001E | 614 Kbps | 640x360
video avc1.64001F | 1067 Kbps | 854x480
video avc1.64001F | 1915 Kbps | 1280x720
video avc1.640028 | 2965 Kbps | 1280x720
subs Wvtt/wvtt | pt |
subs Vtt | pt |
Handling period 1 (# 1)
Using SegmentTemplate addressing mode for stpp subtitles
Download failed: invalid media stream: Subtitle representation is missing SegmentTemplate@duration
It would be useful to have a commandline argument --ignore-codec
that influences the selection of media stream. Some manifests are available with audio encoded in m4a as well as ec-3, and certain playback devices do not support all audio and video codecs. This would allow streams that can't be played to be ignored.
[3m] [#################################################>] Muxing audio and video
[2023-04-01T16:50:37Z INFO dash_mpd::ffmpeg] Muxer preference for mp4 is ["ffmpeg", "vlc"]
[2023-04-01T16:50:37Z INFO dash_mpd::ffmpeg] Trying muxer ffmpeg
[2023-04-01T16:50:38Z INFO dash_mpd::ffmpeg] ffmpeg stderr: Unrecognized option 'hide_banner'.
Error splitting the argument list: Option not found
[2023-04-01T16:50:38Z WARN dash_mpd::ffmpeg] Muxing with ffmpeg subprocess failed: muxing error running ffmpeg
[2023-04-01T16:50:38Z INFO dash_mpd::ffmpeg] Trying muxer vlc
[2023-04-01T16:50:38Z WARN dash_mpd::ffmpeg] Muxing with vlc subprocess failed: I/O error spawning VLC subprocess
[2023-04-01T16:50:38Z WARN dash_mpd::ffmpeg] All available muxers failed
Download error: muxing error all available muxers failed```
fail downloading
I am trying to download .mpd streams which request a token passed as a GET parameter in the HTTP request. As it doesnt seem like this is passing the the GET parameters from the URL I provide the program, any attempts to obtain the .m4s files results in HTTP 401 errors. Is there any way to do this with dash-mpd-cli?
PS C:\Users\Administrator\desktop> .\dash-mpd-cli.exe "https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/manifest.mpd?access_token=1!7vlgwMYEkBcGaHd6UuKkHMNkxD-wE2-pfN7mLltjz6bolOH7WH65BFJdm1Vnsz7ZTvbcy0BcZbzMT79sqSH9jQvvHe_S1UzQGJGbtvq-D_o-veaWmDEv-L0e_sYdffhuL6-Xk8uHy1DEcV9syYLVj02t612SGZtrYp6c052TfTOOk3g4FHLuj-cgkE5GcVa_C7Z5zZ8e8j5Kg8MuwiJbq2czfnqzzd6UQCg7m08YrGgO-JLRatYBUhyrW1-IXc0gyy5YgCR7jldbKD5Pzr9luZ09sX-YDzthtcdymDl8cx4cw400XhraY9JSjcV3cYt_jhrWyvVrCEO-sj9SaEWjhhv1Wb4cFlUkeP46KlBD7rNWNFjPdPioF8UBA2WGRU3pHgkZt2oyKYTOmzqrIK72Fr5wwF11rNV2xadgZDJ4FJ90z7oMXAVYuKUvom0TXk3LEpovz9bRkDdyS04UvrJDqQ7puo8zly5kRlHbEvGl_Smth1Bt9OIFgV9Yh8t0inG9U9joSzHkqIMlTqZcNCX0IJlpQQu622Nxk6ncA9EfzrwI2ZbfUk5IxTNgakMywm_-hWOJWOJjlB0kqjnC0Xh_wch_30R9IgK8t6BTAUAdDNLtIxRdAlyyXbnREaPZRnzoeqUIco3Vkl_vjIJzxTqAEpunWBkmov59mvaiz2FZX6Ckzatc3bXt_oUaNZhLfvbvMnxfO3874jaZXS66ZfiPiQgRhM2e-qHZotM7aXRav_g4UlwjBfvy80r-yw.." -v
[0s] [>-------------------------------------------------] Fetching DASH manifest Fetching the DASH manifest
DASH manifest has 1 period
Streams in period #1, duration 603.900s:
video avc1.640028 | 7812 Kbps | 1920x1080
video avc1.42c028 | 1953 Kbps | 854x480
Preparing download for period #1
Video stream selected: bw=1953 Kbps resolution=854x480 codec=avc1.42c028
Period #1: fetching 0 audio, 121 video and 0 subtitle segments
[1s] [>-------------------------------------------------] Fetching video segments HTTP status client error (401 Unauthorized) for url (https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/init.m4s) fetching video segment https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/init.m4s
[1s] [#>------------------------------------------------] Fetching video segments HTTP status client error (401 Unauthorized) for url (https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/1.m4s) fetching video segment https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/1.m4s
[2s] [#>------------------------------------------------] Fetching video segments HTTP status client error (401 Unauthorized) for url (https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/2.m4s) fetching video segment https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/2.m4s
[2s] [##>-----------------------------------------------] Fetching video segments HTTP status client error (401 Unauthorized) for url (https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/3.m4s) fetching video segment https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/3.m4s
[2s] [##>-----------------------------------------------] Fetching video segments HTTP status client error (401 Unauthorized) for url (https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/4.m4s) fetching video segment https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/4.m4s
[2s] [##>-----------------------------------------------] Fetching video segments HTTP status client error (401 Unauthorized) for url (https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/5.m4s) fetching video segment https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/5.m4s
[3s] [###>----------------------------------------------] Fetching video segments HTTP status client error (401 Unauthorized) for url (https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/6.m4s) fetching video segment https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/6.m4s
[3s] [###>----------------------------------------------] Fetching video segments HTTP status client error (401 Unauthorized) for url (https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/7.m4s) fetching video segment https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/7.m4s
[3s] [####>---------------------------------------------] Fetching video segments HTTP status client error (401 Unauthorized) for url (https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/8.m4s) fetching video segment https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/8.m4s
[3s] [####>---------------------------------------------] Fetching video segments HTTP status client error (401 Unauthorized) for url (https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/9.m4s) fetching video segment https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/9.m4s
[4s] [#####>--------------------------------------------] Fetching video segments HTTP status client error (401 Unauthorized) for url (https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/10.m4s) fetching video segment https://public.boxcloud.com/api/2.0/internal_files/1300373106323/versions/1422096702323/representations/dash/content/video/480/10.m4s
Download failed: network error more than max_error_count network errors
manifest:
https://cmesk-ott-vod-prep-prot.ssl.cdn.cra.cz/0199/3211/cze-dash-s-axinom-sd1-sd2-sd3-sd4-hd1-hd2-P1BCeo6o.ism/.mpd
i'm on windows 10
this is how i am running it:
dash-mpd-cli.exe https://cmesk-ott-vod-prep-prot.ssl.cdn.cra.cz/0199/3211/cze-dash-s-axinom-sd1-sd2-sd3-sd4-hd1-hd2-P1BCeo6o.ism/.mpd --cookies-from-browser Firefox --quality best --ffmpeg-location "D:\coding\yt-dlp\ffmpeg-master-latest-win64-gpl-shared\bin\ffmpeg.exe" --mp4decrypt-location "D:\coding\yt-dlp\Bento4-SDK-1-6-0-640.x86_64-microsoft-win32\bin\mp4decrypt.exe" --mkvmerge-location "D:\coding\yt-dlp\mkvtoolnix\mkvmerge.exe" -o test.mkv
versions:
ffmpeg version N-111859-g3c397a1d46-20230830
mkvtoolnix version 80.0 Roundabout
mp4decrypt version in file path
it produces an uplayable mkv file, i cannot play it on VLC with error "VLC could not decode the format " " (No description for this codec)" and the mp4 encoding fails after a while and is corrupted:
this is the info about the mkv file:
i am also attaching the manifest file:
manifest.mpd.txt
let me know if you need additonal info, thanks.
Could this promising looking tool support downloading manifests that define SCTE35?
When trying to download DASH with manifests such as: https://docs.aws.amazon.com/mediatailor/latest/ug/dash-ad-markers.html
I.e. with:
<scte35:Signal>
<scte35:Binary>/DAhAAAAAAAAAP/wEAUAAAHAf+9/fgAg9YDAAAAAAAA25aoh</Binary>
</scte35:Signal>
Then I get:
Download error: parse error parsing DASH XML: Parsing(
"Unexpected `Event::Start(\"scte35:Signal\")`",
)
There wouldn't be any handling needed, just ignoring those SCTE35 events would be fine, since they are not needed to download the audio/video sources.
Hello!
First of all, thank you. Your program helped me a lot!
So I have some problems to selecting the best video quality in some cases.
The manifest is like this:
Streams in period #1, duration 8940.932s:
audio mp4a.40.2 | 93 Kbps | lang=por
audio mp4a.40.2 | 93 Kbps | lang=org
video avc1.640029 | 512 Kbps | 480x270
video avc1.640029 | 1126 Kbps | 768x432
video avc1.640029 | 1843 Kbps | 1024x576
video avc1.640029 | 4091 Kbps | 1280x720
video avc1.640029 | 6348 Kbps | 1280x720
video avc1.640029 | 512 Kbps | 480x270 role=alternate
video avc1.640029 | 1126 Kbps | 768x432 role=alternate
video avc1.640029 | 1843 Kbps | 1024x576 role=alternate
video avc1.640029 | 4091 Kbps | 1280x720 role=alternate
video avc1.640029 | 6348 Kbps | 1280x720 role=alternate
When i use just --quality best
the program download one of two 1280x720@6348 Kbps (@ 59,94 fps), but i dont know what, if the main option or the alternate
When i add --prefer-video-width 1280
the program download one of two 1280x720@4091 Kbps (@ 29,97 fps) , but again i dont know what, if the main option or the alternate
In this case, there are two options of each quality because the service provide main streams as expected and the other option is something like a sequence of screenshots and isnt the normal videostream (i really dont know why)
I got the information that yt-dlp provide to try explain this case
ID EXT RESOLUTION FPS │ TBR PROTO │ VCODEC VBR ACODEC ABR ASR MORE INFO
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
dyHiAZ8. m4a audio only │ 96k dash │ audio only mp4a.40.2 96k 24k [por] DRM, DASH audio, m4a_dash
dyHjAZ8. m4a audio only │ 96k dash │ audio only mp4a.40.2 96k 24k [org] DRM, DASH audio, m4a_dash
dzEAAAif mp4 480x270 │ 524k dash │ avc1.640029 524k video only DRM, DASH video, mp4_dash
trickmodedzEAAAif mp4 480x270 1 │ 524k dash │ avc1.640029 524k video only DRM, DASH video, mp4_dash
dzGZmRGf mp4 768x432 │ 1153k dash │ avc1.640029 1153k video only DRM, DASH video, mp4_dash
trickmodedzGZmRGf mp4 768x432 1 │ 1153k dash │ avc1.640029 1153k video only DRM, DASH video, mp4_dash
dzHMzByf mp4 1024x576 │ 1887k dash │ avc1.640029 1887k video only DRM, DASH video, mp4_dash
trickmodedzHMzByf mp4 1024x576 1 │ 1887k dash │ avc1.640029 1887k video only DRM, DASH video, mp4_dash
dzEw7z-f mp4 1280x720 │ 4190k dash │ avc1.640029 4190k video only DRM, DASH video, mp4_dash
dzEzM2Of mp4 1280x720 │ 6501k dash │ avc1.640029 6501k video only DRM, DASH video, mp4_dash
trickmodedzEw7z-f mp4 1280x720 1 │ 4190k dash │ avc1.640029 4190k video only DRM, DASH video, mp4_dash
trickmodedzEzM2Of mp4 1280x720 1 │ 6501k dash │ avc1.640029 6501k video only DRM, DASH video, mp4_dash
So, is there any way that I can select the exact option I want to download?
PS: adding the raw MPD
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--Created with VSPP Streamer version 9.2.0.0 build Commit_id: d537ec715e771249b4933ee5f30b36c6710cc258 Commit_time: 1681376738 context FHCIAPIAHHLNKNFG-ICPIKBAAHHLNKNFG-->
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cenc="urn:mpeg:cenc:2013"
xmlns:mspr="urn:microsoft:playready"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
type="static"
mediaPresentationDuration="PT2H29M0.932S"
maxSegmentDuration="PT6.017S"
minBufferTime="PT6.017S">
<Period>
<AdaptationSet id="1"
group="1"
bitstreamSwitching="true"
segmentAlignment="true"
contentType="video"
mimeType="video/mp4"
maxWidth="1280"
maxHeight="720"
par="16:9"
maxFrameRate="30000/1001"
startWithSAP="1">
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
value="Widevine">
<cenc:pssh>XXXXX</cenc:pssh>
</ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"
value="MSPR 2.0">
<mspr:pro>XXXXX</mspr:pro>
</ContentProtection>
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011"
value="cenc"/>
<SegmentTemplate timescale="10000000"
media="S!dxIHQxhXtctE8Jy1yzbhSbdnEkdWUC1EQVNILURSTV9CUi1QTngg6gMVAQoLrw__/QualityLevels($Bandwidth$)/Fragments(video=$Time$)"
initialization="S!dxIHQxhXtctE8Jy1yzbhSbdnEkdWUC1EQVNILURSTV9CUi1QTngg6gMVAQoLrw__/QualityLevels($Bandwidth$)/Fragments(video=Init)"
presentationTimeOffset="17088295804034560">
<SegmentTimeline>
<S t="17088295804034560"
d="60060000"
r="1487"/>
<S d="40040000"/>
</SegmentTimeline>
</SegmentTemplate>
<Representation id="dzEAAAif"
bandwidth="524288"
codecs="avc1.640029"
width="480"
height="270"
frameRate="30000/1001"
sar="1:1"/>
<Representation id="dzGZmRGf"
bandwidth="1153433"
codecs="avc1.640029"
width="768"
height="432"
frameRate="30000/1001"
sar="1:1"/>
<Representation id="dzHMzByf"
bandwidth="1887436"
codecs="avc1.640029"
width="1024"
height="576"
frameRate="30000/1001"
sar="1:1"/>
<Representation id="dzEw7z-f"
bandwidth="4190000"
codecs="avc1.640029"
width="1280"
height="720"
frameRate="30000/1001"
sar="1:1"/>
<Representation id="dzEzM2Of"
bandwidth="6501171"
codecs="avc1.640029"
width="1280"
height="720"
frameRate="30000/1001"
sar="1:1"/>
</AdaptationSet>
<AdaptationSet id="2"
group="32"
bitstreamSwitching="true"
segmentAlignment="true"
contentType="video"
mimeType="video/mp4"
maxWidth="1280"
maxHeight="720"
par="16:9"
maxFrameRate="30000/1001"
startWithSAP="1"
codingDependency="false">
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
value="Widevine">
<cenc:pssh>XXXXX</cenc:pssh>
</ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"
value="MSPR 2.0">
<mspr:pro>XXXXX</mspr:pro>
</ContentProtection>
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011"
value="cenc"/>
<EssentialProperty schemeIdUri="http://dashif.org/guidelines/trickmode"
value="1"/>
<Role schemeIdUri="urn:mpeg:dash:role:2011"
value="alternate"/>
<SegmentTemplate timescale="10000000"
media="S!dxIHQxhXtctE8Jy1yzbhSbdnEkdWUC1EQVNILURSTV9CUi1QTngg6gMVAQoLrw__/QualityLevels($Bandwidth$)/Fragments(trickmode=$Time$)"
initialization="S!dxIHQxhXtctE8Jy1yzbhSbdnEkdWUC1EQVNILURSTV9CUi1QTngg6gMVAQoLrw__/QualityLevels($Bandwidth$)/Fragments(trickmode=Init)"
presentationTimeOffset="17088295804034560">
<SegmentTimeline>
<S t="17088295804034560"
d="60060000"
r="1487"/>
<S d="40040000"/>
</SegmentTimeline>
</SegmentTemplate>
<Representation id="trickmodedzEAAAif"
bandwidth="524288"
codecs="avc1.640029"
width="480"
height="270"
frameRate="1"
sar="1:1"
maxPlayoutRate="29.97"/>
<Representation id="trickmodedzGZmRGf"
bandwidth="1153433"
codecs="avc1.640029"
width="768"
height="432"
frameRate="1"
sar="1:1"
maxPlayoutRate="29.97"/>
<Representation id="trickmodedzHMzByf"
bandwidth="1887436"
codecs="avc1.640029"
width="1024"
height="576"
frameRate="1"
sar="1:1"
maxPlayoutRate="29.97"/>
<Representation id="trickmodedzEw7z-f"
bandwidth="4190000"
codecs="avc1.640029"
width="1280"
height="720"
frameRate="1"
sar="1:1"
maxPlayoutRate="29.97"/>
<Representation id="trickmodedzEzM2Of"
bandwidth="6501171"
codecs="avc1.640029"
width="1280"
height="720"
frameRate="1"
sar="1:1"
maxPlayoutRate="29.97"/>
</AdaptationSet>
<AdaptationSet id="3"
group="2"
bitstreamSwitching="true"
segmentAlignment="true"
contentType="audio"
mimeType="audio/mp4"
lang="por">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011"
value="2"/>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
value="Widevine">
<cenc:pssh>XXXXX</cenc:pssh>
</ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"
value="MSPR 2.0">
<mspr:pro>XXXXX</mspr:pro>
</ContentProtection>
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011"
value="cenc"/>
</AdaptationSet>
</Period>
</MPD>...
PS 2: I downloaded the version 0.2.8 ans worked as I wanted, saving my target version (id=dzEzM2Of).
Hello Eric,
Hope all is well :-)
Not really sure where to post this question/issue/request, so please apologize and feel free to close this issue if it shouldn't be here.
Apparently, the tool does not allow you to manually select which video stream you want to download from multiple options in the MPD. Please see the example below:
DASH manifest has 1 period
Streams in period 1 (# 1), duration 2673.085s:
audio mp4a.40.2 | 125 Kbps | lang=en
audio mp4a.40.2 | 125 Kbps | lang=pt
video avc1.64001E | 351 Kbps | 640x360
video avc1.64001E | 614 Kbps | 640x360
video avc1.64001F | 1068 Kbps | 854x480
video avc1.64001F | 1915 Kbps | 1280x720
video avc1.640028 | 2965 Kbps | 1280x720
subs Wvtt/wvtt | pt |
subs Vtt | pt |
--quality best = downloads the stream "video avc1.640028 | 2965 Kbps | 1280x720"
--quality worst = downloads the stream "video avc1.64001E | 351 Kbps | 640x360"
But what if I wanted to download this stream: "video avc1.64001F | 1915 Kbps | 1280x720"? Is there a way to force which stream to be selected; something similar to the argument "--prefer-language"?
Thanks in advance!
C:\Users\DeezNuts>dash-mpd-cli [mpd-url]
[2m] [#################################################>] Muxing audio and video
[2022-08-19T17:28:48Z INFO dash_mpd::ffmpeg] ffmpeg stderr: [aac @ 0000021d5d8a6d00] Number of bands (17) exceeds limit (13).
[h264 @ 0000021d5e0a1080] left block unavailable for requested intra4x4 mode -1
[h264 @ 0000021d5e0a1080] error while decoding MB 0 3, bytestream 3160
[2022-08-19T17:28:48Z WARN dash_mpd::ffmpeg] Muxing with ffmpeg subprocess failed: creating output file
[2022-08-19T17:28:48Z INFO dash_mpd::ffmpeg] Retrying mux with vlc subprocess
[2022-08-19T17:28:48Z WARN dash_mpd::ffmpeg] Muxing with vlc subprocess failed: spawning VLC subprocess
Error: muxing audio and video streams
Caused by:
0: spawning VLC subprocess
1: program not found
'rule' is not recognized as an internal or external command,
operable program or batch file.
any ideas where to go from here?
Hello!
Thank you for your work. I'm downloading video course for my non-programmer-friend :) And your app is helping me a lot.
But I'm facing a smal problem with HTTP request error with some audio or video fragments. I'm not entirely sure what causes them.
And I'm afraid fragments are missed because of them. So, the video and audio are out of sync.
I have encreased max-error-count
a lot, so video can loaded, but it's not best workaround.
So my questions are:
My logs:
>dash-mpd-cli-windows.exe -v -v -v -o s01_06.mp4 --quality intermediate --muxer-preference mp4:vlc --max-error-count 1000 https://.../master.mpd
[0s] [>-------------------------------------------------] Fetching DASH manifest
23:30:12 INFO Fetching the DASH manifest
23:30:13 INFO DASH manifest has 1 period
23:30:13 INFO Streams in period #1, duration 3612.067s:
23:30:13 INFO audio mp4a.40.2 | 127 Kbps | lang=? label=Unknown
23:30:13 INFO video avc1.4D401F | 2194 Kbps | 1280x720
23:30:13 INFO video avc1.640028 | 3113 Kbps | 1920x1080
23:30:13 INFO video avc1.4D401E | 803 Kbps | 640x360
23:30:13 INFO video avc1.4D401F | 1227 Kbps | 852x480
23:30:13 INFO Preparing download for period #1
23:30:13 INFO Using Representation>SegmentList addressing mode for audio representation
23:30:13 INFO Using Representation>SegmentList addressing mode for video representation
23:30:13 INFO Audio stream selected: bw=127 Kbps lang=? codec=mp4a.40.2
23:30:13 INFO Video stream selected: bw=2194 Kbps resolution=1280x720 codec=avc1.4D401F
23:30:14 INFO Period #1: fetching 905 audio, 905 video and 0 subtitle segments
...
23:42:13 ERROR error sending request for url (https://...) fetching video segment https://...
...
23:43:30 INFO Wrote 287.3MB to DASH video file (0.6 MB/s)
[13m] [#################################################>] Muxing audio and video
23:43:30 INFO Muxing audio and video streams
23:43:30 INFO Muxer preference for mp4 is ["vlc"]
23:43:30 INFO Trying muxer vlc
23:43:35 INFO Muxing with vlc subprocess succeeded
23:43:35 INFO Wrote 55.1MB to media file
[13m] [##################################################] Done
It would be useful to have commandline arguments that allow the user to request that certain Periods in a multi-Period manifest are not downloaded. For example, --skip-period-id could allow a Period with a specific @id attribute (which is printed when fetching with "-v" and "--simulate") to be ignored, and --skip-period-duration could skip all periods whose duration is less than the specified argument.
This functionality could be useful for fetching content which has been enriched with server-side ad insertion (SSAI) or dynamic ad insertion (DAI).
Can someone please help me with this please?
https://d1d34p8vz63oiq.cloudfront.net/3f5d3f51-f51d-40e2-b4a0-800e34796437/master.mpd
many MPD now include this element, so it should either be supported, or it should be clearly documented that it is not supported
Hi,
Can you add an option to provide formats which are not present in the original mpd?
For example:
If for example, from I want to download "$RepresentationID$" called VIDEO1 and from I want to download "$RepresentationID$" called AUDIO1 which are not present in the MPD, would it be possible to override the variables in the mpd?
For example the MPD might offer a lower quality version of video and audio, but the server still has a higher quality version available which is hidden (due to geo locks) but still accessible.
I'm thinking of such an option:
dash-mpd-cli --override "AdaptationSet=1 RepresentationID=VIDEO1" --override "AdaptationSet=2 RepresentationID=AUDIO1" [url]
running a command like this:
dash-mpd-cli --key 21b82dc2ebb24d5aa9f8631f04726650:602a9289bfb9b1995b75ac63f123fc86 `
http://example.com/v1/dash/196861183/manifest.mpd
I get this result:
Download failed: I/O error spawning mp4decrypt
I think it would be helpful if the tool here could just do the decryption itself. have you searched for any decryption crates?
I have a MPD link that I want to download and I also know the license URL.
I can watch it by this chrome extension.
How can I download the MPD file?
How can I tell the program that I want to download several or all the audios?
In the documentation I have not seen that it can be done or I have not found it.
Url obtained by running network sniffer while playing episode 1 with server 1 selected
https://goplay.ml/4b2d3734373035333434/Apple-of-My-Eye/Episode-1/
Hi, first of all great tool - works like a charm ;-).
Is it possible to download all Segments of a DASH-Stream including manifest tranparently without merging them?
My use case is that I want to get the manifest and all the fragments it references as-is, in order to host them elsewhere.
is an option available to show the current download speed? all I see currently is the elapsed time and a progress bar.
HTTP Header referer cannot work when download segments
--referer
only work when get .mpd , but not work when download segments
First of all, thanks for this great piece of SW.
Any idea what's behind this?
dash-mpd-cli.exe --ignore-content-type --quality best --cookies-from-browser Firefox --ffmpeg-location c:\app\downloader\ffmpeg.exe https://cdn01st01-2.o2tv.cz/aa/bbe7e0795a6e0a7a81bee134b904f73d/1685908116923/a3dc40e18fb2a82c9e5a0eb9d47fea778/dna-8-tv-pc-20230604T054900-20230604T102500/mpd
I am able to download mpd file manually (via curl), but I get this error/warn in a cycle
[2023-06-04T20:14:31Z WARN dash_mpd::fetch] Transient error after 5s: reqwest::Error { kind: Request, url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("cdn01st01-2.o2tv.cz")), port: None, path: "/aa/bbe7e0795a6e0a7a81bee134b904f73d/1685908116923/a3dc40e18fb2a82c9e5a0eb9d47fea778/dna-8-tv-pc-20230604T054900-20230604T102500/mpd", query: None, fragment: None }, source: hyper::Error(Connect, Custom { kind: Other, error: Custom { kind: InvalidData, error: AlertReceived(HandshakeFailure) } }) }
I took a link to the dash from a youtube stream initialPlayer.StreamingData.DashManifestUrl
dash-mpd-cli --quality=worst https://manifest.googlevideo.com/api/manifest/dash/expire/1670387314/ei/EsKPY7W1BIGAsfIPhdW4oAs/ip/154.13.53.175/id/W1oorPTCw4A.1/source/yt_live_broadcast/requiressl/yes/as/fmp4_audio_clear,webm_audio_clear,webm2_audio_clear,fmp4_sd_hd_clear,webm2_sd_hd_clear/vprv/1/pacing/0/keepalive/yes/fexp/24001373,24007246/itag/0/playlist_type/DVR/sparams/expire,ei,ip,id,source,requiressl,as,vprv,itag,playlist_type/sig/AOq0QJ8wRgIhAJZKg8Xq1kHqjRQysrv_StcyZSThQpBfxEN5kf8Mn89rAiEA1r9oTDr0TQVc-_XLj8DyTg9_aM2vJZuKwXCHzd9BeJs=
i got this error:
Download error: parse error parsing DASH XML: parse error premature end of input
link to file: manifest dl
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.