视频mp4垂直拼接 水平拼接

视频mp4垂直拼接 水平拼接

pinjie_v.py

import imageio
import numpy as np
import os
import cv2

def pinjie_v(dir1,dir2,out_dir):

    os.makedirs(out_dir, exist_ok=True)
    # 获取目录下的所有视频文件
    video_files_1 = [f for f in os.listdir(dir1) if f.endswith('.mp4')]
    video_files_2 = [f for f in os.listdir(dir2) if f.endswith('.mp4')]

    # 确保两个目录下的视频文件是同名的
    common_files = set(video_files_1).intersection(video_files_2)

    # 如果没有同名视频,退出
    if not common_files:
        print("没有同名的视频文件。")
        exit()

    for video_name in common_files:
        print(f"处理视频: {video_name}")

        # if "user-4fd103ee-38d4-43c5-bb2a-f496d2fe065e" not in video_name:
        #     continue
        # 打开视频文件
        video_path_1 = os.path.join(dir1, video_name)
        video_path_2 = os.path.join(dir2, video_name)

        reader1 = imageio.get_reader(video_path_1)
        reader2 = imageio.get_reader(video_path_2)

        # 获取视频信息(假设两个视频有相同帧数)
        fps = reader1.get_meta_data()['fps']
        num_frames = min(reader1.count_frames(), reader2.count_frames())

        # 创建输出文件
        output_path = os.path.join(out_dir, f"v_{video_name}")
        # writer = imageio.get_writer(output_path, fps=fps)
        if os.path.exists(output_path):
            continue
        outs = []
        # 逐帧处理
        for i in range(num_frames):
            frame1 = reader1.get_data(i)
            frame2 = reader2.get_data(i)

            # 获取帧的高度和宽度
            height1, width1, _ = frame1.shape
            height2, width2, _ = frame2.shape
            if height1 > width1:
                if height1 != height2:
                    y_scale = height1 / height2
                    frame2 = cv2.resize(frame2, (int(width2 * y_scale), height1), interpolation=cv2.INTER_AREA)
            elif height1 <= width1:
                if width1 != width2:
                    x_scale = width1 / width2
                    frame2 = cv2.resize(frame2, (width1, int(height2 * x_scale)), interpolation=cv2.INTER_AREA)

            if height1 > width1:
                frame = np.hstack([frame1, frame2])
            else:
                frame = np.vstack([frame1, frame2])

            outs.append(frame)
        try:
            imageio.mimsave(f'{output_path}', outs, fps=fps, macro_block_size=None)
        except Exception as e:
            print(e)
        # writer.close()
        print(f"视频 {video_name} 拼接完成,保存在 {output_path}")

if __name__ == '__main__':

    # 设置目录路径
    dir1 = r'E:\project\smpl\render_blender\linux\hmr_res'
    dir2 = r'E:\project\smpl\render_blender\linux\hmr2_res'

    dir1 = r'E:\project\smpl\render_blender\linux\val_out_depth_any_color'
    dir2 = r'E:\project\smpl\render_blender\linux\val_out_video'

    dir1 = r'E:\project\smpl\render_blender\linux\val_out_depth_any_color'
    dir2 = r'E:\project\smpl\render_blender\linux\val_out_video'

    dir1=r'E:\project\smpl\render_blender\linux\test_lbg_o'
    dir2 =r'E:\project\smpl\render_blender\linux\test_lbg6'

    out_dir = 'track_diff'
    pinjie_v(dir1,dir2,out_dir)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/975482.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【HarmonyOS Next】拒绝权限二次申请授权处理

【HarmonyOS Next】拒绝权限二次申请授权处理 一、问题背景&#xff1a; 在鸿蒙系统中&#xff0c;对于用户权限的申请&#xff0c;会有三种用户选择方式&#xff1a; 1.单次使用允许 2.使用应用期间&#xff08;长时&#xff09;允许 3.不允许 当用户选择不允许后&#xff0…

论文笔记(七十二)Reward Centering(四)

Reward Centering&#xff08;四&#xff09; 文章概括摘要附录A 伪代码 文章概括 引用&#xff1a; article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arXiv preprint arXiv:2405.09999…

数据结构之二叉树的定义及实现

1. 树的概念 主要的定义&#xff1a; 节点的度&#xff1a;一个节点含有的子树的个数称为该节点的度&#xff1b;如上图&#xff1a;A的为6 叶节点或终端节点&#xff1a;度为0的节点称为叶节点&#xff1b;如上图&#xff1a;B&#xff0c;C&#xff0c;H&#xff0c;I等节点…

Deepseek 与 ChatGPT:AI 浪潮中的双子星较量

引言 在人工智能飞速发展的当下&#xff0c;AI 语言模型成为了人们关注的焦点。Deepseek 与 ChatGPT 作为其中的佼佼者&#xff0c;各自展现出独特的魅力&#xff0c;引领着 AI 技术的发展潮流。今天&#xff0c;就让我们深入探讨这两款模型&#xff0c;看看它们在 AI 领域中是…

网络运维学习笔记 019 HCIA-Datacom综合实验03

文章目录 综合实验3实验需求一&#xff1a;A公司网络规划二&#xff1a;B公司网络规划 配置一、ip、vlan、vlanif&#xff0c;stp、eth-trunkSW1SW2SW3R1 二、ospfSW1R1 三、NATR1ISP 四、拒绝ping允许httpSW1 五、右半部分vlan、dhcp、ospf、NATSW4R2 综合实验3 实验需求 一&…

