mpv-player / mpv

🎥 Command line video player
https://mpv.io
Other
27.87k stars 2.87k forks source link

[Feature Request] mpv is not able to concatenate multiple "--ytdl-raw-options" calls, it only handles the last one #6788

Closed sebma closed 5 years ago

sebma commented 5 years ago

mpv version and platform

mpv version : v2:0.29.1+git2~trusty platform : Ubuntu Linux

Reproduction steps

I have multiple ytdl-raw-options= lines in my mpv.conf but it seems mpv does not concatenate them, it only acknowledges the last one.

I have the ytdl-raw-options='abort-on-error=' in the default mpv options and I use ytdl-raw-options='sub-lang="en,eng,enUS,en-US,fr"' to only download the english and french subtitles in my [english] mpv profile.

But, as you can see in the following example, the first --ytdl-raw-options='sub-lang="en,eng,enUS,en-US,fr"' is ignored and ALL the 104 subtitles are downloaded (which takes quite some time) :

$ mpv --no-config --ytdl-raw-options='sub-lang="en,eng,enUS,en-US,fr"' --ytdl-raw-options='abort-on-error=' https://www.youtube.com/playlist?list=PLRv5TPGK6KtwWGOvqJJ_9t0c7_wwhxYB1
Playing: https://www.youtube.com/playlist?list=PLRv5TPGK6KtwWGOvqJJ_9t0c7_wwhxYB1

