我有大约10000个短视频,我正在尝试制作一些更长的视频。
我使用MoviePy创建了这些视频,但在尝试将它们重新连接在一起时,会不断出现内存错误。
在我的代码中,我有一个外部循环遍历字母表的每个字母并获取以该字母开头的文件。
从返回的视频拆条中,我得到视频最后3.5秒(outro_clip_duration
)的长度和拆条,然后将其添加到Python列表剪辑
中。
我陷入困境的地方是,我想把这个剪辑过的视频列表拿出来,然后从中制作一个很长很长的视频。
我有所有的文件,我只需要修剪它们,连接它们,然后将它们导出为一个。
我已经尝试了很多次不同的电影尝试,并不断得到记忆错误,所以我放弃了,并尝试了这里看到的ffmpeg解决方案,但也没有成功。
我的代码主要部分的最新版本如下:
clips = []
outro_clip = mpy.VideoFileClip('Logo_Intro_w_Stinger_Large.mp4')
outro_clip_duration = outro_clip.duration
for def_image in vid_list_long:
video_item = mpy.VideoFileClip('F:/sm_My_Video/sm_%s.mp4' % def_image)
video_item_duration = video_item.duration
clips.append(ffmpeg_extract_subclip(video_item,0,(video_item_duration - outro_clip_duration), targetname = def_image))
# #Append the outro_clip to the end
clips.append(mpy.VideoFileClip('Logo_Intro_w_Stinger_Large.mp4',target_resolution = (h,w),audio=True))
slided_clips = [CompositeVideoClip([clip.fx( transfx.crossfadein, transition_seconds)]) for clip in clips]
#added 'method = compose' NEED TO TEST - supposedly removes the weird glitches.
c = concatenate_videoclips(slided_clips, method = 'compose')
c.write_videofile('F:/Extended_Play/%s_Extended_Play_vid.mp4' % letter,fps=23.98)
我的PC是Windows 10,我有32 GB的RAM运行Anaconda和Python 3。
def concatenate():
stringa = "ffmpeg -i \"concat:"
elenco_video = glob.glob("*.mp4")
elenco_file_temp = []
for f in elenco_video:
file = "temp" + str(elenco_video.index(f) + 1) + ".ts"
os.system("ffmpeg -i " + f + " -c copy -bsf:v h264_mp4toannexb -f mpegts " + file)
elenco_file_temp.append(file)
print(elenco_file_temp)
for f in elenco_file_temp:
stringa += f
if elenco_file_temp.index(f) != len(elenco_file_temp)-1:
stringa += "|"
else:
stringa += "\" -c copy -bsf:a aac_adtstoasc output.mp4"
print(stringa)
os.system(stringa)
# call the method
concatenate()
如果是内存问题,也许您可以尝试为字母表的每个字母制作一个连接视频,然后在单独的脚本中尝试连接这些视频?我知道,许多视频格式的顶部都包含标题,这可能会占用大量空间,因此,如果您将它们分步组合,则可以将较少的标题加载到内存中。也许(纯粹是猜测,因为我真的不知道)您试图制作的视频的文件格式有一个限制,并且您正在超过这个限制,所以您想要的东西在特定的格式中根本无法实现?如果这些建议不起作用,也许你可以尝试一次将视频连接成一个字母(在你已经将它们按字母连接起来之后),然后看看它在哪里中断?作为最后的手段,你可以降低分辨率,或者在YouTube上发布2到3个视频,而不是1个。这仍然是超过10000个视频的巨大改进!
您应该尝试在使用完剪辑后关闭它们,方法是在for循环的末尾添加close_clip(video_item)
,类似于
for def_image in vid_list_long:
video_item = mpy.VideoFileClip('F:/sm_My_Video/sm_%s.mp4' % def_image)
video_item_duration = video_item.duration
clips.append(ffmpeg_extract_subclip(video_item,0,(video_item_duration - outro_clip_duration), targetname = def_image))
close_clip(video_item)
其中,close\u clip()看起来像
def close_clip(clip):
try:
clip.reader.close()
if clip.audio != None:
clip.audio.reader.close_proc()
del clip.audio
del clip
except Exception as e:
print("Error in close_clip() ", e)
有两个表格: 授权联系人(): 包含具有属性的联系人数组 : 表至少有100k条记录,使其成为非JSONB类型是不合适的,因为它会使记录量增加一倍或三倍。 : 表有500万奇数记录。 我想参加(关系列),带有contact id,在。 一个非常粗糙的方法是: 这实际上是在运行时创建(内部sql)userid vs contact id table(这是我一直在避免的,因此选择了JSONB数据类型)
我编写了一个小Python程序来获取一堆PNG,并使用FFmpeg命令行将它们呈现成一部电影。PNG被读入[x*y*3]个数组(忽略alpha通道),通过插值添加新帧,数据作为管道被送入FFmpeg并保存为MP4。 这些文件在Windows的VLC中运行良好,但在Mac的iMovie中却不起作用。我想这可能是因为大多数程序都希望H264视频在YUV420P色彩空间,而我的电影不是。我尝试将ffmp
本文向大家介绍Python视频编辑库MoviePy的使用,包括了Python视频编辑库MoviePy的使用的使用技巧和注意事项,需要的朋友参考一下 moviepy官网: https://pypi.org/project/moviepy/ 是一个用于视频编辑的Python库:切割、连接、标题插入、视频合成、非线性编辑,视频处理和定制效果的创建。 Github: https://github.com/
我正在尝试使用连接两个剪辑,但输出视频中没有音频。我可以在视频连接时看到临时音频文件。 终端提供此输出, 我也尝试过这个答案,但它不能解决问题。你知道为什么会这样吗?
我在分析一个删除节点的双链表函数。然而,我有点困惑。 为什么有一个tmp=p.prev和p.prev=tmp。这些额外线路的用途是什么?最后,为什么没有使用“del”删除节点?代码末尾不应该是“delp”吗? 非常感谢。
我一直在尝试构建一个项目,其中Flask应用程序可以自动将选定数量的视频连接到“核心视频”。 用户可以上传视频,并将其发送到amazon s3进行存储。所有视频都由Moviepy预处理为mp4文件,以24 fps无音频运行,分辨率为720p。经过此预处理后,视频上传到amazon s3。 在s3中的所有新上载中,创建了一个队列,管理员可以批准或删除该队列。所有经批准的视频最终都会出现在一个列表中,