Giter VIP home page Giter VIP logo

dash-mpd-cli's People

Contributors

dependabot[bot] avatar emarsden avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

dash-mpd-cli's Issues

Download failing due to "Subtitle representation is missing SegmentTemplate@duration"

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

Add commandline argument --ignore-codec

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.

error when downloading

[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

Subtitle files remain on the Temp folder

Hey Eric,
Just realized that on the "\AppData\Local\Temp" folder, the original subtitle files downloaded by the tool don't get deleted after they are converted to .srt. The audio and video files are deleted normally after getting merged, but the subtitles remain there.

image

Thanks!

Append token to request URL

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

does not work with this manifest

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:
image

this is the info about the mkv file:
image
i am also attaching the manifest file:

manifest.mpd.txt
let me know if you need additonal info, thanks.

Throws parse error for DASH with SCTE35

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.

Selecting the video quality

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

Option to manually select the video stream?

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!

Downloading off brightcove (wetv) error

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?

Ability to handle http errors: retrying, logging response

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:

  1. Are video-audio are desynced after HTTP errors?
  2. Is it possible to retry an HTTP request in case of an error?
  3. How can I see details of errored response?

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

Add commandline arguments --skip-period-id, --skip-period-duration

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

doesnt support ContentProtection

many MPD now include this element, so it should either be supported, or it should be clearly documented that it is not supported

Feature request: Custom variables

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]

native decryption

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?

Doesn't work for this URL, have tested on different machines

Just downloading without merging

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?

download speed

is an option available to show the current download speed? all I see currently is the elapsed time and a progress bar.

Transient error - InvalidData, error: AlertReceived(HandshakeFailure)

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) } }) }

won't work on youtube dash manifest

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.