Automated release: version and notes generated from pull requests merged since 2.8.0.
Fixed
- Wrapped titles on Windows. The text file drawtext reads is now written with bare line feeds. Text mode wrote each kept line break as CRLF there, and drawtext from FFmpeg 6.1 draws that as a blank line plus a line break, so a wrapped hook, title or meme caption came out at twice its height. Trailing newlines are dropped (drawtext ignores one and draws a second as a blank line), and every route normalises CRLF and CR to LF before it lays out a label.
graphics.pylays out by line count. Thetitletemplate put its accent bar and subtitle for one line of text, so a two-line title was struck through and covered;lower-thirdprinted a two-line name over its title; thehookband stayed at 30% of the short side whatever the wrapped title needed, so a 9:16 hook of four or more lines ran out of it onto the bare video. Each now follows the number of lines. A one-line label draws as before; the hook band grows only when the wrapped text needs more than the base band holds.silence.py --filler --transcribeuses the transcript's language. With the default--filler-lang autoit always took the English list, so French or Japanese speech was transcribed correctly and its fillers stayed in the cut. The language the engine decoded picks the list: whisper.cpp'sresult.language, faster-whisper's detected language and openai-whisper'slanguage, when nothing was named. A transcript in a language with no built-in list is refused (kind: input), as--filler-langnames it, with--filler-words FILEas the way forward; the English list is not applied to speech it does not know.- Speech language handling.
--language autois no language (it was treated as a non-English one, which skipped Parakeet or refused on a Parakeet-only machine);en-US,engandEnglishreach Whisper asen, and a regional code (ja-JP) as its primary language (ja). Quantised English-only models (ggml-base.en-q5_1.bin,tiny.en-q8_0) count as English-only for routing, so a multilingual Whisper is preferred on undetected speech. Known gap: with whisper.cpp as the only engine and an English-only model, undetected speech is still decoded as English and the run adds no note. - A VideoToolbox refusal is reported by its outcome.
hw.fallbackis true only when the CPU retry succeeded. A failure whose CPU retry also failed names it ("the CPU retry failed too") and leavesfallbackfalse; a retry that times out keeps the neutral "retrying on the CPU encoder" line. A job of many encodes, or a process that ran the same refusal twice, names it once with its latest outcome. - Contract and docs.
doctor's plain-text summary no longer says no tool uses a GPU encoder;output_schemapublishesnotes(the VideoToolbox quality line) for every tool that takes--hw; the dry-run note forsilence.pyandexecution.model_downloads.whensay that--filler --transcriberuns the speech engine under--dry-run;docs/contract.mdlistsloop.py'sboomerang/notesandcropdetectasenvironment_dependent; the advice to pass--hwfor an export is given only where--hwcan run; the test-suite description counts all nine group modules; a test that needs no speech engine skips when any speech engine is installed. - fix: line-break, speech-language and VideoToolbox fallback bugs (#315)
What's Changed
Full Changelog: v2.8.0...v2.8.1