python - 使用 MoviePy 或 FFmpeg 连接 Python 列表中的电影

标签 python ffmpeg concatenation trim moviepy

我有大约 10,000 个短视频,我正试图从中制作几个更长的视频。

我使用 MoviePy 创建了这些视频,但在尝试将它们连接在一起时不断出现内存错误。

在我的代码中,我有一个外部循环遍历字母表的每个字母并获取以该字母开头的文件。

从返回的视频剪辑中,我得到了视频的长度,并剥离了视频的最后 3.5 秒 (outro_clip_duration),然后将其添加到 Python 列表 clips .

我被卡住的地方是我想获取这个修剪视频的列表并从中制作一个长长的视频。

我有所有文件,我只需要修剪它们,连接它们,然后将它们作为一个导出。

我已经尝试过多次不同的 MoviePy 尝试并不断收到 MemoryErrors,所以我放弃并尝试了看到的 ffmpeg 解决方案 here但它也没有成功。

我的代码主要部分的最新版本在这里:

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。

最佳答案

使用完剪辑后,您应该尝试通过添加 close_clip(video_item) 来关闭它们。在你的 for 循环结束时,比如

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_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)

关于python - 使用 MoviePy 或 FFmpeg 连接 Python 列表中的电影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54526470/

相关文章:

python - 从命令提示符解码时出现问题 [python]

python - 运行matplotlib绘图标签,然后显示错误框

c++ - ffmpeg 创建 RTP 流

ubuntu - 在 ubuntu 上使用 ffmeg 将 amr 转换为 mp3 - 输入/输出错误

python - 将 Pandas 中的数据帧与相同的行和列但不同的单元格值组合

C连接字符串变量字符串

python - 将序列转换为数组元素

python - 设置 psycopg2 时出现问题(PostGreSQL/python 数据库)

ios - 如何将 FFMpeg 构建为 iOS 框架

R cSplit 仅使用字符串中的第一个分隔符