FedWiki video transcription
Transcribe video/audio assets hosted on a FedWiki (Smallest Federated Wiki) page using local whisper.
FedWiki video transcription
End-to-end flow: FedWiki assets folder โ list files โ stream audio (ffmpeg) โ transcribe (whisper.cpp) โ .txt/.srt/.vtt.
When to use
The user references a FedWiki page or assets folder hosting videos and wants transcripts. FedWiki URLs look like http://<host>/view/<page>/view/<page>; the videos live in an assets story item that names a folder (e.g. workshop-videos).
Prerequisites (already installed on this machine)
- whisper.cpp built:
C:\Users\mitch\whisper.cpp-master\build\bin\Release\whisper-cli.exe - Model:
C:\Users\mitch\whisper.cpp-master\models\ggml-large-v3-turbo-q5_0.bin(high accuracy, multilingual) - ffmpeg:
...\WinGet\Packages\Gyan.FFmpeg_*\ffmpeg-*-full_build\bin\ffmpeg.exe
If building whisper.cpp fresh: it needs CMake + a C++ compiler. VS Build Tools 2019 bundles both โcmake -B build -G "Visual Studio 16 2019" -A x64 then cmake --build build --config Release.
(CMake is at ...\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe.)
How enumeration works (the key trick)
FedWiki's assets plugin renders the file list client-side, so the folder URL just returns the SPA
shell. The real listing endpoint โ discovered from /plugins/assets/assets.js โ is:
GET {WikiBase}/plugin/assets/list?assets={folder} -> {"error":null,"files":[ ... ]}
Individual files are served (no auth) at {WikiBase}/assets/{folder}/{filename}. Filenames may contain
spaces/apostrophes (Groundhog Day.mov, don't-panic.mov) so URL-encode each segment.
Note: the wiki may print asset URLs with hostname public (only resolves on the host machine).
Substitute the host you can actually reach (e.g. david.local).
Run it
& "C:\Users\mitch\.claude\skills\fedwiki-transcribe\transcribe-assets.ps1" `
-WikiBase "http://david.local" `
-AssetsFolder "workshop-videos"
Useful params: -OutDir (default C:\Users\mitch\transcripts), -Exclude @("file.mov"),-KeepWav, -Language en|auto, -Model <path>, -Threads 16.
The script is idempotent: a video whose <base>.txt already exists is skipped, so it can be
resumed after interruption. It streams audio (does not save the multi-GB video), deletes the temp WAV
on success, and logs to <OutDir>\_batch_log.txt. Run it in the background for large batches and tail
the log โ transcription is CPU-bound (no GPU here), roughly real-time per video with the large model.
Manual single-file equivalent
$ff="...\ffmpeg.exe"; $cli="...\whisper-cli.exe"; $m="...\ggml-large-v3-turbo-q5_0.bin"
& $ff -y -i "http://david.local/assets/workshop-videos/max_timeline_01.mov" -vn -ar 16000 -ac 1 -c:a pcm_s16le out.wav
& $cli -m $m -f out.wav -t 16 -otxt -osrt -ovtt -of out
Notes / gotchas
- whisper.cpp's built-in miniaudio decodes WAV/MP3 directly but not video containers โ hence ffmpeg.
- whisper wants 16 kHz mono PCM; the ffmpeg flags above produce exactly that.
- For non-English audio, pass
-Language auto(the turbo model is multilingual). - To speed up a large batch at some accuracy cost, point
-Modelatggml-base.en.binor asmallmodel.
upstream: ~/.claude/skills (local workbench; not yet promoted into agentprivacy-skills-v5 โ that promotion is a First-Person call) ยท author: Mitchell Travers ยท (โ๏ธโฅโฟปโฅ๐ง)๐