在尝试学习一些关于MoviePy的内容时,我复制了一些示例代码(我稍微修改了一下),它从电影文件中剪切出10秒的部分,在其上叠加文本,并将其写为不同的文件。代码完美运行...仅适用于某些文件。我有两个视频文件,我想使用代码(仅用于练习)。两者都是.mov文件,两者都在同一个驱动器上,两条路径都是正确的(我已多次验证它们)。问题是我在其中一个文件上获得了一个TypeError,而另一个文件则完美地运行了。这是代码:
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 Stack Overflow但是没有任何可靠的答案(至少没有适用于我的特定情况)。
任何帮助都会很棒。谢谢!
答案 0 :(得分:1)
在搜索了一下之后,我找到了一个解决方案here。 Readers.py中的第122行代码返回一个浮点而不是一个整数,因为它使用的是单个“/”而不是double“//”。我改变了那条线,似乎解决了这个问题。详情见链接。
为了记录,我仍然不明白为什么它发生在某些文件而不是其他文件上。然而,修复很简单。