When i run
python3 -m manim example_scenes.py SquareToCircle -pl
this is what i get
Animation 0: ShowCreationSquare: 0%| | 0/15 [00:00, ?it/s]/home/pacchu/_temp.local/share/Trash/files/manim/media/videos/example_scenes/480p15/partial_movie_files/SquareToCircle/00000_temp.mp4: No such file or directory
Traceback (most recent call last):
File "/home/pacchu/.local/share/Trash/files/manim/manimlib/extract_scene.py", line 153, in main
scene = SceneClass(*scene_kwargs)
File "/home/pacchu/.local/share/Trash/files/manim/manimlib/scene/scene.py", line 54, in __init__
self.construct()
File "example_scenes.py", line 81, in construct
self.play(ShowCreation(square))
File "/home/pacchu/.local/share/Trash/files/manim/manimlib/scene/scene.py", line 449, in wrapper
func(self, *args, *kwargs)
File "/home/pacchu/.local/share/Trash/files/manim/manimlib/scene/scene.py", line 484, in play
self.add_frames(self.get_frame())
File "/home/pacchu/.local/share/Trash/files/manim/manimlib/scene/scene.py", line 570, in add_frames
self.file_writer.write_frame(frame)
File "/home/pacchu/.local/share/Trash/files/manim/manimlib/scene/scene_file_writer.py", line 171, in write_frame
self.writing_process.stdin.write(frame.tostring())
BrokenPipeError: [Errno 32] Broken pipe
same
Above that, does it say Unknown encoder 'libx264'?
Above that, does it say
Unknown encoder 'libx264'?
My guess is that when you run ffmpeg -codecs 2> /dev/null | grep -e 264 that none of the lines contain 'libx264', but that there is still output.
Basically, I got this problem because ffmpeg (used by manim) would fail to generate the video as requested and close, causing your broken pipe.
I see two possible solutions -
'-vcodec', 'libx264' to '-vcodec', 'the_codec_name_you_found'. This solved the problem for me (I used 'h264')Changing '-vcodec', 'libx264' to '-vcodec', 'h264' worked for me.
I am currently running Catalina 10.15.1 on 2017 13-Inch Macbook Pro.
Same problem here.
running python3 -m manim example_scenes.py SquareToCircle -pl
outputs
Media will be written to ./media/. You can change this behavior with the --media_dir flag.
Animation 0: ShowCreationSquare: 0%| | 0/15 [00:00, ?it/s]Unknown encoder 'h264'Traceback (most recent call last):
File "/home/tom/manim/manimlib/extract_scene.py", line 155, in main
scene = SceneClass(*scene_kwargs)
File "/home/tom/manim/manimlib/scene/scene.py", line 53, in __init__
self.construct()
File "example_scenes.py", line 83, in construct
self.play(ShowCreation(square))
File "/home/tom/manim/manimlib/scene/scene.py", line 406, in wrapper
func(self, *args, *kwargs)
File "/home/tom/manim/manimlib/scene/scene.py", line 463, in play
self.progress_through_animations(animations)
File "/home/tom/manim/manimlib/scene/scene.py", line 439, in progress_through_animations
self.add_frames(self.get_frame())
File "/home/tom/manim/manimlib/scene/scene.py", line 543, in add_frames
self.file_writer.write_frame(frame)
File "/home/tom/manim/manimlib/scene/scene_file_writer.py", line 185, in write_frame
self.writing_process.stdin.write(frame.tostring())
BrokenPipeError: [Errno 32] Broken pipe
while ffmpeg -codecs 2> /dev/null | grep -e 264
outputs
D.V.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
Changing line 246 to either h264 or H.264 did not solve the issue. This is running on Ubuntu 18.04
In case this is useful for anyone /also developers might wanna consider adding this feature/. I hacked around a little bit and added a flag argument to specify the codec used. First add inline argument parser in the manimlib/config.py.
# ... in `parse_cli()`
parser.add_argument(
"--vcodec",
help="Specify the codec used to render video"
)
# ... in `get_configuration(args)`
file_writer_config = {
# ...
"vcodec": args.vcodec
}
# ...
Now in manimlib/scene/scene_file_writer.py
if self.movie_file_extension == ".mov":
# ...
else:
command += [
'-vcodec', self.vcodec, # <- change to this line
'-pix_fmt', 'yuv420p',
]
Now you can specify --vcodec h264 or whatever you wish when rendering. This also works when using manim in jupyter with this neat library.
PS. You could probably even add a default vcodec, so that you don't have to specify it every time, but I was a bit lazy to do that.
PPS. As was pointed out above, you can view all the available codecs (not only video enconding) by doing this: ffmpeg -codecs 2> /dev/null.
PPPS. On MacOS I actually had the best quality when rendering with the --vcodec prores. It adds up a lot in file weight, but the quality is superb.
PPPPS. If you're using conda version (hopefully in a separate environment), you'll find the library here: ~/anaconda3/envs/<ENVNAME>/lib/python3.7/site-packages/manimlib.
Same problem here.
running
python3 -m manim example_scenes.py SquareToCircle -ploutputs
Media will be written to ./media/. You can change this behavior with the --media_dir flag.
Animation 0: ShowCreationSquare: 0%| | 0/15 [00:00, ?it/s]Unknown encoder 'h264'
Traceback (most recent call last):
File "/home/tom/manim/manimlib/extract_scene.py", line 155, in main
scene = SceneClass(scene_kwargs)
File "/home/tom/manim/manimlib/scene/scene.py", line 53, in *init
self.construct()
File "example_scenes.py", line 83, in construct
self.play(ShowCreation(square))
File "/home/tom/manim/manimlib/scene/scene.py", line 406, in wrapper
func(self, *args, *kwargs)
File "/home/tom/manim/manimlib/scene/scene.py", line 463, in play
self.progress_through_animations(animations)
File "/home/tom/manim/manimlib/scene/scene.py", line 439, in progress_through_animations
self.add_frames(self.get_frame())
File "/home/tom/manim/manimlib/scene/scene.py", line 543, in add_frames
self.file_writer.write_frame(frame)
File "/home/tom/manim/manimlib/scene/scene_file_writer.py", line 185, in write_frame
self.writing_process.stdin.write(frame.tostring())
BrokenPipeError: [Errno 32] Broken pipewhile
ffmpeg -codecs 2> /dev/null | grep -e 264outputs
D.V.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
Changing line 246 to either h264 or H.264 did not solve the issue. This is running on Ubuntu 18.04
On my Ubuntu 18.04, using h264 failed, but using prores worked!
https://stackoverflow.com/a/58421346/4146678
For conda peple
https://stackoverflow.com/a/58421346/4146678
For conda peple
conda install x264=='1!152.20180717' ffmpeg=4.0.2 -c conda-forge
work for me
I had the same problem when installing manim through pip3 on Ubuntu 18.04. It solved itself by simply uninstalling manimlib then ffmpeg :
pip3 uninstall manimlib
sudo apt --purge remove ffmpeg
sudo apt autoremove
then check if you can start ffmpeg from your terminal. if so you need to delete it manually :
wheresis ffmpeg should print : /usr/bin/ffmpeg
sudo rm /usr/bin/ffmpeg or whatever got printed
you can now optionally reboot now.
sudo apt install ffmpeg
pip3 install manimlib
try the example scene now.
I was having this problem whenever trying to render 4K with the manim Docker image. I managed to fix it by using the libx265 codec, although it still seems to give the "broken pipe" error sometimes. I thought I'd leave this comment here in case others run into the same issue.
Most helpful comment
My guess is that when you run
ffmpeg -codecs 2> /dev/null | grep -e 264that none of the lines contain 'libx264', but that there is still output.Basically, I got this problem because ffmpeg (used by manim) would fail to generate the video as requested and close, causing your broken pipe.
I see two possible solutions -
'-vcodec', 'libx264'to'-vcodec', 'the_codec_name_you_found'. This solved the problem for me (I used 'h264')