2017-01-30 59 views
0

当在试图了解一点MoviePy,我复制,削减10第二部分出电影文件的一些示例代码(我略作修改),覆盖其上的文字,并将其写入为不同文件。该代码完美...只适用于某些文件。我有,我想用的(只是为了练习)的代码的两个视频文件。两者都.mov格式的文件,两者是相同的驱动器上,这两个路径是正确的(我多次验证了它们)。问题是我收到的文件中的一个类型错误,而它完美另一方。代码如下:类型错误使用MoviePy

from moviepy.editor import * 

x = int(input("When do you want the cut to start? ")) 
y = int(input("When do you want the cut to end? ")) 


video = VideoFileClip("D:\Videos\Gatlinburgh Drone River 2.MOV").subclip(x,y) 

##video = VideoFileClip("D:\SF_ep\T_R_D.mov").subclip(x,y) #Path is correct 


txt_clip = (TextClip("The Red Dot episode",fontsize=70,color='white') 
      .set_position('center') 
      .set_duration(10)) 

result = CompositeVideoClip([video, txt_clip]) 

result.write_videofile("Text on Screen.webm",fps=25) 

上面的例子完美地工作。然而,当我把它注释掉,并取消右侧下方的视频,我得到以下错误:

Traceback (most recent call last): 
    File "C:\Users\Sam\Python Projects\MoviePy\Example3c.py", line 15, in <module> 
    video = VideoFileClip("D:\\Seinfeld_All_Episodes\\The_Red_Dot.mov").subclip(x,y) 
    File "C:\Python34\lib\site-packages\moviepy\video\io\VideoFileClip.py", line 82, in __init__ 
    nbytes = audio_nbytes) 
    File "C:\Python34\lib\site-packages\moviepy\audio\io\AudioFileClip.py", line 63, in __init__ 
    buffersize=buffersize) 
    File "C:\Python34\lib\site-packages\moviepy\audio\io\readers.py", line 70, in __init__ 
    self.buffer_around(1) 
    File "C:\Python34\lib\site-packages\moviepy\audio\io\readers.py", line 234, in buffer_around 
    self.buffer = self.read_chunk(self.buffersize) 
    File "C:\Python34\lib\site-packages\moviepy\audio\io\readers.py", line 123, in read_chunk 
    self.nchannels)) 
TypeError: 'float' object cannot be interpreted as an integer 

我不会改变任何代码,我只是指向不同的文件。我试过不同的文件,并得到相同的错误。为什么它会在一个而不是另一个上工作?有什么想法吗?

一个similar question已要求堆栈溢出之前,但没有发现任何固体的答案(至少没有应用到我的特殊情况)。

任何帮助将是伟大的。谢谢!

回答

1

在搜索了一下后,我发现了一个解决方案here。因为它是使用“/”的单个代替双“//”的在Readers.py代码122线被返回一个浮动的,而不是一个整数。我改变了这条线,似乎解决了这个问题。详情请见链接。

为了记录,我仍然不明白为什么它发生在某些文件而不是其他人。不过,修复很简单。