Text extraction part
After downloading the video
yt-dlp -f bestvideo -o "v12.%(ext)s" "https://www.youtube.com/watch?v=WQvrbZEK0LE"There is no need in every frame, but rather every page. The audio text reader being software is nicely reading at the same pace (roughly) between 90 to 110 seconds per page.
Taking lower estimate 90s (duplicates are better than missed text) it would be about 0.011 which is our ffmpeg -r parameter
echo $((1.0/90))(expect this command to run for some time; also consider result frames file size (123 MB on my machine))
0.011111111111111112
mkdir -p frames(.jpg takes less space that .png and there was not much difference in text output)
ffmpeg -i v12.webm -r 0.011 frames/ffmpeg_%0d.jpg
For some reason frames 1 and 2 are just solid black color
(I get why first one is
(it probably gets taken during the screen transition),
but I am still confused by the second one)
I am going to replace frame 2 (ffmpeg_2.jpg) by hand, taking screenshot at 5-th second
and delete frame 1 (ffmpeg_1.jpg)
yes | ffmpeg -i v12.webm -ss 00:00:05 -vframes 1 frames/ffmpeg_2.jpgyes | => because will ask for confirmation to replace already existing file;
rm frames/ffmpeg_1.jpg
lets take random frame and try to get good text result from it
It got me ffmpeg_357.jpgmkdir -p test find frames -type f | sort -R | tail -1 | xargs -I {} cp {} test/
There is some wallpaper/banners on the sides;
I checked its size by opening image in GIMP
it was about 320px
Chop these banners off and grayscale the image with imagemagick:
magick convert test/ffmpeg_357.jpg -chop 320x0 -gravity East -chop 320x0 -colorspace Gray test/gray_357.jpg
tesseract -l deu test/gray_357.jpg test/gray_357
Tesseract Open Source OCR Engine v4.1.1 with Leptonic
Warning: Invalid resolution 0 dpi. Using 70 instead
Estimating resolution as 12
Text output (content of the file: test/gray_357.txt)
hatte, als er ihnen auf dem Platz begegnet war, war nirgends zu sehen
Es tut mir leid, wenn ich das Falsche gesagt habe. Nein, ich entschuldig
mich. Ja wirklich. Es war mein Fehler. Ja wirklich
Hm.
Dann, wie wäre es dann damit? Ich, ich, dieser fühlt, dieser kann für Si
nützlich sein. Hehe. Ah, wie dumm ich war, den großen untoten König zum Fein
zu machen. Wenn du mir also die Chance gibst, diesen Fehler auszugleichen
würde ich ... hehe, du wirst es nicht bereue
Bauser ging auf beide Knie und verschränkte die Hände, als er um Gnad
bettelte
Was für eine erbärmliche Pose das war. Doch Näjaa dachte überhaupt nicht so
Nein, sie hatte bereits akzeptiert, dass dies die richtige Aktion war, die ei
Feind angesichts der wahren Form des Zaubererkönigs ergreifen sollte
Gleichzeitig erinnerte sie sich lebhaft an die Worte des Naga, den sie i
Zauberreich getroffen hatten: Ein weiser Mann würde sich sofort zu seine
Füßen werfen und um Gnade bitten
In diesem Fall war das Schicksal derer, die nicht sofort knieten
Ich verstehe ... nun, ich mag diejenigen, die verstehen, dass sie falsch lage
und hart daran arbeiten, ihre Fehler zu korrigieren
Das heißt das
Bausers Gesicht strahlte vor Freude. Diese Freude wurde jedoch sofor
weggerissen
Pestonya und Nigredo wären jedoch nicht glücklich, wenn ich Sie zu eine
meiner Untergebenen machen würde. Seien Sie auch entspannt. Ich werde nicht
Verschwenderisches tun, als nur den Schädel zu benutzen. Ich werde jeden Tei
von dir voll ausnutzen
Jetzt stirb, sagte der Zaubererkönig, als er einen schlanken Fingerknoche
aufrichtete.
Aiiiieee! Nein, nein, nein! Ich will nicht sterben !! Warten!! Ich flehe dic
(_aoıı! Birra ich £labadich anl Ich _ ich haha ismar nach ainan Wacr LiLL
first and last lines are not completely visible therefore
some gibberish is expected;
also first and last lines more than likely are presented
in neighboring pages
(it will be important once we begin cleaning
from duplicate and gibberish lines)
Now run a for loop to repeat tested actions on all of the frames
mkdir -p text
for f in frames/*; \ do gray_name=$(echo $f | sed "s/ffmpeg/gray/") && \ magick convert $f -chop 320x0 -gravity East -chop 320x0 \ -colorspace Gray $gray_name && \ text_name="text/$(basename $gray_name | sed "s/.jpg//)" && \ tesseract -l deu $gray_name $text_name
Concatenate all the content in one file keeping correct order
(there was a better way to run ffmpeg command
to get file format like ffmpeg_001 in order to avoid
a headache with sorting,
but that what I did when I started to write this,
so it is too late for regrets
mkdir -p result
find text -type f | sort -n -k 1.11,1.13 | xargs cat > "result/v12.txt"And thats our yet unclean text file
wc -l result/v12.txt && du -h result/v12.txt
20632 result/v12.txt 760K result/v12.txt
Summary of what happened
The frames were taken from video then converted to cleaner gray images, after that text files were made by tesseract and end up in one concatenated file
yt-dlp -f bestvideo -o "v12.%(ext)s" \ "https://www.youtube.com/watch?v=WQvrbZEK0LE" mkdir -p frames ffmpeg -i v12.webm -r 0.011 frames/ffmpeg_%0d.jpg yes | ffmpeg -i v12.webm -ss 00:00:05 -vframes 1 frames/ffmpeg_2.jpg rm frames/ffmpeg_1.jpg mkdir -p text for f in frames/*; do gray_name=$(echo $f | sed "s/ffmpeg/gray/") && \ magick convert $f -chop 320x0 -gravity East -chop 320x0 \ -colorspace Gray $gray_name && \ text_name="text/$(basename $gray_name | sed "s/.jpg//)" && \ tesseract -l deu $gray_name $text_name mkdir -p result find text -type f | sort -n -k 1.11,1.13 | \ xargs cat > "result/v12.txt"