是否可以使用 FFmpeg 从视频文件夹中剪切“随机”部分并将它们连接成 1 个视频?

Emm*_*and 3 python linux bash video ffmpeg

我意识到这听起来是一个简单的问题,而且之前已经得到了回答。但是,我似乎找不到一个脚本可以读取不同长度的视频文件夹,从每个视频中复制随机片段,然后将它们连接到单个视频中。

一个例子:

我有一个文件夹,里面有 150 个视频,标签为 Fashion-Setlist-01.mp4、Fashion-Setlist-02.mp4 等。每个视频都超过 1 小时。我想从每个视频中随机提取 10 秒的部分,然后将它们随机添加在一起,形成一个视频。只需几个视频,这似乎很容易,但计划是从可能有 100 个视频中读取。也应该可以从每个视频中提取多个部分。我想如果视频需要更长,我们可以运行脚本两次以获取更多片段。

hb_*_*hb_ 5

moviepy是最合适的工具(它使用 ffmpeg 作为后端)。在 moviepy 中连接视频很简单:

import moviepy.editor
import os
import random
import fnmatch 

directory = '/directory/to/videos/'
xdim = 854
ydim = 480
ext = "*mp4"
length = 10

outputs=[]

# compile list of videos
inputs = [os.path.join(directory,f) for f in os.listdir(directory) if os.path.isfile(os.path.join(directory, f)) and fnmatch.fnmatch(f, ext)]

for i in inputs:

    # import to moviepy
    clip = moviepy.editor.VideoFileClip(i).resize( (xdim, ydim) ) 

    # select a random time point
    start = round(random.uniform(0,clip.duration-length), 2) 

    # cut a subclip
    out_clip = clip.subclip(start,start+length)

    outputs.append(out_clip)

# combine clips from different videos
collage = moviepy.editor.concatenate_videoclips(outputs) 

collage.write_videofile('out.mp4')
Run Code Online (Sandbox Code Playgroud)