Download from arte.tv with subtitles and multiple audio tracks
I downloaded a film from arte.tv with yt-dlp and --sub-langs all --write-subs.
The .vtt files were there, mpv listed them and I could cycle through them with j, but no subtitle was ever displayed.
The cause
ARTE's files start with a long series of STYLE blocks before the first cue:
ffmpeg does not skip STYLE blocks.
It hits one, finds no --> timing line, and stops parsing.
The track exists and is empty.
mpv uses the same WebVTT demuxer, so it lists a track that never shows anything.
The fix
The obvious approach is to let yt-dlp convert the subtitles on download and get SRT files that mpv has no trouble with.
But --convert-subs srt does not help here, because yt-dlp hands the file to ffmpeg and ffmpeg chokes on the same STYLE blocks.
So drop everything before the first cue and put a clean header back:
This is done in place because mpv autoloads subtitles by filename.
Doing it automatically
A wrapper gets the final filename from yt-dlp with --print-to-file after_move:filepath and fixes every .vtt next to the video:
#!/usr/bin/env bash p=$(mktemp) yt-dlp -f 'bv[height<=720]+mergeall[vcodec=none][format_id!*=clear_voices]' --audio-multistreams --sub-langs all --write-subs \ --print-to-file after_move:filepath "$p" "$@" while read -r v; do for s in "${v%.*}".*.vtt; do { printf 'WEBVTT\n\n'; sed -n '/-->/,$p' "$s"; } > "$s.tmp" && mv "$s.tmp" "$s" done done < "$p" rm -f "$p"
format_id!*=clear_voices skips ARTE's clear voices tracks.
That is an accessibility option: a separate mix of the soundtrack with the dialogue emphasized and music, ambient noise and sound effects turned down, so speech is easier to understand.
The script not only downloads all subtitles but also all audio tracks. A lot of ARTE films have the original audio and a German or French dub if available. This leaves it to me to decide if I am fine with the (dubbed) German version, or prefer to watch the original audio track and read subtitles.