Playing: https://youtu.be/yO7NBfpaobY
 (+) Video --vid=1 (*) (vp9 1280x720 29.970fps)
 (+) Audio --aid=1 --alang=eng (*) 'DASH audio' (opus 2ch 48000Hz) (external)
     Subs  --sid=1 --slang=bn 'vtt' (webvtt) (external)
     Subs  --sid=2 --slang=jv 'vtt' (webvtt) (external)
     Subs  --sid=3 --slang=en 'vtt' (webvtt) (external)
     Subs  --sid=4 --slang=lv 'vtt' (webvtt) (external)
     Subs  --sid=5 --slang=ka 'vtt' (webvtt) (external)
     Subs  --sid=6 --slang=ar 'vtt' (webvtt) (external)
     Subs  --sid=7 --slang=be 'vtt' (webvtt) (external)
     Subs  --sid=8 --slang=ha 'vtt' (webvtt) (external)
     Subs  --sid=9 --slang=kn 'vtt' (webvtt) (external)
     Subs  --sid=10 --slang=mn 'vtt' (webvtt) (external)
     Subs  --sid=11 --slang=da 'vtt' (webvtt) (external)
     Subs  --sid=12 --slang=ca 'vtt' (webvtt) (external)
     Subs  --sid=13 --slang=az 'vtt' (webvtt) (external)
     Subs  --sid=14 --slang=sn 'vtt' (webvtt) (external)
     Subs  --sid=15 --slang=ur 'vtt' (webvtt) (external)
     Subs  --sid=16 --slang=sr 'vtt' (webvtt) (external)
     Subs  --sid=17 --slang=tr 'vtt' (webvtt) (external)
     Subs  --sid=18 --slang=mr 'vtt' (webvtt) (external)
     Subs  --sid=19 --slang=sv 'vtt' (webvtt) (external)
     Subs  --sid=20 --slang=am 'vtt' (webvtt) (external)
     Subs  --sid=21 --slang=fi 'vtt' (webvtt) (external)
     Subs  --sid=22 --slang=hu 'vtt' (webvtt) (external)
     Subs  --sid=23 --slang=ku 'vtt' (webvtt) (external)
     Subs  --sid=24 --slang=ky 'vtt' (webvtt) (external)
     Subs  --sid=25 --slang=ny 'vtt' (webvtt) (external)
     Subs  --sid=26 --slang=my 'vtt' (webvtt) (external)
     Subs  --sid=27 --slang=km 'vtt' (webvtt) (external)
     Subs  --sid=28 --slang=mi 'vtt' (webvtt) (external)
     Subs  --sid=29 --slang=hi 'vtt' (webvtt) (external)
     Subs  --sid=30 --slang=eu 'vtt' (webvtt) (external)
     Subs  --sid=31 --slang=si 'vtt' (webvtt) (external)
     Subs  --sid=32 --slang=sm 'vtt' (webvtt) (external)
     Subs  --sid=33 --slang=zu 'vtt' (webvtt) (external)
     Subs  --sid=34 --slang=af 'vtt' (webvtt) (external)
     Subs  --sid=35 --slang=hy 'vtt' (webvtt) (external)
     Subs  --sid=36 --slang=sq 'vtt' (webvtt) (external)
     Subs  --sid=37 --slang=su 'vtt' (webvtt) (external)
     Subs  --sid=38 --slang=ru 'vtt' (webvtt) (external)
     Subs  --sid=39 --slang=haw 'vtt' (webvtt) (external)
     Subs  --sid=40 --slang=yi 'vtt' (webvtt) (external)
     Subs  --sid=41 --slang=ht 'vtt' (webvtt) (external)
     Subs  --sid=42 --slang=it 'vtt' (webvtt) (external)
     Subs  --sid=43 --slang=la 'vtt' (webvtt) (external)
     Subs  --sid=44 --slang=xh 'vtt' (webvtt) (external)
     Subs  --sid=45 --slang=lt 'vtt' (webvtt) (external)
     Subs  --sid=46 --slang=gl 'vtt' (webvtt) (external)
     Subs  --sid=47 --slang=fy 'vtt' (webvtt) (external)
     Subs  --sid=48 --slang=el 'vtt' (webvtt) (external)
     Subs  --sid=49 --slang=fil 'vtt' (webvtt) (external)
     Subs  --sid=50 --slang=cy 'vtt' (webvtt) (external)
     Subs  --sid=51 --slang=vi 'vtt' (webvtt) (external)
     Subs  --sid=52 --slang=uz 'vtt' (webvtt) (external)
     Subs  --sid=53 --slang=nl 'vtt' (webvtt) (external)
     Subs  --sid=54 --slang=et 'vtt' (webvtt) (external)
     Subs  --sid=55 --slang=ga 'vtt' (webvtt) (external)
     Subs  --sid=56 --slang=ml 'vtt' (webvtt) (external)
     Subs  --sid=57 --slang=mg 'vtt' (webvtt) (external)
     Subs  --sid=58 --slang=sl 'vtt' (webvtt) (external)
     Subs  --sid=59 --slang=pl 'vtt' (webvtt) (external)
     Subs  --sid=60 --slang=th 'vtt' (webvtt) (external)
     Subs  --sid=61 --slang=ta 'vtt' (webvtt) (external)
     Subs  --sid=62 --slang=fr 'vtt' (webvtt) (external)
     Subs  --sid=63 --slang=zh-Hans 'vtt' (webvtt) (external)
     Subs  --sid=64 --slang=sw 'vtt' (webvtt) (external)
     Subs  --sid=65 --slang=pt 'vtt' (webvtt) (external)
     Subs  --sid=66 --slang=hmn 'vtt' (webvtt) (external)
     Subs  --sid=67 --slang=ne 'vtt' (webvtt) (external)
     Subs  --sid=68 --slang=sd 'vtt' (webvtt) (external)
     Subs  --sid=69 --slang=gd 'vtt' (webvtt) (external)
     Subs  --sid=70 --slang=so 'vtt' (webvtt) (external)
     Subs  --sid=71 --slang=lo 'vtt' (webvtt) (external)
     Subs  --sid=72 --slang=st 'vtt' (webvtt) (external)
     Subs  --sid=73 --slang=is 'vtt' (webvtt) (external)
     Subs  --sid=74 --slang=ko 'vtt' (webvtt) (external)
     Subs  --sid=75 --slang=ro 'vtt' (webvtt) (external)
     Subs  --sid=76 --slang=pa 'vtt' (webvtt) (external)
     Subs  --sid=77 --slang=bg 'vtt' (webvtt) (external)
     Subs  --sid=78 --slang=fa 'vtt' (webvtt) (external)
     Subs  --sid=79 --slang=zh-Hant 'vtt' (webvtt) (external)
     Subs  --sid=80 --slang=eo 'vtt' (webvtt) (external)
     Subs  --sid=81 --slang=kk 'vtt' (webvtt) (external)
     Subs  --sid=82 --slang=co 'vtt' (webvtt) (external)
     Subs  --sid=83 --slang=ps 'vtt' (webvtt) (external)
     Subs  --sid=84 --slang=gu 'vtt' (webvtt) (external)
     Subs  --sid=85 --slang=es 'vtt' (webvtt) (external)
     Subs  --sid=86 --slang=id 'vtt' (webvtt) (external)
     Subs  --sid=87 --slang=cs 'vtt' (webvtt) (external)
     Subs  --sid=88 --slang=bs 'vtt' (webvtt) (external)
     Subs  --sid=89 --slang=sk 'vtt' (webvtt) (external)
     Subs  --sid=90 --slang=ja 'vtt' (webvtt) (external)
     Subs  --sid=91 --slang=tg 'vtt' (webvtt) (external)
     Subs  --sid=92 --slang=yo 'vtt' (webvtt) (external)
     Subs  --sid=93 --slang=hr 'vtt' (webvtt) (external)
     Subs  --sid=94 --slang=de 'vtt' (webvtt) (external)
     Subs  --sid=95 --slang=uk 'vtt' (webvtt) (external)
     Subs  --sid=96 --slang=mt 'vtt' (webvtt) (external)
     Subs  --sid=97 --slang=ms 'vtt' (webvtt) (external)
     Subs  --sid=98 --slang=iw 'vtt' (webvtt) (external)
     Subs  --sid=99 --slang=ceb 'vtt' (webvtt) (external)
     Subs  --sid=100 --slang=te 'vtt' (webvtt) (external)
     Subs  --sid=101 --slang=mk 'vtt' (webvtt) (external)
     Subs  --sid=102 --slang=lb 'vtt' (webvtt) (external)
     Subs  --sid=103 --slang=no 'vtt' (webvtt) (external)
     Subs  --sid=104 --slang=ig 'vtt' (webvtt) (external)
