gpt4 book ai didi

python - 如何使用python连接一堆视频?

转载 作者:行者123 更新时间:2023-12-04 23:10:23 26 4
gpt4 key购买 nike

所以,我有超过 5000 个需要组合的小片段。要对其名称应用各种自定义过滤器,我想用 python 来做。我有以下代码:

import os
from moviepy.editor import *
os.chdir('D:/videos')
list1, list2 = os.listdir(), []

for i in list1: #filtering
if i[-6:] != '-l.mp4' and i[-7:] != 'ALT.mp4':
list2.append(i)
print('Getting Video Info:')

final = VideoFileClip(list2[0])


for i in range(1,len(list2)):
final = concatenate_videoclips([final, VideoFileClip(list2[i])])
print('\r' + str(i+1) + '/' + str(len(list2)), end='')


os.chdir('D:')
final.write_videofile('Merged.mp4')
但是该程序正在创建大量进程,并且在读取 150 个剪辑后就崩溃了。
enter image description here
它一直在增加!
有没有更简单的方法/替代方法来做到这一点?谢谢!
编辑:
我也试过用ffmpeg,但是 concatenation removes the audio因为 concat 协议(protocol)不支持 .mp4 扩展名。在这种情况下。就算我 convert all the files to .ts extension and try to concatenate them , WindowsError: [Error 206] The filename or extension is too long由于 | 分隔的文件太多而弹出。将所有文件转换为 .ts 格式后,我做了以下更改:
import os
import ffmpeg
os.chdir('D:/videos')
list1 = os.listdir()
list2 = [i for i in list1 if i[-3:] == '.ts']
list2[0] = ffmpeg.input(list2[0])
for i in range(1, len(list2)):
list2[i] = ffmpeg.concat(list2[i-1], ffmpeg.input(list2[i]))
print('\r' + str(i) + '/' + str(len(list2)), end='')
ffmpeg.output(list2[-1], 'D:\Merged.mp4')
ffmpeg.run(list2[-1])
但现在我得到 RecursionError: maximum recursion depth exceeded while calling a Python object .

最佳答案

您可以尝试像这样显式删除并在两者之间进行垃圾收集。

import os
import gc
from moviepy.editor import *
os.chdir('D:/videos')
list1, list2 = os.listdir(), []

for i in list1: #filtering
if i[-6:] != '-l.mp4' and i[-7:] != 'ALT.mp4':
list2.append(i)
print('Getting Video Info:')

final = VideoFileClip(list2[0])


for i in range(1,len(list2)):
curclip = VideoFileClip(list2[i])
final = concatenate_videoclips([final, curclip])
print('\r' + str(i+1) + '/' + str(len(list2)), end='')
curclip.close()
del curclip
gc.collect()

os.chdir('D:')
final.write_videofile('Merged.mp4')
如果上述方法不起作用,请尝试以特定频率保存最终视频,例如 8。保存和读取为原始文件将释放最终对象内累积的额外内存
for i in range(1,len(list2)):
if (i % 8) == 7:
final.write_videofile('D:/Merged.mp4')
final = VideoFileClip('D:/Merged.mp4')
curclip = VideoFileClip(list2[i])
final = concatenate_videoclips([final, curclip])
print('\r' + str(i+1) + '/' + str(len(list2)), end='')
curclip.close()
del curclip
gc.collect()

os.chdir('D:')
final.write_videofile('Merged.mp4')

关于python - 如何使用python连接一堆视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70737229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com