Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Saknas: Text - Subtitle #197

Open
68456gjp49586g opened this issue Nov 21, 2023 · 7 comments
Open

Saknas: Text - Subtitle #197

68456gjp49586g opened this issue Nov 21, 2023 · 7 comments
Labels

Comments

@68456gjp49586g
Copy link

Sedan 7/10, i år, försvann all text från SVT-play.
Rubbet! Långfilmer, natur, dokumentärer, serier, allt.
Det fungerar strömmat men texten kommer inte med i filen.

@Bub0
Copy link

Bub0 commented Nov 21, 2023

Testade, för mig så följer det med text, men den dyker inte upp även när jag väljer den.
Kanske går att lösa manuellt med vtt länken 🤔

@68456gjp49586g
Copy link
Author

68456gjp49586g commented Nov 21, 2023 via email

@svempagithub
Copy link

svempagithub commented Dec 29, 2023

Problemet är att ffmpeg inte stödjer STYLE-delen i vtt-filen. Så här börjar den som hör till Love Actually (på svtplay):

WEBVTT

STYLE
::cue {
    color: #DFDFDF;
}
::cue(.huvudpratare) {
    color: #00FFFF;
}
::cue(.ljud) {
    color: #FF00FF;
}
::cue(.ljudskylt) {
    color: #FF00FF;
}
::cue(.relivemark) {
    color: #FF0000;
}
::cue(.sang) {
    color: #00FF00;
}

e6d369ac-7198-419c-895f-768231bcd6a2
00:01:11.640 --> 00:01:16.800 align:left position:18%
<c.urfjarran><i>När jag deppar över världen tänker jag</i></c>
<c.urfjarran><i>på ankomsthallen på Heathrow.</i></c>

Det man behöver göra är att klippa bort STYLE-delen så att endast detta återstår:

WEBVTT

e6d369ac-7198-419c-895f-768231bcd6a2
00:01:11.640 --> 00:01:16.800 align:left position:18%
<c.urfjarran><i>När jag deppar över världen tänker jag</i></c>
<c.urfjarran><i>på ankomsthallen på Heathrow.</i></c>

Endera laddar man ned vtt-filen:

curl "https://svt-vod-5d.akamaized.net/d0/se/20231204/a477aaeb-6b0d-4af0-b08a-96efb2d341fb/text/text-open.vtt" > "Love actually.vtt"

... och redigerar för hand, och ändrar sedan i ffmpeg-kommandot som Privatkopiera skapar så att:

ffmpeg -i "https://svt-vod-5d.akamaized.net/d0/se/20231204/a477aaeb-6b0d-4af0-b08a-96efb2d341fb/hls-video-avc-1920x1080p25-3094/hls-video-avc-1920x1080p25-3094.m3u8" -i "https://svt-vod-5d.akamaized.net/d0/se/20231204/a477aaeb-6b0d-4af0-b08a-96efb2d341fb/hls-audio-sv-aac-2ch-192/hls-audio-sv-aac-2ch-192.m3u8" -i "https://svt-vod-5d.akamaized.net/d0/se/20231204/a477aaeb-6b0d-4af0-b08a-96efb2d341fb/text/text-open.vtt" -vcodec copy -acodec copy "Love actually.mkv"

... istället blir:

ffmpeg -i "https://svt-vod-5d.akamaized.net/d0/se/20231204/a477aaeb-6b0d-4af0-b08a-96efb2d341fb/hls-video-avc-1920x1080p25-3094/hls-video-avc-1920x1080p25-3094.m3u8" -i "https://svt-vod-5d.akamaized.net/d0/se/20231204/a477aaeb-6b0d-4af0-b08a-96efb2d341fb/hls-audio-sv-aac-2ch-192/hls-audio-sv-aac-2ch-192.m3u8" -i "Love actually.vtt" -vcodec copy -acodec copy "Love actually.mkv"

... eller så filtrerar man på något sätt bort STYLE-delen. Mest precist (på Mac OS X) är "sed":

ffmpeg -i "https://svt-vod-5d.akamaized.net/d0/se/20231204/a477aaeb-6b0d-4af0-b08a-96efb2d341fb/hls-video-avc-1920x1080p25-3094/hls-video-avc-1920x1080p25-3094.m3u8" -i "https://svt-vod-5d.akamaized.net/d0/se/20231204/a477aaeb-6b0d-4af0-b08a-96efb2d341fb/hls-audio-sv-aac-2ch-192/hls-audio-sv-aac-2ch-192.m3u8" -i <(curl "https://svt-vod-5d.akamaized.net/d0/se/20231204/a477aaeb-6b0d-4af0-b08a-96efb2d341fb/text/text-open.vtt" | sed -e 's/^STYLE//g;s/^::cue.*//g;s/^ *color:.*//g;s/^}//g') -vcodec copy -acodec copy "Love actually.mkv"

