diff --git a/moviepy/audio/io/ffmpeg_audiowriter.py b/moviepy/audio/io/ffmpeg_audiowriter.py index e895f5d80..81bc88848 100644 --- a/moviepy/audio/io/ffmpeg_audiowriter.py +++ b/moviepy/audio/io/ffmpeg_audiowriter.py @@ -2,6 +2,9 @@ import numpy as np import subprocess as sp +import sys +PY3=sys.version_info.major >= 3 + import os try: from subprocess import DEVNULL # py3k @@ -82,14 +85,17 @@ def __init__(self, filename, fps_input, nbytes=2, def write_frames(self,frames_array): try: - self.proc.stdin.write(frames_array.tostring()) + if PY3: + self.proc.stdin.write(frames_array.tobytes()) + else: + self.proc.stdin.write(frames_array.tostring()) except IOError as err: ffmpeg_error = self.proc.stderr.read() error = (str(err)+ ("\n\nMoviePy error: FFMPEG encountered " "the following error while writing file %s:"%self.filename + "\n\n"+ffmpeg_error)) - if "Unknown encoder" in ffmpeg_error: + if b"Unknown encoder" in ffmpeg_error: error = (error+("\n\nThe audio export failed because " "FFMPEG didn't find the specified codec for audio " @@ -99,7 +105,7 @@ def write_frames(self,frames_array): " >>> to_videofile('myvid.mp4', audio_codec='libmp3lame')" )%(self.codec)) - elif "incorrect codec parameters ?" in ffmpeg_error: + elif b"incorrect codec parameters ?" in ffmpeg_error: error = error+("\n\nThe audio export " "failed, possibly because the codec specified for " @@ -108,7 +114,7 @@ def write_frames(self,frames_array): "argument in to_videofile. This would be 'libmp3lame' " "for mp3, 'libvorbis' for ogg...")%(self.codec, self.ext) - elif "encoder setup failed": + elif b"encoder setup failed" in ffmpeg_error: error = error+("\n\nThe audio export " "failed, possily because the bitrate you specified " diff --git a/moviepy/video/io/ffmpeg_writer.py b/moviepy/video/io/ffmpeg_writer.py index 605015206..edf1b9fd9 100644 --- a/moviepy/video/io/ffmpeg_writer.py +++ b/moviepy/video/io/ffmpeg_writer.py @@ -7,6 +7,10 @@ import os import numpy as np +import sys + +PY3 = sys.version_info.major >=3 + try: from subprocess import DEVNULL # py3k except ImportError: @@ -134,14 +138,17 @@ def __init__(self, filename, size, fps, codec="libx264", audiofile=None, def write_frame(self, img_array): """ Writes one frame in the file.""" try: - self.proc.stdin.write(img_array.tostring()) + if PY3: + self.proc.stdin.write(img_array.tobytes()) + else: + self.proc.stdin.write(img_array.tostring()) except IOError as err: ffmpeg_error = self.proc.stderr.read() error = (str(err) + ("\n\nMoviePy error: FFMPEG encountered " "the following error while writing file %s:" "\n\n %s" % (self.filename, ffmpeg_error))) - if "Unknown encoder" in ffmpeg_error: + if b"Unknown encoder" in ffmpeg_error: error = error+("\n\nThe video export " "failed because FFMPEG didn't find the specified " @@ -150,7 +157,7 @@ def write_frame(self, img_array): "write_videofile. For instance:\n" " >>> clip.write_videofile('myvid.webm', codec='libvpx')")%(self.codec) - elif "incorrect codec parameters ?" in ffmpeg_error: + elif b"incorrect codec parameters ?" in ffmpeg_error: error = error+("\n\nThe video export " "failed, possibly because the codec specified for " @@ -164,13 +171,13 @@ def write_frame(self, img_array): "video codec." )%(self.codec, self.ext) - elif "encoder setup failed" in ffmpeg_error: + elif b"encoder setup failed" in ffmpeg_error: error = error+("\n\nThe video export " "failed, possibly because the bitrate you specified " "was too high or too low for the video codec.") - elif "Invalid encoder type" in ffmpeg_error: + elif b"Invalid encoder type" in ffmpeg_error: error = error + ("\n\nThe video export failed because the codec " "or file extension you provided is not a video")