AO: [pulse] 48000Hz stereo 2ch float
VO: [gpu] 1280x720 yuv420p
Fontconfig warning: ignoring C.UTF-8: not a valid language tag
AV: 00:00:03 / 01:58:01 (0%) A-V:  0.000 Dropped: 5 Cache: 45s+3MB

Expected behavior

The ytdl-raw-options= calls (or lines in the mpv.conf) are concatenated.

Actual behavior

The ytdl-raw-options= calls (or lines in the mpv.conf) are NOT concatenated and only the last ytdl-raw-options= is acknowledged.

Log file

Here is the mpv log : mpv_issue#6788.txt

CounterPillow commented 5 years ago

Does any option in mpv at all concatenate? Because I don't think concatenation was ever intended.

EDIT: glsl-shader I suppose? But if ytdl-raw-options is going to concatenate there still should be a way to reset it to an empty list in a profile

Argon- commented 5 years ago

Only "-append" options do so. And with those there exists a whole set of complementary operations to manipulate the list of options to be created. Other options don't concatenate afaik and I'm not aware of this being normal behavior anywhere else.

sebma commented 5 years ago

@CounterPillow You're right, other options don't need concatenation. I think this is the only one which does :

$ man mpv | egrep -- "^\s+--[^=]+options="
       --ytdl-raw-options=<key>=<value>[,<key>=<value>[,...]]

because it has an s at the end of it's name (just kidding)

Anyway, I guess, maybe this a more of a new feature request than a real issue, do you agree ?

sebma commented 5 years ago

@Argon- Maybe, you can create these options :

qmega commented 5 years ago

ytdl-raw-options is a key/value list option. --ytdl-raw-options-append is already a thing. It's not in the man page, but --list-options shows it. For whatever reason, key/value lists don't get -clr, though. (String lists do.)

sebma commented 5 years ago

@qmega What do you mean when you say

--ytdl-raw-options-append is already a thing

? I tried and run the following command but mpv says "Error parsing option ytdl-raw-options-apend (option not found)" :

$ mpv --no-config --ytdl-raw-options='sub-lang="en,eng,enUS,en-US,fr"' --ytdl-raw-options-apend='abort-on-error=' https://www.youtube.com/playlist?list=PLRv5TPGK6KtwWGOvqJJ_9t0c7_wwhxYB1
Error parsing option ytdl-raw-options-apend (option not found)
Setting commandline option --ytdl-raw-options-apend=abort-on-error= failed.

