Python + ffmpeg 视频剪辑

任务描述

给定有序三元组列表 [{filename, start,duration}, ...],根据它调用 ffmpeg 进行视频剪辑。

思路分析

采用先切出所有片段,再连接的方式。

代码实现

视频操作部分采用 ffmpeg-python 库完成( kkroening/ffmpeg-python: Python bindings for FFmpeg - with complex filtering support (github.com)

这里主要用到了 input,concat,output,run 几个方法。

import ffmpeg
import json


def edit(clip_desc_list, output_filename):
    # clip_desc_list is a list of dict{'filename'=?, 'start'=?, 'duration'=?}
    clip_list = []
    for clip_desc in clip_desc_list:
        clip = ffmpeg.input(
            clip_desc["filename"], ss=clip_desc["start"], t=clip_desc["duration"])
        clip_list += [clip]
    print(clip_list)
    ans = clip_list[0]
    for i in range(1, len(clip_list)):
        ans = ffmpeg.concat(ans, clip_list[i])
    ans.output(output_filename).run(quiet=False, overwrite_output=True)


if __name__ == '__main__':
    bid = "BV16K4y1h7eq"
    media_filename = "output/{bid}.mp4".format(bid=bid)
    edit([{"filename": media_filename, "start": 0, "duration": 1}, {
        "filename": media_filename, "start": 10, "duration": 1}, {"filename": media_filename, "start": 20, "duration": 1}], "output_edit/1.mp4")

References

Python3利用ffmpeg针对视频进行一些操作-刘悦的技术博客 (v3u.cn)

ffmpeg-python: Python bindings for FFmpeg — ffmpeg-python documentation (kkroening.github.io)

原文地址:https://www.cnblogs.com/mollnn/p/14966417.html