【时时三省】(C语言基础)结构化程序设计方法

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 结构化程序设计方法 结构化程序设计强调程序设计风格和程序结构的规范化&#xff0c;提倡清晰的结构。怎样才能得到一个结构化的程序呢?如果面临一个复杂的问题&#xff0c;是难以一下子写…

“国补”带火手机换新,出售旧手机应如何保护个人信息安全

在“国补”政策的推动下,手机换新热潮正席卷而来。“国补”以其诱人的补贴力度,成功激发了消费者更换手机的热情。无论是渴望体验最新技术的科技爱好者,还是对旧手机性能不满的普通用户,都纷纷投身到这场手机换新的浪潮之中。 随着大量消费者参与手机换新,二手手机市场迎来…

Flash-01

1-初始登录页面 2-【文件】-【新建】 3-【ActionScript3.0】 4-常用功能介绍【关闭/开启】 4-1-【关闭开始页】 勾选【不再提示】 4-2-【开启开始页】 【编辑】-【首选参数】-【常规】-【重置所有警告对话框】 5-恢复初始页面 【窗口】-【工作区】-【重置】 6-常用快捷键 …

Golang | 每日一练 (3)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 Golang | 每日一练 (3)题目参考答案map 实现原理hmapb…

DeepSeek掘金——基于DeepSeek-R1构建文档问答机器人

DeepSeek掘金——基于DeepSeek-R1构建文档问答机器人 在这个项目中,我们将结合本地 AI 的隐私与 Deepseek R1 的智能,创建一个完全本地化、推理驱动的问答机器人。 在人工智能 (AI) 日益融入我们日常生活的时代,一个问题仍然处于最前沿:隐私。尽管基于云的 AI 系统功能强大…

蓝桥杯学习笔记04-滑动窗口不定长(最短/最小)

题目来源 分享丨【题单】滑动窗口与双指针&#xff08;定长/不定长/单序列/双序列/三指针/分组循环&#xff09; - 力扣&#xff08;LeetCode&#xff09; 209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 题目要求大于等于 class Solution { public:int min…

基于WOA鲸鱼优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a/matlab2024b 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频…

DeepSeek R1本地+私有云版医疗AI部署开发成功案例技术剖析

1. 引言 1.1 研究背景与意义 随着科技的飞速发展,人工智能(AI)在医疗领域的应用正逐渐成为推动医疗行业变革的重要力量。近年来,医疗 AI 取得了显著的进展,从疾病诊断、药物研发到医疗管理等各个环节,AI 技术都展现出了巨大的潜力。它能够处理和分析海量的医疗数据,为…

【行业解决方案篇十八】【DeepSeek航空航天:故障诊断专家系统 】

引言:为什么说这是“航天故障终结者”? 2025年春节刚过,航天宏图突然官宣"DeepSeek已在天权智能体上线",这个搭载在卫星和空间站上的神秘系统,号称能提前48小时预判99.97%的航天器故障。这不禁让人想起年初NASA禁用DeepSeek引发的轩然大波,更让人好奇:这套系…

四步彻底卸载IDEA!!!

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 大家好&#xff0c;我们今天来学习四步彻底卸载IDEA&#xff01;&#xff01;&#xff01; 首先我要提醒各位 如果你想删除 IDEA 相关&#xf…

Codes 开源免费研发项目管理平台 2025年第一个大版本3.0.0 版本发布及创新的轻IPD实现

Codes 简介 Codes 是国内首款重新定义 SaaS 模式的开源项目管理平台&#xff0c;支持云端认证、本地部署、全部功能开放&#xff0c;并且对 30 人以下团队免费。它通过创新的方式简化研发协同工作&#xff0c;使敏捷开发更易于实施。并提供低成本的敏捷开发解决方案&#xff0…

BIRCH算法深度解析与实践指南

一、算法全景视角 BIRCH&#xff08;Balanced Iterative Reducing and Clustering using Hierarchies&#xff09;是首个针对超大规模数据集的聚类算法&#xff0c;可在有限内存下高效处理十亿级数据。其核心创新在于采用CF Tree数据结构&#xff0c;将数据压缩为多级聚类特征…

更改conda 环境默认安装位置

一、找到".condarc" Windows 下&#xff0c;~/.condarc 文件通常位于 C:\Users\<你的用户名>\.condarc 二、修改内容 在.condarc 里添加上 envs_dirs:- D:\ProgramData\anaconda3\envs- C:\Users\<你的用户名>\.condarc &#xff08;第一个优先&…

vue怎么设置允许局域网手机访问

打开vite.config.ts 添加 server: {host: 0.0.0.0}, host: 0.0.0.0&#xff1a;设置为0.0.0.0&#xff0c;允许从所有IP访问。port: 5173&#xff1a;指定端口号&#xff0c;可以根据需要进行修改。不指定默认 5173disableHostCheck: true&#xff1a;禁用主机检查&#xff0c…

【Git 学习笔记_27】DIY 实战篇:利用 DeepSeek 实现 GitHub 的 GPG 秘钥创建与配置

文章目录 1 前言2 准备工作3 具体配置过程3.1. 本地生成 GPG 密钥3.2. 导出 GPG 密钥3.3. 将密钥配置到 Git 中3.4. 测试提交 4 问题排查记录5 小结与复盘 1 前言 昨天在更新我的第二个 Vim 专栏《Mastering Vim (2nd Ed.)》时遇到一个经典的 Git 操作问题&#xff1a;如何在 …