... men jag har bara testat det på just Mac OS X. Gissningsvis är en "grep"-baserad lösning mer plattformsoberoende:

ffmpeg -i "https://svt-vod-5d.akamaized.net/d0/se/20231204/a477aaeb-6b0d-4af0-b08a-96efb2d341fb/hls-video-avc-1920x1080p25-3094/hls-video-avc-1920x1080p25-3094.m3u8" -i "https://svt-vod-5d.akamaized.net/d0/se/20231204/a477aaeb-6b0d-4af0-b08a-96efb2d341fb/hls-audio-sv-aac-2ch-192/hls-audio-sv-aac-2ch-192.m3u8" -i <(curl "https://svt-vod-5d.akamaized.net/d0/se/20231204/a477aaeb-6b0d-4af0-b08a-96efb2d341fb/text/text-open.vtt" | grep -v 'STYLE\|::cue\|color: #\|}') -vcodec copy -acodec copy "Love actually.mkv"

Har bara kört detta med Firefox, men jag ser ingen anledning till att det skulle bli annorlunda med t.ex. Chrome.
/S

@stefansundin
Copy link
Owner

Mer om det här problemet står skrivet i #120.

@svempagithub
Copy link

Japp, det ser jag nu när du har länkat till den. Att man aldrig får vara först ...
Jag tycker dock att min "lösning" är enklare eftersom det enda jag behöver göra är två smärre justeringar i det ffmpeg-kommando som Privatkopiera ger mig, och sedan kör jag det på precis samma sätt som förut. Det kanske till och med går att implementera i en ny version av plug in:en?
/S

@stefansundin
Copy link
Owner

stefansundin commented Dec 29, 2023

I v0.4.0 så kan du ändra på vilken FFmpeg-sökväg som Privatkopiera använder. Så du kan kanske ändra det till att köra ett skript istället för ffmpeg, och det skriptet kanske kan automatisera fixen du har.

För att testa detta så skrev jag ett sådant skript som verkar fungera.

Spara med namnet ffmpeg-privatkopiera.sh:

#!/bin/bash -e

# Detta skript filtrerar argumenten som Privatkopiera försöker ge ffmpeg och arbetar runt ett problem i ffmpeg där vissa undertexter inte kan läsas korrekt.
# Obs: Läs och förstå skriptet nedanför innan du kör det. :)

args=()
for ((i=1; i<=$#; i++)); do
  if [[ ${!i} == *".vtt" ]]; then
    # Ladda ned vtt filen och ta bort skräp som ffmpeg inte förstår
    fn=$(basename "${!i}")
    curl "${!i}" | sed -e 's/^STYLE//g;s/^::cue.*//g;s/^ *color:.*//g;s/^}//g' > "$fn"
    args+=("${fn}")
  else
    args+=("${!i}")
  fi
done

set -x

ffmpeg "${args[@]}"

Gör filen körbar med chmod +x ffmpeg-privatkopiera.sh och kör sedan den istället för ffmpeg.

Som nämnt ovanför så kommer du kunna konfigurera vilken sökväg Privatkopiera använder för ffmpeg i v0.4.0, så du kan konfigurera den att vara ./ffmpeg-privatkopiera.sh så ger Privatkopiera dig ett kommando som du kan köra direkt.

Skälet till att jag inte vill försöka implementera detta direkt i Privatkopiera är att det inte kommer fungera så bra på alla operativsystem. Och förhoppningsvis så fixas detta i ffmpeg så slipper vi hålla på med massa workarounds så här.

P.S. Använd Markdown för att formatera kodsnuttar. Jag uppdaterade din kommentar lite. https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github

@agreedSkiing
Copy link

Rekommendera att get ffmpeg 7+ ett försök då den innhåller en "fix" som skippar flera av .vtt ::

95 /* ignore header chunk */
96 if (!strncmp(p, "\xEF\xBB\xBFWEBVTT", 9) ||
97 !strncmp(p, "WEBVTT", 6) ||
98 !strncmp(p, "STYLE", 5) ||
99 !strncmp(p, "REGION", 6) ||
100 !strncmp(p, "NOTE", 4))
101 continue;

https://git.videolan.org/?p=ffmpeg.git;a=blob;f=libavformat/webvttdec.c;h=6e60348764fd3350cc4f0645ec97ae9c27e9bb66;hb=083443d67cb159ce469e5d902346b8d0c2cd1c93

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants