gradio部署视频输入输出示例,gradio网页输出视频nan,输出视频无法播放解决方法

gradio部署视频输入输出示例,gradio网页输出视频nan,输出视频无法播放

  • Opencv不能采用h64格式进行编码
  • 解决方案
    • moviepy介绍
    • 浏览器接受的视频编码格式:
    • 采用h264编码合成视频:
  • gradio部署视频输入输出示例
  • Gradio视频组件使用详解
    • 简介
    • 视频组件概述
    • 输入和输出行为
    • 初始化参数

Opencv不能采用h64格式进行编码

所以如果浏览器不能显示输出视频,显示nan,可以检查下是否使用了opencv处理了视频,以及编码格式

错误显示:
在这里插入图片描述

修正后:
在这里插入图片描述

我的处理视频的函数就是踩了这个坑,好久没意识到

解决方案

moviepy介绍

moviepywrite_videofile方法中,codec参数用于指定视频编码格式。对于视频编码,moviepy支持多种不同的编解码器,其中一些常用的编解码器包括:

  • libx264:这是一个流行的H.264编码器,通常提供很好的压缩率和质量平衡。
  • libx265:这是H.265编码器,它提供了比H.264更高的压缩率,但编码时间可能会更长。
  • mpeg4:这是一个较老的编码器,它的压缩率不如H.264,但可能在某些设备上更兼容。
  • vp8:这是一个较早的VP8编码器,通常用于WebM视频。
  • vp9:这是VP8的更新版本,提供了更好的压缩率和质量。
    除了视频编码,write_videofile方法还有其他一些重要的参数,例如:
  • fps:指定输出视频的帧率。
  • preset:指定编码预设,这会影响编码速度和质量。例如,ultrafastsuperfastveryfastfasterfastmediumslowslowerveryslowplacebo
  • bitrate:指定输出视频的比特率。
  • audio_codec:指定音频编码格式。
  • temp_audiofile:指定临时音频文件的路径,这在处理带有不同音频编码的视频时可能有用。
  • verbose:如果设置为True,则编码过程将显示详细信息。
    请注意,并不是所有编解码器都适用于所有情况,选择哪个编解码器取决于您的具体需求,例如视频质量、文件大小和兼容性。在实际应用中,您可能需要尝试不同的编解码器和参数,以找到最适合您需求的设置。

浏览器接受的视频编码格式:

浏览器通常支持多种视频编码格式,以便能够播放不同来源和格式的视频文件。以下是一些主流浏览器支持的视频编码格式:

  1. H.264/AVC:这是一种广泛使用的视频编码格式,得到了大多数现代浏览器的支持,包括Chrome、Firefox、Safari和Edge。
  2. HEVC/H.265:这是一种较新的编码格式,提供了比H.264更好的压缩效率,但可能需要额外的授权费用。目前,Safari浏览器和某些版本的Chrome支持HEVC。
  3. VP8:这是Google开发的一种开源视频编码格式,曾用于WebRTC和YouTube。虽然它的使用有所减少,但仍然是WebM视频容器的一部分。
  4. VP9:是VP8的后续版本,提供了更好的压缩效率。它得到了Chrome和Firefox的支持。
  5. AV1:是一种新的、开源的视频编码格式,由AOMedia组织开发,目标是提供比HEVC更好的压缩效率,并且免版税。目前,Chrome、Firefox和Edge都支持AV1。
  6. Theora:这是一个开源的视频编码格式,但它的使用已经减少,因为VP8和AV1提供了更好的压缩率和性能。
    为了确保浏览器能够播放特定的视频格式,视频文件通常会被封装在容器格式中,如MP4、WebM或OGG。不同的浏览器可能对不同的容器格式有不同的支持程度。
    了解具体浏览器对视频编码格式的支持情况,可以参考浏览器的官方文档或通过在线资源进行查询。

采用h264编码合成视频:

使用moviepy进行合成

from moviepy.editor import ImageSequenceClip
import os# 指定图像文件夹路径
image_folder = '/path/to/image/folder'
# 获取文件夹中的所有图像文件
image_files = [f for f in os.listdir(image_folder) if f.endswith(('.png', '.jpg', '.jpeg'))]
# 按文件名排序图像,确保它们按顺序排列
image_files.sort()
# 创建一个ImageSequenceClip对象,它将自动将图像序列转换为视频
clip = ImageSequenceClip(image_files, fps=30)
# 指定输出视频的文件名
output_video = '/path/to/output/video.mp4'
# 保存视频
clip.write_videofile(output_video, codec='libx264')

