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...
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, ?it/s]
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 "
File "/usr/local/lib/python3.2/dist-packages/moviepy/decorators.py", line 54, in requires_duration
return f(clip, _a, *_k)
File "
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 "
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 "
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 "
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 "
File "/usr/local/lib/python3.2/dist-packages/moviepy/decorators.py", line 54, in requires_duration
return f(clip, _a, *_k)
File "
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 "
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 "
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 "
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.
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.