Dětem začala škola a nedobrovolně se tak musí vzdělávat. Avšak pro dospělé, kteří se chtějí vzdělávat nebo naopak se o vědomosti podělit, je tu Virtuální Bastlírna - jako každý měsíc si můžete online a zdarma nezávazně popovídat o vědě a technice nejen s bastlíři, ale i s vývojáři, vědci nebo profesory. A čemu se strahováci budou věnovat? Blíží se KiCAD 11 s nespočtem novinek, z nichž zde musí zmínit alespoň možnost kótování a závislostí z
… více »Asahi Linux, tj. Linux pro Apple Silicon, oficiálně podporuje čipy M3 (M3, M3 Pro a M3 Max).
Společnost Acer oslavila 50 let. Na tiskové konferenci next@acer představila řadu novinek. Vypíchnout lze přenosný ePaper displej Acer EP130K, přenosné řešení se třemi displeji Acer PD163Q P3 nebo herní handheld a notebook v jednom DualPlay Mini.
Server SiFive BigSky SF-2U870 2U je založený na jádře SiFive P870-D, zatím je naintegrovaných 32 jader 256 GB RAM 2 GHz, škálovat lze do 256 jader na čip. O něco podrobnější popis serveru v článku SiFive BigSky Ships the First RISC-V Server. Is the GPU Head Node the Prize? na futurumgroup.com. Asi ani tento čip nebude na úrovni nejlepších 64-bit ARMů a AMD Zenů, ale splňuje RVA23 specifikaci a je podporovaný Ubuntu 26.04 LTS a RHEL 10. V článku je
… více »Na YouTube lze zhlédnout nový celovečerní dokumentární film The Story of VS Code | Official Documentary věnovaný Visual Studio Code.
Farid Abdelnour se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 26.08.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
Byla vydána nová stabilní verze 8.2 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 152. Přehled novinek i s náhledy v příspěvku na blogu.
Byla vydána nová stabilní verze 4.0 svobodného multiplatformního softwaru pro editování a nahrávání zvukových souborů Audacity (Wikipedie). S rozhraním přepsaným do Qt. Přehled novinek také na YouTube. Ke stažení je oficiální AppImage. Zatím starší verze Audacity lze instalovat také z Flathubu a Snapcraftu.
NVIDIA kupuje Hugging Face za 12,93 miliardy dolarů.
#!/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.
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.