install.py should detect missing libass support in ffmpeg (Homebrew lite ffmpeg breaks subtitle burning)
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 argumentThis 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)
Source: Huanshere/VideoLingo