Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python多次重复片段的部分_Python_Opencv_Video_Moviepy - Fatal编程技术网

如何使用python多次重复片段的部分

如何使用python多次重复片段的部分,python,opencv,video,moviepy,Python,Opencv,Video,Moviepy,比如说,我有一个视频,我把它分为7个部分,分别保存每个部分,长度是20秒 clip1= VideoFileClip("first.mp4") clip2= VideoFileClip("second.mp4") clip3= VideoFileClip("third.mp4") clip5= VideoFileClip("Fourth.mp4") clip4= VideoFileClip("Fifth.mp

比如说,我有一个视频,我把它分为7个部分,分别保存每个部分,长度是20秒

clip1= VideoFileClip("first.mp4")
clip2= VideoFileClip("second.mp4")
clip3= VideoFileClip("third.mp4")
clip5= VideoFileClip("Fourth.mp4")
clip4= VideoFileClip("Fifth.mp4")
clip7= VideoFileClip("sixth.mp4")
clip6= VideoFileClip("seventh.mp4")

final_clip=concatenate_videoclips([clip1,clip2,clip3,clip4,clip5,clip6,clip7])

final_clip.write_videofile("new1.mp4")
现在我想做的是,我想创建一个程序,通过随机重复这些剪辑,将此视频扩展到指定的时间

例如,假设我想通过在python中随机重复这7个片段,将这个20秒长的片段变成1小时长的片段。因此,生成的视频将长达1小时,但将包含这7个剪辑的随机安排和重复


有人能告诉我怎么做吗?

如果你给每个剪辑分配了一个id,为了简单起见,可以说是0-6,为什么不随机生成一个列表,其中包含你需要达到1小时的剪辑:

import random

# 1 hour is 3600 seconds
total_duration = 3600
clip_duration = 20

# 180 clips are needed to get an hour-long video
num_clips_required = int(total_duration / clip_duration)

# perform random sampling with replacement
list_of_clips = random.choices(range(7), k=num_clips_required)
您可以使用
moviepy
构建最终剪辑:

from moviepy.editor import VideoFileClip, concatenate_videoclips

# construct some dictionary containing ids as keys, and VideoFileClip objects as values
D = {0:VideoFileClip("path_to_clip_0.mp4"), 
     1:VideoFileClip("path_to_clip_1.mp4"),
     # etc... 
}
然后,通过执行以下操作编写最后一个剪辑:

combined = concatenate_videoclips([D[id] for id in list_of_clips])
combined.write_videofile("combined.mp4")

我建议您提供迭代代码。非常感谢您的回答。就像你生成了这些数字的列表,那么我应该如何使用该列表生成视频?你能告诉我吗?我尝试过随机排列它们,并使用Movie制作视频。这些剪辑的fps和大小都相同吗?@Ann不,它们都不同
import numpy as np
import random
import cv2
import os

videolist = os.listdir("path to video dir")

while True:
    cap = cv2.VideoCapture("path to video dir/{}.webm".format(random.choice(videolist)))
    while cap.isOpened():

        ret, frame = cap.read()
        cv2.namedWindow("window", cv2.WND_PROP_FULLSCREEN)
        cv2.setWindowProperty("window",cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)

        if ret:
            cv2.imshow("Image", frame)
        else:
            print("no video")
            cap.set(cv2.CAP_PROP_POS_FRAMES, 0)

        if cv2.waitKey(1) & 0xFF == ord("q"):
            break

    cap.release()
    cv2.destroyAllWindows()