Exiting... (Fatal error)
$ echo $?
1
zc62 commented 5 years ago

Well, that's because it should be append, instead of apend.

append

sebma commented 5 years ago

@zc62 Oh I see :)

Now, in my [english] profile in my mpv.conf, I have this :

profile=fsd,english

[english]
alang=en,fr
ytdl-raw-options='sub-lang="en,eng,enUS,en-US,fr"'
ytdl-raw-options-append='abort-on-error='

and it works perfectly :

$ mpv https://www.youtube.com/playlist?list=PLRv5TPGK6KtwWGOvqJJ_9t0c7_wwhxYB1
Playing: https://www.youtube.com/playlist?list=PLRv5TPGK6KtwWGOvqJJ_9t0c7_wwhxYB1

Playing: https://youtu.be/g2TyxiEnsfw
[ytdl_hook] ERROR: This video contains content from LakewoodChurch, who has blocked it on copyright grounds.
[ytdl_hook] youtube-dl failed: unexpected error ocurred 
Failed to recognize file format.

Playing: https://youtu.be/yO7NBfpaobY
 (+) Video --vid=1 (*) (h264 854x480 29.970fps)
 (+) Audio --aid=1 --alang=eng (*) 'DASH audio' (opus 2ch 48000Hz) (external)
     Subs  --sid=1 --slang=en 'vtt' (webvtt) (external)
     Subs  --sid=2 --slang=fr 'vtt' (webvtt) (external)
AO: [pulse] 48000Hz stereo 2ch float
VO: [gpu] 854x480 yuv420p
Fontconfig warning: ignoring C.UTF-8: not a valid language tag
AV: 00:00:02 / 01:58:01 (0%) A-V:  0.000 Cache: 34s+1MB
Saving state.

But if I try this it does not work :

ytdl-raw-options='abort-on-error='
profile=fsd,english

[english]
alang=en,fr
ytdl-raw-options-append='sub-lang="en,eng,enUS,en-US,fr"'

I wonder why the subtitles are not loaded :

$ mpv https://www.youtube.com/playlist?list=PLRv5TPGK6KtwWGOvqJJ_9t0c7_wwhxYB1
Playing: https://www.youtube.com/playlist?list=PLRv5TPGK6KtwWGOvqJJ_9t0c7_wwhxYB1

Playing: https://youtu.be/g2TyxiEnsfw
[ytdl_hook] ERROR: This video contains content from LakewoodChurch, who has blocked it on copyright grounds.
[ytdl_hook] youtube-dl failed: unexpected error ocurred 
Failed to recognize file format.

Playing: https://youtu.be/yO7NBfpaobY
 (+) Video --vid=1 (*) (h264 854x480 29.970fps)
 (+) Audio --aid=1 --alang=eng (*) 'DASH audio' (opus 2ch 48000Hz) (external)
AO: [pulse] 48000Hz stereo 2ch float
VO: [gpu] 854x480 yuv420p
Fontconfig warning: ignoring C.UTF-8: not a valid language tag
AV: 00:00:04 / 01:58:01 (0%) A-V:  0.000 Cache: 38s+2MB
Saving state.

But then if I change my config to :

ytdl-raw-options='abort-on-error='
profile=fsd,english

[english]
alang=en,fr
ytdl-raw-options-add='sub-lang="en,eng,enUS,en-US,fr"'

then it works back again.

Do you have any idea why ?

wiiaboo commented 5 years ago

Run with --msg-level=ytdl_hook=debug. Look for a line with [ytdl_hook] Running: youtube-dl (...). Check which options are working or not. Works for me, both using -append and -add.

sebma commented 5 years ago

@wiiaboo My pb. seems to be solved by replacing ytdl-raw-options-append by ytdl-raw-options-add in my mpv.conf.

Now I have this and it works fine :

ytdl-raw-options='abort-on-error='
profile=fsd,english

[english]
alang=en,fr
ytdl-raw-options-add='sub-lang="en,eng,enUS,en-US,fr"'