Počítačová hra Elite (Wikipedie), 3D vesmírní simulátor, byla vydána před 40 lety, 20. září 1984. Při té příležitosti byly zveřejněny další zdrojové kódy Elite pro platformy Apple, Atari, C64, NES a SNES a nedokončené Elite II pro BBC Micro.
V květnu bylo oznámeno, že dnes budou zveřejněny zdrojové kódy přehrávače Winamp. Stalo se tak (𝕏). Zdrojové kódy jsou k dispozici na GitHubu. Nejedná se ale o svobodný a otevřený software (licence).
Fiala navrhne odvolání Bartoše z postu vicepremiéra pro digitalizaci a ministra pro místní rozvoj ke 30. září. Důvodem je nezvládnutí digitalizace stavebního řízení, podle premiéra ji Bartoš není schopen dotáhnout do konce. „Po projednání analýzy digitálního stavebního řízení na vládě minulou středu a po dnešním ranním rozhovoru s panem vicepremiérem Ivanem Bartošem jsem bohužel nabyl jistoty, že není schopen tuto digitalizaci
… více »Komunikační platforma Telegram začne po tlaku úřadů poskytovat vládám více informací o svých uživatelích. V pondělí to oznámil její zakladatel a generální ředitel Pavel Durov. Ten už několik týdnů ve Francii čelí obvinění, že nedělá dost pro to, aby platformu nevyužívaly i kriminální živly. To chce Durov nyní také změnit, informují tiskové agentury.
Nová čísla časopisů od nakladatelství Raspberry Pi: MagPi 145 (pdf) a Hello World 25 (pdf).
Programovací jazyk Hy (Wikipedie) dospěl do verze 1.0.0. Po téměř dvanácti letech vývoje. Jedná se o dialekt programovacího jazyka LISP navržený pro interakci s programovacím jazykem Python.
Zen je webový prohlížeč vycházející z Firefoxu. Vývoj probíhá na GitHubu. Instalovat lze také z Flathubu.
Organizace Apache Software Foundation (ASF) vydala verzi 23 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.
Byla vydána verze 24.3 aneb čtvrtletní aktualizace open source počítačového planetária Stellarium (Wikipedie, GitHub). Vyzkoušet lze webovou verzi Stellaria na Stellarium Web.
Ve čtvrtek 3. října se v Red Hat Labu (místnost Q305) na FIT VUT v Brně uskuteční další Fedora Installfest. Od 10 do 16 budou v labu připravení odborníci na Fedoru ze společnosti Red Hat, kteří vám můžou pomoct nejen s instalací, ale taky pomoct s dalšími problémy a dotazy ohledně Fedory. Akce je primárně zaměřená na studenty FIT VUT, ale vítáni jsou i lidé, kteří tuto školu nenavštěvují.
#!/bin/bash if not [ -s "$1" ]; then printf "%s\n" "video not found!" exit 1 fi for p in ffmpeg ffprobe bc convert tesseract; do if not which $p > /dev/null 2>&1; then printf "%s\n" "$p not found!" exit 1 fi done video="$1" language=ces output_file="$(readlink -f "$video")-$(date +%s).srt" until [ "$c" = "w" -o "$c" = "y" ]; do printf "\n" read -n 1 -p "Select subtitle color [w]hite / [y]ellow : " c if [ "$c" = "w" ]; then sub_color=white elif [ "$c" = "y" ]; then sub_color=yellow fi done printf "\n%s\n%s\n%s\n" "sub_color=$sub_color" "output_file=$output_file" "Processing ....." duration=$(ffprobe -i "$video" -v error -select_streams v:0 \ -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 | \ cut -d. -f1) get_time() { hh=$(echo "$t/3600" | bc) mm=$(echo "($t-$hh*3600)/60" | bc) ss=$(echo "$t-$hh*3600-$mm*60" | bc) if [ $hh -lt 10 ]; then hh=0$hh; fi if [ $mm -lt 10 ]; then mm=0$mm; fi if [ $ss -lt 10 ]; then ss=0$ss; fi time="$hh:$mm:$ss" } t=0 while [ $t -lt $duration ]; do get_time t=$((t+1)) sub=$(ffmpeg -ss $time -i "$video" -an -sn -vf "crop=iw:ih/2:0:ih" -c:v png \ -vframes 1 -f image2pipe - 2> /dev/null | convert - -fuzz 25% -fill black +opaque "$sub_color" -threshold 50% -negate - | tesseract stdin stdout -l $language 2> /dev/null | grep [[:alnum:]]) if [ -n "$sub" -a -z "$sub_start" ]; then sub_start=$time sub_old="$sub"; fi if [ -z "$sub" -o "$sub_old" != "$sub" ]; then sub_end=$time; fi if [ -n "$sub_start" -a -n "$sub_end" ]; then n=$((n+1)) printf "%s\n%s %s %s\n%s\n\n" "$n" "$sub_start,000" "-->" "$sub_end,999" "$sub_old" | tee -a "$output_file" sub_start="" fi sub_end="" done
Celý ten proces probíhá tak, že ffmpeg vytáhne z filmu obrázek, ustřihne pryč vrchní půlku, pošle se to přes imagemagick convert filtr a nakonec to tesseract zkusí přečíst. Titulky bývají nejčasteji žluté nebo bílé. To byl docela oříšek protože když už to jakžtakž četlo bílé titulky, tak to zas nečetlo žluté a naopak. Vyřešil jsem to tak, že se skript na začáktu prostě zeptá jakou mají titulky barvu a podle toho potom nastaví convert filtr. Barva titulků se nechá a zbytek se vyplní černou
Chtělo by ale přesnější časování, občas se stane že titulek co trvá míň jak jednu sekundu to nezachytí. Milisekundy v tom výstupním srt souboru jsem provizorně obešel takovým megahnusným hackem v printf. Asi by se to dalo zpřesnit tak, že by ffmpeg tahal z filmu obrázky né po sekundě ale třeba po 100ms. Ale to by to celé trvalo nesmyslně dlouho. Už tak to trvá skoro hodinu. Další neduh to má ten, že stačí aby tesseract v jedné větě v jenom snímku přečetl třeba tečku místo čárky a i když je věta na první pohled stejná, tak skript z toho udělá dva titulky. Takže je ten srt soubor trochu větší. Klidně 100KB a víc. Záleží jak moc se ve filmu kecá. Největší peklo je, když se ve filmu v dolní polovině obrazu začnou objevovat nějaké nápisy v barvě titulků, ale s tím asi nejde dělat nic.
Výsledek to vypisuje jak na terminál a zároveň přes tee do souboru. Testovat se to dá hezky tak, že se ten film prostě pustí, ty vygenerované externí titulky se posunou na vrchní půlku obrazu (klávesy r t) a hned je v reálném čase vidět jak moc se to povedlo. U některých filmů je ten výsledek k pláči, no u některých to příjemně překvapilo až jsem čubrněl.
Tiskni Sdílej:
ffmpeg -i video.mp4 -r 1/1 $filename%03d.pngKdyž jsem to zkoušel, tak minutovou sekvenci vyblil cca za 6 sekund 2, Pak bych vybral jeden reprezentativní keyframe, ze kterého bych pomocí výběru podle barev vybral optimální selekci, tak aby zabrala pokud možno všechny barvy titulku. A z té bych pak udělal mapu barev:
pngtopnm title_yellow.pnm | pnmcolormap all > mapa.pnmRedukcí barev se výrazně zjednoduší a zrychlí následné zpracování. 3, No a pak bych s využitím této mapy bych projel ve smyčce všechny snímky: for i in (ls *.png) ; do pngtopnm $i | pnmremap -map=mapa.pnm -missingcolor=white > ${i/png/pnm} ; done Ještě víc by se to dalo urychlit tím, že bych před ten pnmremap předřadil pnmcut, aby se zpracovávala jen ta část obrazu, kde se vyskytují titulky. Čímž by ještě víc zredukoval objem dat s nimiž by se pak měl tesseract zabývat. A k jejich zpracování bych si napsal jednoduchý skriptík, který by bral jeden po druhém a přes pnmpsnr, porovnál jestli nedošlo ke změně. Pokud jo, tak pokud by šlo o začátek titulku, tak by zavolal tesseract, a když by to byl konec, tak by zapsal výsledek s číslem počátečního a koncového keyframe do souboru s titulky.
test01.png
je výsledek po průchodu přes všechny snímky, test02.png
pouze přes dva), trochu chytřejší implementace (d(p1, p2) > t) není o nic lepší (test04.png
je výsledek po průchodu přes všechny snímky při t=10). Zvyšování thresholdu nepomáhá. Co je zvláštní, tak že i pokud threshold nastavím tak absurdně vysoko (dejme tomu na 300), že téměř všechny pixely ve scéně zůstanou netknuty, titulky to stejně částečně usekne (viz test07.png
). Napadá mě jediné logické vysvětlení, že tam dochází k nějakému nepatrnému posunu, což je věc, kterou jsem fakt nepředpokládal. Čekal bych, že titulek bude pozicovaný vždy stejně.
No ale zkoušel jsem ty framy projet od oka a žádného viditelného posunu jsem si nevšiml, tak fakt nevím. Protože pokud tam k tomu posunu nedochází, tak by to aspoň o trochu lepší výsledky produkovat mělo, ne? Pak by bylo na čase přemýšlet, jak to optimalizovat (zmenšení viewportu na relevantní část, nějaké půlení intervalu, aby to nebralo úplně všechny snímky, …). Pokud je to ale opravdu tím skákáním a neudělal jsem teď v rychlosti někde jen nějakou stupidní chybu, bylo by nutné místo jednotlivých pixelů sledovat nějaké matice sousedních pixelů atd. Natrénovat nějaký model přímo na čtení titulků by v dnešní době asi byla rozumnější cesta.
# all frames:: # mkdir all_frames_orig # cd all_frames_orig # ffmpeg -i ../Trailer_2020.orig.mp4 -vsync 0 -r 25 -f image2 %04.png # cd .. ## tohle ale muze trvat dooost dlouho (4000 asi 4 hodiny): ## vysekne jen vybrane snimky for f in $(seq 0 4752); do fn=$(printf "%04d.png" $f) ffmpeg -i ../Trailer_2020.orig.mp4 -vf "select=eq(n\,$f)" -vframes 1 $fn done ####### mkdir key_frames_orig_hms cd key_frames_orig_hms # ffprobe -select_streams v -show_frames -show_entries frame=pict_type -of csv ../Trailer_2020.orig.mp4 ffprobe -select_streams v -show_frames -of csv ../Trailer_2020.orig.mp4 > trailer_ffprobe.out cat trailer_ffprobe.out | awk -F',' '{print $5,$6,$19}' > trailer_ffprobe_types.out grep 'I' trailer_ffprobe_types.out > trailer_ffprobe_types_keys.out ## vyzaduje all_frames nebo vysekavat po jednom (viz vyse) cat trailer_ffprobe_types_keys.out | while read a b c; do zpframe=$(printf '%04d' $a); secs=$(printf '%.2f' $b); ms=$(python -c"print('{}m{:02.2f}s'.format(int($b//60),$b % 60))") convert ../all_frames_orig/$zpframe.png -quality 80 ./${zpframe}_${secs}s_${ms}.jpg; done
-noaccurate_seek
Když to čte jenom každý pětadvacátý snímek tak to zas až tak zoufale pomalé není. Nejvíc na tom zdržuje to OCR které se nakonec zavolat stějně musí. Když by se ffmpeg překompiloval s volbou --enable-libtesseract
tak se tím zpřístupní filtr ocr. Ale to moc nechápu jak to funguje.
jo :D :D ;D ;D
a furt jim tam řikám jak je jako ten linux supr jak všecko funguje aže takovej a takovej problémek by v linuxu vubec nebyl možnej i když vim žeto jako neni pravda a každou chvilku se musí v linuxu něco vopravovat :O :D :D ;D
Az na to ze na DVD jsou titulky ve vlastnich stopach ...
coz tady autor resi uplne jiny problem o oplne jine komplexite ... HardCoded SUBS :D , ale u uzivatele windows clovek neceka ze pochopi psany text a nebo vi neco o technologii na pozadi
ne, je to celkem relevantni .. chtel bych videt tn X let stary program na widle co to udela na kliknuiti ..
to jestli je autor pirat nebo ne je irelevatni, i ten kdo grabuje orig dvd a OCRkem protahuje titulky je pirat ..
Kdyby používal "neuronku", tak se neptá.Ptá, protože potřebuje trénovací data.
co tohleto hele :O :O
No to je vlastně původní důvod, proč toto celé vzniklo. Protože se mi ten videocr nepodařilo rozhýbat. Taky autor toho videocr píše, že dvacetisekundové video to čte tři minuty. To se mi zdá hodně pomalé. Teď zrovna překopávám tady ten bash skript tak, že čte za sekundu ne jeden obrázek ale dva a zjišťuju že to stačí. Žádné titulky netrvají míň jak 500ms. V té původní verzi co je navrchu v blogu se mi občas krátký titulek ztratil. Hodně se tím zvýšila přesnost časování. Bohužel s tím ale narostl počet duplikátů (asi v tom mám bug) a taky to celé trvá dvakrát dýl. Přibližně je to stejně rychlé jak přehrávání. Dám to do přílohy. Přijde mi že je to o maličko víc použitelné jak ta původní verze.
Našel jsem na toto téma pár zajímavých odkazů Pre-processing for OCR (outlined font) a converting fuzzy outlined text for ocr.Taky autor toho videocr píše, že dvacetisekundové video to čte tři minuty.No to je fakt HODNĚ pomalé. Jak bych na to šel já jsem popsal o kousek výše.