Moviepy: write_videofile Error

Created on 13 Oct 2016  ยท  8Comments  ยท  Source: Zulko/moviepy

from moviepy.editor import *
clip = VideoFileClip("vid.mov")
clip.write_videofile("movie.mp4")

^ Gives the error "TypeError: Can't convert 'bytes' object to str implicitly."

It prints "Building video movie.mp4" and "Writing audio in movieTEMP_MPY_wvf_snd.mp3" normally.
I am using python 3.2 with Raspian Wheezy.
What is wrong? Surely it should be a simple program...

Most helpful comment

I guess that from this point, the error is pretty straightforward. The error says: Unknown encoder 'libmp3lame'. This means that your system does not have the mp3 LAME codec. You should look up where to download this codec for your system, as it differs greatly from a system to another.

All 8 comments

If I recall correctly, this is an incompatibility with Python 3 when another error happens. From the stacktrace, where is this error triggered? Does this helps?

[MoviePy] >>>> Building video movie.mp4
[MoviePy] Writing audio in movieTEMP_MPY_wvf_snd.mp3

0%| | 0/1047 [00:00 2%|โ– | 17/1047 [00:00<00:06, 164.65it/s]
Traceback (most recent call last):
File "/home/pi/QuickFlicsPics/moviepytest.py", line 6, in
clip1.write_videofile("movie.mp4")
File "", line 2, in write_videofile
File "/usr/local/lib/python3.2/dist-packages/moviepy/decorators.py", line 54, in requires_duration
return f(clip, _a, *_k)
File "", line 2, in write_videofile
File "/usr/local/lib/python3.2/dist-packages/moviepy/decorators.py", line 137, in use_clip_fps_by_default
return f(clip, _new_a, *_new_kw)
File "", line 2, in write_videofile
File "/usr/local/lib/python3.2/dist-packages/moviepy/decorators.py", line 22, in convert_masks_to_RGB
return f(clip, _a, *_k)
File "/usr/local/lib/python3.2/dist-packages/moviepy/video/VideoClip.py", line 331, in write_videofile
verbose=verbose)
File "", line 2, in write_audiofile
File "/usr/local/lib/python3.2/dist-packages/moviepy/decorators.py", line 54, in requires_duration
return f(clip, _a, *_k)
File "/usr/local/lib/python3.2/dist-packages/moviepy/audio/AudioClip.py", line 204, in write_audiofile
verbose=verbose, ffmpeg_params=ffmpeg_params)
File "", line 2, in ffmpeg_audiowrite
File "/usr/local/lib/python3.2/dist-packages/moviepy/decorators.py", line 54, in requires_duration
return f(clip, _a, *_k)
File "/usr/local/lib/python3.2/dist-packages/moviepy/audio/io/ffmpeg_audiowriter.py", line 162, in ffmpeg_audiowrite
writer.write_frames(chunk)
File "/usr/local/lib/python3.2/dist-packages/moviepy/audio/io/ffmpeg_audiowriter.py", line 90, in write_frames
+ "nn"+ffmpeg_error))
TypeError: Can't convert 'bytes' object to str implicitly

Above is the entire output, triggered on line 3

Look at the PR and modify manually /usr/local/lib/python3.2/dist-packages/moviepy/audio/io/ffmpeg_audiowriter.py, in particular:

-            ffmpeg_error = self.proc.stderr.read()
+            ffmpeg_error = str(self.proc.stderr.read())

on line 87.

After doing so, you should get another error, which is this time the real error from ffmpeg.

Right, it worked; error message below

Traceback (most recent call last):
File "/home/pi/QuickFlicsPics/moviepytest.py", line 6, in
clip1.write_videofile("movie.mp4")
File "", line 2, in write_videofile
File "/usr/local/lib/python3.2/dist-packages/moviepy/decorators.py", line 54, in requires_duration
return f(clip, _a, *_k)
File "", line 2, in write_videofile
File "/usr/local/lib/python3.2/dist-packages/moviepy/decorators.py", line 137, in use_clip_fps_by_default
return f(clip, _new_a, *_new_kw)
File "", line 2, in write_videofile
File "/usr/local/lib/python3.2/dist-packages/moviepy/decorators.py", line 22, in convert_masks_to_RGB
return f(clip, _a, *_k)
File "/usr/local/lib/python3.2/dist-packages/moviepy/video/VideoClip.py", line 331, in write_videofile
verbose=verbose)
File "", line 2, in write_audiofile
File "/usr/local/lib/python3.2/dist-packages/moviepy/decorators.py", line 54, in requires_duration
return f(clip, _a, *_k)
File "/usr/local/lib/python3.2/dist-packages/moviepy/audio/AudioClip.py", line 204, in write_audiofile
verbose=verbose, ffmpeg_params=ffmpeg_params)
File "", line 2, in ffmpeg_audiowrite
File "/usr/local/lib/python3.2/dist-packages/moviepy/decorators.py", line 54, in requires_duration
return f(clip, _a, *_k)
File "/usr/local/lib/python3.2/dist-packages/moviepy/audio/io/ffmpeg_audiowriter.py", line 162, in ffmpeg_audiowrite
writer.write_frames(chunk)
File "/usr/local/lib/python3.2/dist-packages/moviepy/audio/io/ffmpeg_audiowriter.py", line 122, in write_frames
raise IOError(error)
IOError: [Errno 32] Broken pipe

MoviePy error: FFMPEG encountered the following error while writing file movieTEMP_MPY_wvf_snd.mp3:

b"Unknown encoder 'libmp3lame'n"

The audio export failed because FFMPEG didn't find the specified codec for audio encoding (libmp3lame). Please install this codec or change the codec when calling to_videofile or to_audiofile. For instance for mp3:

to_videofile('myvid.mp4', audio_codec='libmp3lame')

Looks like I don't have libmp3lame installed...

I guess that from this point, the error is pretty straightforward. The error says: Unknown encoder 'libmp3lame'. This means that your system does not have the mp3 LAME codec. You should look up where to download this codec for your system, as it differs greatly from a system to another.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

bilel picture bilel  ยท  4Comments

djevo1 picture djevo1  ยท  3Comments

tburrows13 picture tburrows13  ยท  3Comments

Netherdrake picture Netherdrake  ยท  4Comments

RahulPrasad picture RahulPrasad  ยท  4Comments