我希望这个问题足够清楚。基本上,我有一个数组“输出”,其中包含将要使用的所有文件夹(如下所示):
output = ['folder1', 'folder2', 'folder3', 'folder4']
我想为所有子文件夹创建一个视频。如果我只创建一个包含所有视频的视频,而我却想从每个文件夹的视频创建一个视频,则可以做到。我用来将所有.mp4文件编译成一个视频的以下代码:
from moviepy.editor import *
import os
from natsort import natsorted
L =[]
for root, dirs, files in os.walk("/media/pi/videos"):
#files.sort()
files = natsorted(files)
for file in files:
if os.path.splitext(file)[1] == '.mp4':
filePath = os.path.join(root, file)
video = VideoFileClip(filePath)
L.append(video)
final_clip = concatenate_videoclips(L)
final_clip.to_videofile("output.mp4", fps=24, remove_temp=False)
但是,当我尝试通过for循环执行相同的操作时,会出现错误,并且无法设法解决问题。真诚的感谢您的帮助。这是我一直在尝试的代码:
output.sort()
for i in output:
if not i == 'System Volume Information':
path2 = '/media/pi/videos/%s' % i
L =[]
for root, dirs, files in os.walk(path2):
#files.sort()
files = natsorted(files)
for file in files:
if os.path.splitext(file)[1] == '.mp4':
filePath = os.path.join(root, file)
video = VideoFileClip(filePath)
L.append(video)
final_clip = concatenate_videoclips(L)
final_clip.to_videofile("output.mp4", fps=24, remove_temp=False)
基本上,我想做的是结合一定数量的视频。我已将所有.mp4文件重命名为“ 1.mp4”,“ 2.mp4”,“ 3.mp4”等,并且我正在尝试使代码结合起来,让1个视频说5个.mp4文件,并且循环播放,直到没有更多视频可以合并为止。这是我想到的唯一方法。我制作了包含5个.mp4文件的子文件夹,现在我尝试将这些视频合并到每个文件夹中。我认为这不是很有效,因此,任何更好的建议都会有所帮助
答案 0 :(得分:0)
如果我了解您要实现的目标,也许是这样的事情?
from pathlib import Path
from moviepy.editor import VideoFileClip, concatenate_videoclips
for resource_path in Path("vids").glob("*"):
if not resource_path.is_dir():
continue
directory_path = resource_path
clip = concatenate_videoclips(list(map(VideoFileClip, (str(v) for v in directory_path.glob("*.mp4")))))
clip.to_videofile(str(directory_path.joinpath("output.mp4")), fps=24, remove_temp=False)
基本上,它会遍历“ vids”目录中的所有目录。然后,它将获取当前目录中的所有mp4,并将它们串联在一起,以创建该文件夹的“ output.mp4”。然后将其移至下一个文件夹并重复。
答案 1 :(得分:0)
这样,我设法解决了自己的问题。可能有更好的方法可以做到这一点,但这对我有用。我相信我在那儿发表的一些评论都清楚了。
from moviepy.editor import *
import os
from natsort import natsorted
#directory of videos
source_dir = '/media/video'
for root, dirs, files in os.walk(source_dir):
for i in dirs:
#checks the subdirectories
path2 = "/media/video/" + str(i)
L =[]
#combines all the .mp4 files
for root, dirs, files in os.walk(path22):
files = natsorted(files)
for file in files:
if os.path.splitext(file)[1] == '.mp4':
filePath = os.path.join(root, file)
video = VideoFileClip(filePath)
L.append(video)
#creates the final video
final_clip = concatenate_videoclips(L)
final_clip.to_videofile( "_output.mp4" , fps=24, remove_temp=False)