当前位置: 首页 > article >正文

视频拼接,拼接时长版本

目录

视频较长,分辨率较大,这个效果很好,不耗用内存 ffmpeg

imageio,适合视频较短


视频较长,分辨率较大,这个效果很好,不耗用内存 ffmpeg


import subprocess
import glob
import os
from natsort import natsorted
base_dir = r'C:\Users\Administrator\Videos\shuiyin\result'
output_file = r'output_shuiyin.mp4'
video_paths = glob.glob(base_dir + '/*.mp4')
video_paths = natsorted(video_paths)
with open('file_list.txt', 'w') as f:
    for file in video_paths:
        f.write(f"file '{file}'\n")
ffmpeg_command = [
    'ffmpeg',
    '-f', 'concat',           # 指定拼接模式
    '-safe', '0',             # 允许绝对路径
    '-i', 'file_list.txt',    # 输入的文件列表
    '-c:v', 'libx264',        # 使用 libx264 编码器
    '-c:a', 'aac',            # 使用 aac 编码音频
    '-strict', 'experimental',# 使用实验性编码
    output_file               # 输出文件路径
]
subprocess.run(ffmpeg_command, check=True)

print(f"视频拼接完成,输出文件:{output_file}")

imageio,适合视频较短


import glob
from natsort import natsorted
from moviepy.editor import VideoFileClip, concatenate_videoclips
import glob
import os.path

from natsort import natsorted
import cv2
import imageio

if __name__ == '__main__':
    #内存
    base_dir =r"C:\Users\Administrator\Videos\shuiyin\0127"
    base_dir =r'C:\Users\Administrator\Videos\shuiyin\result'
    output_path = "pinjie_shuiyin.mp4"
    video_paths =glob.glob(base_dir +'/*.mp4')
    video_paths=natsorted(video_paths)
    imgs=[]
    res = []
    for file in video_paths:
        cap_a = cv2.VideoCapture(file)  # 打开视频B
        fps = cap_a.get(cv2.CAP_PROP_FPS)
        frame_count = 0
        print(file)
        while True:
            ret, frame_a = cap_a.read()
            if not ret:
                break  # 如果没有读取到帧,则跳出循环
            res.append(cv2.cvtColor(frame_a, cv2.COLOR_BGR2RGB))
            frame_count += 1  # 释放视频资源
        cap_a.release()
    imageio.mimsave(output_path, res, "mp4", fps=fps, macro_block_size=None)


http://www.kler.cn/a/523130.html

相关文章:

  • Java面试题2025-并发编程进阶(线程池和并发容器类)
  • 马尔科夫模型和隐马尔科夫模型区别
  • MySQL(单表访问)
  • java多线程学习笔记
  • MongoDB常见的运维工具总结介绍
  • 大模型GUI系列论文阅读 DAY4续:《Large Language Model Agent for Fake News Detection》
  • JavaScript反爬技术解析与应对
  • 蓝桥杯练习日常|递归-进制转换
  • SpringBoot或SpringAI对接DeekSeek大模型
  • Baklib数字化内容管理打破传统束缚提升企业效能
  • 内置序列,专业版已破!
  • 【cran Archive R包的安装方式】
  • 开源先锋DeepSeek-V3 LLM 大语言模型本地调用,打造自己专属 AI 助手
  • 1688平台数据深度挖掘:商品详情与关键词搜索实战指南
  • 在线课堂小程序设计与实现(LW+源码+讲解)
  • linux通过deb包安装(命令模式)
  • 从synchronized到ReentrantLock_Java锁机制的演进与选择
  • waitpid使用
  • 新年祝词(原创)
  • Egg.js GraphQL 完整指南
  • Github 2025-01-28 Python开源项目日报 Top9
  • C语言/C++的函数——memset函数
  • 【2024年华为OD机试】 (C卷,200分)- 发广播(JavaScriptJava PythonC/C++)
  • 【愚公系列】《循序渐进Vue.js 3.x前端开发实践》022-定义组件
  • 基于STM32的智能语音控制灯光系统设计
  • tcp/ip协议中ip层协议,tcp/ip协议中ip协议属于