gradio部署视频输入输出示例

import gradio as gr
import cv2from vis import demo_gradio 
# 定义模型函数,接受MP4视频作为输入,将视频存储到本地/demo/video文件夹下,以MP4格式保存,
# 然后读取指定位置的视频并返回
def mymodel(input_video):print(type(input_video),input_video)# 可以发现这里的input_video是gradio将用户上传的视频进行读取,然后放到了一个临时文件夹中,这里的input_video是一个路径# 处理视频的函数,输出为路径output_path=demo_gradio(input_video)    # 读取保存的视频文件# 返回应当也是一个路径,output_path# 但要注意,由于需要在网页进行展示,所以视频编码格式应当能够被网页接受return output_path# 返回读取的视频# 定义输入和输出界面,使用Video输入和Video输出
input_interface = gr.Video(sources=["upload", "webcam"],label="上传MP4视频或调取摄像头")
# output_interface = [gr.Image(label="输出图像",show_download_button=True) ,gr.Video(label="输出视频",show_download_button=True)]
output_interface = [gr.Video(label="输出视频",show_download_button=True),gr.Video(label="输出视频",show_download_button=True,format='mp4')]# 设置标题和解释说明
title = "视频姿态检测模型"
description = "该模型接受MP4视频作为输入,并输出相同的视频。您可以上传自己的视频,或者使用摄像头录制。"# 启动Gradio界面
demo=gr.Interface(mymodel, inputs=input_interface, outputs=output_interface , title=title, description=description)
demo.launch()

Gradio视频组件使用详解

简介

Gradio是一个开源的Python库,用于创建机器学习模型和数据的交互式界面。其视频组件gradio.Video允许用户上传、记录或显示视频。本文将详细介绍Gradio视频组件的使用方法和特性。

视频组件概述

视频组件gradio.Video可以作为输入或输出组件使用。作为输入时,它允许用户上传视频文件或从网络摄像头录制视频。作为输出时,它可以显示视频文件。为了在浏览器中播放,视频必须具有兼容的容器和编解码器组合,例如.mp4与h264编解码器,.ogg与theora编解码器,或.webm与vp9编解码器。如果输出视频在浏览器中无法播放,组件将尝试将其转换为可播放的mp4格式。

输入和输出行为

  • 输入组件:上传的视频作为str文件路径或URL传递,其扩展名可以通过format参数修改。
  • 输出组件:期望一个strpathlib.Path视频文件路径,用于显示视频,或者一个元组,其中第一个元素是视频文件路径,第二个元素是可选的字幕文件路径。

初始化参数

视频组件的初始化参数包括:

  • value:视频组件的默认值路径或URL。
  • format:组件返回的视频格式,如’avi’或’mp4’。
  • sources:允许的视频来源,如’upload’(上传)或’webcam’(网络摄像头)。
  • heightwidth:视频显示的高度和宽度。
  • label:组件的标签。
  • every:如果value是可调用的,每秒运行函数的次数。
  • show_label:是否显示标签。
  • container:是否将组件放置在容器中。
  • scale:相对于相邻组件的尺寸。
  • min_width:组件的最小像素宽度。
  • interactive:是否允许用户上传视频。
  • visible:组件是否可见。
  • elem_idelem_classes:组件在HTML DOM中的ID和类,用于定位CSS样式。
  • render:组件是否在Blocks上下文中渲染。
  • mirror_webcam:网络摄像头是否镜像。
  • include_audio:视频是否包含音频轨道。
  • autoplay:作为输出时,视频是否自动播放。
  • show_share_buttonshow_download_button:是否显示分享和下载按钮。
  • min_lengthmax_length:用户上传视频的最小和最大长度。

通过Gradio视频组件,可以轻松创建包含视频上传和播放功能的交互式界面,适用于多种机器学习和数据处理场景。了解和利用这些参数,可以更好地自定义视频组件,以满足特定的需求。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

练习01-登录注册(简单)

