Manim working in Terminal, but extension can't find ffmpeg
Hi,
I installed manim to a conda environment on my Mac. I activated the environment and ran it with success:
Last login: Sun Aug 25 10:37:06 on ttys000
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
(base) Rizkys-Macbook-Air:~ rizkylubis$ conda activate manim-env
(manim-env) Rizkys-Macbook-Air:~ rizkylubis$ manim -pql /Users/rizkylubis/Documents/Coding_Projects/manim_test.py
Manim Community v0.18.1
[08/25/24 10:40:26] INFO Animation 0 : Using cached cairo_renderer.py:88
data (hash :
1185818338_468798911_223132457
)
INFO Animation 1 : Using cached cairo_renderer.py:88
data (hash :
624642324_1772076266_325649555
8)
INFO Animation 2 : Using cached cairo_renderer.py:88
data (hash :
624642324_1733944848_285462960
9)
INFO Combining to Movie file. scene_file_writer.py:617
INFO scene_file_writer.py:737
File ready at
'/Users/rizkylubis/media/v
ideos/manim_test/480p15/Sq
uareToCircle.mp4'
INFO Rendered SquareToCircle scene.py:247
Played 3 animations
INFO Previewed File at: file_ops.py:231
'/Users/rizkylubis/media/videos/man
im_test/480p15/SquareToCircle.mp4'
(manim-env) Rizkys-Macbook-Air:~ rizkylubis$
I opened the manim_test.py file in VS Code, changed the python interpreter to my manim-env. When I run the Manim Sideview extension I get this:
Manim Extension XTerm
Serves as a terminal for logging purpose.
Extension Version 0.2.13
MSV /Users/rizkylubis/Documents/Coding_Projects>"/opt/anaconda3/envs/manim-env/bin/manim" "/Users/rizkylubis/Documents/Coding_Projects/manim_test.py" SquareToCircle
/opt/anaconda3/envs/manim-env/lib/python3.10/site-packages/pydub/utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
Manim Community v0.18.1
╭───────────────────── Traceback (most recent call last) ──────────────────────╮
│ /opt/anaconda3/envs/manim-env/lib/python3.10/site-packages/manim/cli/render/ │
│ commands.py:119 in render │
│ │
│ 116 │ │ for SceneClass in scene_classes_from_file(file): │
│ 117 │ │ │ try: │
│ 118 │ │ │ │ with tempconfig({}): │
│ ❱ 119 │ │ │ │ │ scene = SceneClass() │
│ 120 │ │ │ │ │ scene.render() │
│ 121 │ │ │ except Exception: │
│ 122 │ │ │ │ error_console.print_exception() │
│ │
│ /opt/anaconda3/envs/manim-env/lib/python3.10/site-packages/manim/scene/scene │
│ .py:147 in __init__ │
│ │
│ 144 │ │ │ ) │
│ 145 │ │ else: │
│ 146 │ │ │ self.renderer = renderer │
│ ❱ 147 │ │ self.renderer.init_scene(self) │
│ 148 │ │ │
│ 149 │ │ self.mobjects = [] │
│ 150 │ │ # TODO, remove need for foreground mobjects │
│ │
│ /opt/anaconda3/envs/manim-env/lib/python3.10/site-packages/manim/renderer/ca │
│ iro_renderer.py:54 in init_scene │
│ │
│ 51 │ │ self.static_image = None │
│ 52 │ │
│ 53 │ def init_scene(self, scene): │
│ ❱ 54 │ │ self.file_writer: Any = self._file_writer_class( │
│ 55 │ │ │ self, │
│ 56 │ │ │ scene.__class__.__name__, │
│ 57 │ │ ) │
│ │
│ /opt/anaconda3/envs/manim-env/lib/python3.10/site-packages/manim/scene/scene │
│ _file_writer.py:88 in __init__ │
│ │
│ 85 │ │ ) │
│ 86 │ │ # fail fast if ffmpeg is not found │
│ 87 │ │ if not ensure_executable(Path(config.ffmpeg_executable)): │
│ ❱ 88 │ │ │ raise RuntimeError( │
│ 89 │ │ │ │ "Manim could not find ffmpeg, which is required for ge │
│ 90 │ │ │ │ "For installing ffmpeg please consult https://docs.man │
│ 91 │ │ │ │ "Make sure to either add ffmpeg to the PATH environmen │
╰──────────────────────────────────────────────────────────────────────────────╯
RuntimeError: Manim could not find ffmpeg, which is required for generating
video output.
For installing ffmpeg please consult
https://docs.manim.community/en/stable/installation.html
Make sure to either add ffmpeg to the PATH environment variable
or set path to the ffmpeg executable under the ffmpeg header in Manim's
configuration.
[34454] Execution returned code=1 in 1.301 seconds returned signal null
(manim-env) /Users/rizkylubis/Documents/Coding_Projects/>
I have to say I am very new to coding, so am not quite sure what to do.
Hey, it might be that your environment differs when running manim via ZSH compared to via the extension (Although I don't know which bash the extension even uses). It might be that the extension tries to run manim via bash, which looks for a ~/.bashrc, which doesn't contain an export PATH="/path/to/ffmpeg/bin:$PATH", while zsh looks for a ~/.zshrc, which contains this line.
To fix this you might wanna try what it suggests:
Make sure to either add ffmpeg to the PATH environment variable
or set path to the ffmpeg executable under the ffmpeg header in Manim's
configuration.
There should be a way to do the second one, although I am not exactly the most familiar with Manim and its configuration. I don't know whether the first one is possible, depends on the current implementation and how the extension starts Manim.
@Rickaym could you please provide further clarification?
Have you installed FFMPEG correctly?
@Rickaym ffmpeg is installed correctly. Using the VS Code integrated terminal this is what I get:
(manim-env) rizkylubis@Rizkys-Macbook-Air Manim % which manim
/opt/anaconda3/envs/manim-env/bin/manim
(manim-env) rizkylubis@Rizkys-Macbook-Air Manim % which ffmpeg
/opt/anaconda3/envs/manim-env/bin/ffmpeg
(manim-env) rizkylubis@Rizkys-Macbook-Air Manim % echo $PATH | tr ':' '\n'
/opt/anaconda3/envs/manim-env/bin
/Users/rizkylubis/Documents/Coding_Projects/anki_to_obsidian/dist/anki_CLI
/opt/anaconda3/envs/manim-env/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Library/TeX/texbin
/opt/anaconda3/envs/manim-env/bin
/Users/rizkylubis/Documents/Coding_Projects/anki_to_obsidian/dist/anki_CLI
/opt/anaconda3/condabin
/Library/Frameworks/Python.framework/Versions/3.11/bin
However Manim Sideview appears to detect the conda environment but not inherit the path environment variables set by the environment. While I could manually add ffmpeg from the conda environment to the path, I really don't want to do this, the extension should inherit any path environment variables set by the environment I am in.
Manim Extension XTerm
Serves as a terminal for logging purpose.
Extension Version 0.2.15
MSV /Users/rizkylubis/Documents/Coding_Projects/Manim>"/opt/anaconda3/envs/manim-env/bin/manim" "/Users/rizkylubis/Documents/Coding_Projects/Manim/manim_test.py" SquareToCircle
/opt/anaconda3/envs/manim-env/lib/python3.10/site-packages/pydub/utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
Manim Community v0.18.1
╭───────────────────── Traceback (most recent call last) ──────────────────────╮
│ /opt/anaconda3/envs/manim-env/lib/python3.10/site-packages/manim/cli/render/ │
│ commands.py:119 in render │
│ │
│ 116 │ │ for SceneClass in scene_classes_from_file(file): │
│ 117 │ │ │ try: │
│ 118 │ │ │ │ with tempconfig({}): │
│ ❱ 119 │ │ │ │ │ scene = SceneClass() │
│ 120 │ │ │ │ │ scene.render() │
│ 121 │ │ │ except Exception: │
│ 122 │ │ │ │ error_console.print_exception() │
│ │
│ /opt/anaconda3/envs/manim-env/lib/python3.10/site-packages/manim/scene/scene │
│ .py:147 in __init__ │
│ │
│ 144 │ │ │ ) │
│ 145 │ │ else: │
│ 146 │ │ │ self.renderer = renderer │
│ ❱ 147 │ │ self.renderer.init_scene(self) │
│ 148 │ │ │
│ 149 │ │ self.mobjects = [] │
│ 150 │ │ # TODO, remove need for foreground mobjects │
│ │
│ /opt/anaconda3/envs/manim-env/lib/python3.10/site-packages/manim/renderer/ca │
│ iro_renderer.py:54 in init_scene │
│ │
│ 51 │ │ self.static_image = None │
│ 52 │ │
│ 53 │ def init_scene(self, scene): │
│ ❱ 54 │ │ self.file_writer: Any = self._file_writer_class( │
│ 55 │ │ │ self, │
│ 56 │ │ │ scene.__class__.__name__, │
│ 57 │ │ ) │
│ │
│ /opt/anaconda3/envs/manim-env/lib/python3.10/site-packages/manim/scene/scene │
│ _file_writer.py:88 in __init__ │
│ │
│ 85 │ │ ) │
│ 86 │ │ # fail fast if ffmpeg is not found │
│ 87 │ │ if not ensure_executable(Path(config.ffmpeg_executable)): │
│ ❱ 88 │ │ │ raise RuntimeError( │
│ 89 │ │ │ │ "Manim could not find ffmpeg, which is required for ge │
│ 90 │ │ │ │ "For installing ffmpeg please consult https://docs.man │
│ 91 │ │ │ │ "Make sure to either add ffmpeg to the PATH environmen │
╰──────────────────────────────────────────────────────────────────────────────╯
RuntimeError: Manim could not find ffmpeg, which is required for generating
video output.
For installing ffmpeg please consult
https://docs.manim.community/en/stable/installation.html
Make sure to either add ffmpeg to the PATH environment variable
or set path to the ffmpeg executable under the ffmpeg header in Manim's
configuration.
[20859] Execution returned code=1 in 0.485 seconds returned signal null
(manim-env) /Users/rizkylubis/Documents/Coding_Projects/Manim/>echo $PATH | tr ':' '\n'
/Users/rizkylubis/Documents/Coding_Projects/anki_to_obsidian/dist/anki_CLI
/opt/anaconda3/condabin
/Library/Frameworks/Python.framework/Versions/3.11/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Library/TeX/texbin
Interesting. So it looks like the venv is being set properly, just that it's not picking up FFMPEG. I'll try on my side.
comment ref: https://www.youtube.com/watch?v=sFpFlMEu7OY&lc=UgwAf8EysGh04b5OTZl4AaABAg
It might be that the environment variables are shell specific. You seem to be using zsh. Could you paste your ~/.zshrc?
While it looks like I am using zsh in the beginning I am actually using bash, in both the terminal app and the VS Code Integrated terminal:
Terminal app:
Last login: Tue Oct 29 20:15:48 on ttys000
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
Rizkys-Macbook-Air:~ rizkylubis$ echo $SHELL
/bin/bash
Rizkys-Macbook-Air:~ rizkylubis$
VS Code integrated terminal:
(manim-env) rizkylubis@Rizkys-Macbook-Air Manim % echo $SHELL
/bin/bash
(manim-env) rizkylubis@Rizkys-Macbook-Air Manim %
I will include both the ~/.zshrc and ~/.bash_profile below:
~/.zshrc
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/opt/anaconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/opt/anaconda3/etc/profile.d/conda.sh" ]; then
. "/opt/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/opt/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
export PATH="/Users/rizkylubis/Documents/Coding_Projects/anki_to_obsidian/dist/anki_CLI:$PATH"
~/.bash_profile
# Setting PATH for Python 3.11
# The original version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.11/bin:${PATH}"
export PATH
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/opt/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/opt/anaconda3/etc/profile.d/conda.sh" ]; then
. "/opt/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/opt/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
#Path for anki_CLI
export PATH="/Users/rizkylubis/Documents/Coding_Projects/anki_to_obsidian/dist/anki_CLI:$PATH"
Same problem using Pixi instead of Conda, although I believe the mechanism is the same.
Is there any update on this issue or any workaround @Rickaym @rrizkylubis
I am having the same problem in Windows, using a conda environment. Would love to see this fixed so I can use this extension, which seems pretty cool.
`Manim Extension XTerm Serves as a terminal for logging purpose.
Extension Version 0.2.16
MSV c:\Users\Jason.conda\envs\manim-env\Lib\site-packages\manim\scene>"C:\Users\Jason.conda\envs\manim-env\Scripts\manim.exe" "d:\python\manim\test.py" ThreeDMobjectTest C:\Users\Jason.conda\envs\manim-env\Lib\site-packages\pydub\utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning) Manim Community v0.18.1
+--------------------- Traceback (most recent call last) ---------------------+ | C:\Users\Jason.conda\envs\manim-env\Lib\site-packages\manim\cli\render\com | | mands.py:119 in render | | | | 116 for SceneClass in scene_classes_from_file(file): | | 117 try: | | 118 with tempconfig({}): | | > 119 scene = SceneClass() | | 120 scene.render() | | 121 except Exception: | | 122 error_console.print_exception() | | | | C:\Users\Jason.conda\envs\manim-env\Lib\site-packages\manim\scene\scene.py | | :147 in init | | | | 144 ) | | 145 else: | | 146 self.renderer = renderer | | > 147 self.renderer.init_scene(self) | | 148 | | 149 self.mobjects = [] | | 150 # TODO, remove need for foreground mobjects | | | | C:\Users\Jason.conda\envs\manim-env\Lib\site-packages\manim\renderer\cairo | | _renderer.py:54 in init_scene | | | | 51 self.static_image = None | | 52 | | 53 def init_scene(self, scene): | | > 54 self.file_writer: Any = self._file_writer_class( | | 55 self, | | 56 scene.class.name, | | 57 ) | | | | C:\Users\Jason.conda\envs\manim-env\Lib\site-packages\manim\scene\scene_fi | | le_writer.py:88 in init | | | | 85 ) | | 86 # fail fast if ffmpeg is not found | | 87 if not ensure_executable(Path(config.ffmpeg_executable)): | | > 88 raise RuntimeError( | | 89 "Manim could not find ffmpeg, which is required for g | | 90 "For installing ffmpeg please consult https://docs.ma | | 91 "Make sure to either add ffmpeg to the PATH environme | +-----------------------------------------------------------------------------+ RuntimeError: Manim could not find ffmpeg, which is required for generating video output. For installing ffmpeg please consult https://docs.manim.community/en/stable/installation.html Make sure to either add ffmpeg to the PATH environment variable or set path to the ffmpeg executable under the ffmpeg header in Manim's configuration. [17388] Execution returned code=1 in 4.082 seconds returned signal null `
I am having the same problem in Windows, using a conda environment. Would love to see this fixed so I can use this extension, which seems pretty cool.
`Manim Extension XTerm Serves as a terminal for logging purpose.
Extension Version 0.2.16
MSV c:\Users\Jason.conda\envs\manim-env\Lib\site-packages\manim\scene>"C:\Users\Jason.conda\envs\manim-env\Scripts\manim.exe" "d:\python\manim\test.py" ThreeDMobjectTest C:\Users\Jason.conda\envs\manim-env\Lib\site-packages\pydub\utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning) Manim Community v0.18.1
+--------------------- Traceback (most recent call last) ---------------------+ | C:\Users\Jason.conda\envs\manim-env\Lib\site-packages\manim\cli\render\com | | mands.py:119 in render | | | | 116 for SceneClass in scene_classes_from_file(file): | | 117 try: | | 118 with tempconfig({}): | | > 119 scene = SceneClass() | | 120 scene.render() | | 121 except Exception: | | 122 error_console.print_exception() | | | | C:\Users\Jason.conda\envs\manim-env\Lib\site-packages\manim\scene\scene.py | | :147 in init | | | | 144 ) | | 145 else: | | 146 self.renderer = renderer | | > 147 self.renderer.init_scene(self) | | 148 | | 149 self.mobjects = [] | | 150 # TODO, remove need for foreground mobjects | | | | C:\Users\Jason.conda\envs\manim-env\Lib\site-packages\manim\renderer\cairo | | _renderer.py:54 in init_scene | | | | 51 self.static_image = None | | 52 | | 53 def init_scene(self, scene): | | > 54 self.file_writer: Any = self._file_writer_class( | | 55 self, | | 56 scene.class.name, | | 57 ) | | | | C:\Users\Jason.conda\envs\manim-env\Lib\site-packages\manim\scene\scene_fi | | le_writer.py:88 in init | | | | 85 ) | | 86 # fail fast if ffmpeg is not found | | 87 if not ensure_executable(Path(config.ffmpeg_executable)): | | > 88 raise RuntimeError( | | 89 "Manim could not find ffmpeg, which is required for g | | 90 "For installing ffmpeg please consult https://docs.ma | | 91 "Make sure to either add ffmpeg to the PATH environme | +-----------------------------------------------------------------------------+ RuntimeError: Manim could not find ffmpeg, which is required for generating video output. For installing ffmpeg please consult https://docs.manim.community/en/stable/installation.html Make sure to either add ffmpeg to the PATH environment variable or set path to the ffmpeg executable under the ffmpeg header in Manim's configuration. [17388] Execution returned code=1 in 4.082 seconds returned signal null `
I also encountered the same problem. May I ask if you have resolved it?
@jmottster @SimonFishhh The only solution right now is to install ffmpeg in the global path. I will try to find a fix for this in the meantime.