Problem
install.py checks that ffmpeg is installed but does not check whether the
binary was built with libass / libfreetype / fontconfig support.
On macOS, brew install ffmpeg installs a lite build with no
--enable-libass, so the subtitles= filter is not compiled in:
$ ffmpeg -filters | grep subtitle
# (empty — subtitles filter is missing entirely)
The user only discovers this at the very last step of the pipeline — final
video merge — where _7_sub_into_vid.py or _12_dub_to_vid.py invokes
ffmpeg with a subtitles=...:force_style=... filter and gets the cryptic:
[AVFilterGraph] No option name near 'output/dub.srt:force_style=...'
Error parsing filterchain
Error opening output file ...
Error : Invalid argument
This is especially confusing because the error message looks like a quoting
/ escaping bug (it took me ~2 hours to figure out the filter literally doesn't
exist in the user's ffmpeg).
Reproduction
- Fresh macOS install
brew install ffmpeg (the default lite formula)
- Run VideoLingo through to the dubbing-merge step
- → cryptic ffmpeg error, final video never produced
Suggested fix
In install.py / check_ffmpeg(), after confirming ffmpeg exists, also check
its filter list:
```python
def check_ffmpeg():
# ... existing check that ffmpeg is on PATH ...
# Verify libass support — subtitles filter requires it
result = subprocess.run(
['ffmpeg', '-hide_banner', '-filters'],
capture_output=True, text=True, timeout=10
)
if 'subtitles' not in result.stdout:
system = platform.system()
if system == 'Darwin':
fix_cmd = 'brew install ffmpeg-full && brew unlink ffmpeg && brew link --force --overwrite ffmpeg-full'
elif system == 'Linux':
fix_cmd = 'sudo apt install ffmpeg # or build with --enable-libass'
else:
fix_cmd = 'Install ffmpeg with libass / libfreetype / fontconfig support'
console.print(Panel.fit(
'❌ Your ffmpeg lacks libass support (the subtitles= filter is missing).\n'
\"VideoLingo's final subtitle/dubbing merge step will fail.\n\n\"
f'🛠️ Install a full ffmpeg build:\n[bold cyan]{fix_cmd}[/bold cyan]',
style='red'
))
raise SystemExit('ffmpeg with libass is required.')
```
This shifts the failure from the last step (after hours of TTS work) to the
install step (seconds), and turns a confusing parse error into an actionable
message.
Environment
- macOS 26.5 (arm64)
- Python 3.10.20
- ffmpeg 8.1.1 (Homebrew lite)
- VideoLingo
main @ dfbdc00
Happy to send a PR for this if interested.
Related: #560 (numpy 2.x fix)
Problem
install.pychecks thatffmpegis installed but does not check whether thebinary was built with
libass/libfreetype/fontconfigsupport.On macOS,
brew install ffmpeginstalls a lite build with no--enable-libass, so thesubtitles=filter is not compiled in:The user only discovers this at the very last step of the pipeline — final
video merge — where
_7_sub_into_vid.pyor_12_dub_to_vid.pyinvokesffmpeg with a
subtitles=...:force_style=...filter and gets the cryptic:This is especially confusing because the error message looks like a quoting
/ escaping bug (it took me ~2 hours to figure out the filter literally doesn't
exist in the user's ffmpeg).
Reproduction
brew install ffmpeg(the default lite formula)Suggested fix
In
install.py/check_ffmpeg(), after confirming ffmpeg exists, also checkits filter list:
```python
def check_ffmpeg():
# ... existing check that ffmpeg is on PATH ...
```
This shifts the failure from the last step (after hours of TTS work) to the
install step (seconds), and turns a confusing parse error into an actionable
message.
Environment
main@ dfbdc00Happy to send a PR for this if interested.
Related: #560 (numpy 2.x fix)