一、用户登录/注册实现 综合前面学的知识来实现简单的注册登录功能 1.准备工作 注册登录页面 数据库,数据表 mybatis 坐标引入,MySQL驱动 配置 映射文件 用户实体类 Servlet代码 2.页面 不想手写的可以看博主IT黄大大【带源码】 【炫酷登录界…

vue2+vant2+Laravel7 实现多图上传到七牛云

后端接口 1、路由&#xff0c;在 routes/api.php 中 Route::resource(photos, PhotoController)->only(store);2、创建对应控制器 <?php namespace App\Http\Controllers; use Illuminate\Http\Request;class PhotoController extends Controller {/**** 上传图片* p…

如何实现接口

类实现接口 用关键字implements声明自己实现一个或 多个接口 实现 多个接口&#xff0c;用 逗号分隔开 重写接口中的方法 要求&#xff1a;类实现某个接口&#xff0c;类必须重写该接口的所有方法。 重写规则&#xff1a; 去掉public abstact修饰符 给出方法体&#xff08;具…

终于找到方法!多个微信同时登录一台电脑!

大家都知道&#xff0c;在手机上登录多个微信号&#xff0c;有很多工具可以实现&#xff0c;但是要想在电脑上同时登录多个微信账号&#xff0c;也是有方法可以实现的&#xff0c;下面就一起来看看吧&#xff01; 通过使用微信管理系统&#xff0c;能够让我们实现多个微信账号…

【JavaScript】JavaScript 简介 ④ ( 解释型语言 和 编译型语言 | 计算机程序本质 | 编译器 和 解释器 )

文章目录 一、 解释型语言 和 编译型语言1、计算机程序本质2、编译器 和 解释器3、编译器 分析4、解释器 分析 一、 解释型语言 和 编译型语言 1、计算机程序本质 计算机 的 程序 是在 CPU 上执行的 , CPU 上执行的只有匹配该 CPU 的机器码指令 , 不同类型的 CPU 执行的 机器码…

Milvus向量数据库检索

官方文档&#xff1a;https://milvus.io/docs/search.md   本节介绍如何使用 Milvus 搜索实体。   Milvus 中的向量相似度搜索会计算查询向量与具有指定相似度度量的集合中的向量之间的距离&#xff0c;并返回最相似的结果。您可以通过指定过滤标量字段或主键字段的布尔表达…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)上篇

提供具有网页显示能力的Web组件&#xff0c;ohos.web.webview提供web控制能力。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。示例效果请以真机运行为准&#xff0c;当前IDE预览器不支持。 需要权…

【动态规划】代码随想录算法训练营第五十三天 |1143.最长公共子序列, 1035.不相交的线 ,53. 最大子序和 动态规划 (待补充)

1143.最长公共子序列 1、题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个…

基于Python的中医药知识问答系统设计与实现

[简介] 这篇文章主要介绍了基于Python的中医药知识问答系统的设计与实现。该系统利用Python编程语言&#xff0c;结合中医药领域的知识和技术&#xff0c;实现了一个功能强大的问答系统。文章首先介绍了中医药知识的特点和传统问答系统的局限性&#xff0c;然后提出了设计思路…

阿里通义灵码全面公测,来看看它的水平怎么样?

作者&#xff1a;颖欣 人工智能作为新一轮的技术革命&#xff0c;已经开始渗透到软件开发领域&#xff0c;改变着传统的编码模式。如何利用 AI 技术提升软件开发的效率和质量&#xff0c;成为各家研究的重点。去年 10 月阿里云正式发布的通义灵码 - 智能编码助手&#xff0c;如…

新生宿舍管理系统|基于springboot框架+ Mysql+Java+B/S架构的新生宿舍管理系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 学生功能模块 管理员功能 系统功能设计 数据库E-R图设计 lunwen参考 摘要 研究目的 开发环境 项目部…

【Vue2】slot 插槽全家桶

插槽-默认插槽 插槽的基本语法 组件内需要定制的结构部分&#xff0c;改用<slot></slot>占位使用组件时, <MyDialog></MyDialog>标签内部, 传入结构替换slot给插槽传入内容时&#xff0c;可以传入纯文本、html标签、组件 插槽-默认值 封装组件时&am…