Portál AbcLinuxu, 6. října 2026 23:10

yt2txt

dnes 18:46 | Přečteno: 191×

Dost často se mi stává že narazím na youtube na video které mě sice tématicky zajímá, ale bohužel autorův verbální projev je natolik uširvoucí a celkově neposlouchatelný že musím video vypnout. Nezřídka bývají taky videa "obohacená" o otravnou muziku na pozadí, rychlé vizuální střihy, stroboskopické efekty a podobné zvrácenosti. Vyrůstal jsem v dobách kdy lidi na obrazovce měli jakžtakž kultivovaný projev a nehodlám se sebetrýznit dnešním audiovizuálním fástfůdem.

Youtube má naštěstí funkci která dokáže poměrně úspěšně převést to nesrozumitelné geglání a drmolení na titulky. Tyto se dají stáhnout samostatně pomocí yt-dlp. Stačí potom titulky nějak převést na okem čitelný text. Text ti nediktuje tempo, nevnucuje emoce, dá se snadno prohledávat, nezabírá stovky megabajtů místa. Je veliký rozdíl v tom jestli přečteš za pět minut text nebo jsi nucen hodinu trpět jak zvíře u videa.

Přikládám jednoduchý shell skript který jsem si na toto sestrojil. Zkusil jsem ho dovybavit anglickýma komentářema kdyby se to náhodou dostalo do ruky někomu kdo neumí česky.
#!/bin/sh
# this script using yt-dlp and xmllint to convert
# youtube video to readable plain text file
# Usage: sh yt2txt.sh video_id

lang=cs   # set prefered language
id=$1

if [ $(echo $id | wc -c) -ne 12 ]; then
    echo "invalid video id!"
    exit 1
fi

if yt-dlp --list-subs $id 2>&1 | grep -wq "(Original)"; then
dir=$HOME/yt2txt/$(date +%s)-$id
mkdir -p $dir && cd $dir
yt-dlp --ignore-config \
       --ignore-errors \
       --write-subs \
       --sub-langs all,-live_chat \
       --sub-format srv1 \
       --skip-download \
       --output "%(id)s" $id

# download auto generated/translated version
# if regular subtitles not available.
if ! ls -1 | grep -q "\.$lang"; then
# if you get HTTP Error 429 then try increase
# --sleep-subtitles to 30 seconds or more.
yt-dlp --ignore-config \
       --ignore-errors \
       --write-auto-subs \
       --sleep-subtitles 2 \
       --sub-langs .*-orig,$lang \
       --sub-format srv1 \
       --skip-download \
       --output "%(id)s-auto" $id
fi

# convert xml to readable text.
for i in *.srv1; do
    if [ -f "$i" ]; then
        xmllint --xpath '//text()' "$i" |
        sed 's/&[^;]*;//g;/^$/d' |
        tr -s '\n' ' ' | fold -sw70 > $(basename "$i" srv1)txt
        rm "$i"
    fi
done

# open result or run filemanager
s=$(ls -1 $dir | grep "\.$lang" | head -n1)
if [ -f "$s" ]; then
    less $s
else
    xdg-open $dir
fi

else
    echo "video $id have no subtitles!"
fi
Pokud by i přesto všecko vznikal problém získat z textu srozumitelnou informaci, dal by se teoreticky výstupní textový soubor předhodit AI aby ho předžvýkala do stravitelné podoby. Ale toto jsem zatím nezkoušel.        

Hodnocení: -

zatím nehodnoceno
        špatné • dobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

dnes 19:32 jejda | skóre: 27 | blog: jejda
Rozbalit Rozbalit vše Re: yt2txt
Odpovědět | Sbalit | Link | Blokovat | Admin
Příloha:
Nevímproč se při vkládání nějak rozbil ten sed regex. Mezi & a [ zmizel text amp. Vložím ten skript rači do souboru jako přílohu. Nevíte někdo jak to opravit?

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.