0

在尝试学习一点有关 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

我没有更改任何代码,我只是指向一个不同的文件。我对不同的文件进行了相同的尝试,并得到了相同的错误。为什么它适用于一个而不适用于另一个?有什么想法吗?

Stack Overflow 之前也有人问过类似的问题,但没有任何可靠的答案(至少没有一个适用于我的特定情况)。

任何帮助都会很棒。谢谢!

4

1 回答 1

1

在搜索了更多之后,我在这里找到了解决方案。Readers.py 中的第 122 行代码返回了一个浮点数而不是一个整数,因为它使用了单个“/”而不是双“//”。我改变了那条线,它似乎已经解决了这个问题。详细信息在链接中。

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

于 2017-01-30T18:37:58.533 回答