Python+ffmpeg实现视频录制功能

news2024/9/27 19:16:58

UI自动化通常是在无人值守特别是非工作时间执行,但是因为网络、产品性能、产品不稳定(偶现缺陷)等问题导致UI自动化失败,第二天分析失败原因时有的失败情况从报告中并不能分析出失败的具体原因(即使有截图),所以如果此时能看到用例运行的真正情况,就可以较快的查找出失败的原因,所以就需要录制出执行UI自动化时的视频。

FFmpeg简介

FFmpeg是领先的多媒体框架,前面的“FF”代表“Fast Forward”,能够解码、编码、转码、复用、解复用、流式传输、过滤和播放人类和机器创造的几乎所有内容。它支持最隐晦的古代格式直到最前沿。它最有高度的可移植性:FFmpeg在各种构建环境、机器架构和配置下,跨Linux、Mac OS X、Microsoft Windows、BSD、Solaris等编译、运行并通过我们的测试基础设施FATE

ffmpege官网:http://ffmpeg.org/

windows下配置FFmpeg

1. 在http://ffmpeg.org/download.html#build-windows 此页面下载
2. 按照需要选择对应的版本,例如我这边使用的win64版本的
3. 下载后放到某个文件夹中解压即可(无需安装)

 

FFmpeg命令

前面提到过FFmpeg可以解码,编码,流式转换等人类创造的几乎所有东西,所以FFmpeg命令也是特别多的,在cmd中ffmpeg -h可以查看ffmpeg支持的所有指令。因为此文主要介绍录屏功能,所以此处主要介绍FFmpeg录屏相关命令

1. ffmpeg -list_devices true -f dshow -i dummy

获取到电脑上相关设备信息
如下图所示可以显示出我电脑上相关的设备信息

 

2. -f

指定采集数据格式,一般为dshow或gdigrab;
gdigrab为系统自带,只能录屏没有声音;
dshow需装directX,优点是可以指定多个输入,从而实现录屏的同时录音。

3. -i

指定输入

当-f为gdigrab时,-i为desktop表示输入为全部桌面
当-f为dshow时,可以分别指定视频和音频输入,例如-i video="screen-capture-recorder" -i audio="virtual-audio-capture"

4. -t

录屏时间,单位为秒

5. -y

覆盖同名文件

6. q

结束录制

FFmpeg视频录制命令使用示例

1. ffmpeg.exe -f gdigrab -i desktop -pix_fmt yuv420p -t 3 -y 123.mp4

此指令采集桌面视频三秒,视频保存在123.mp4文件中,如果有同名的文件则覆盖

说明:
直接在ffmpeg.exe所在的文件夹中执行上面的指令即可(如果把ffmpeg.exe相关路径已经设置了系统路径,则可以直接在cmd中执行)
执行结束后可以看到123.mp4文件,打开后可以看到对应的视频,但是此视频是没有声音的,那么如果需要录制有声音的视频要怎么做呢
注意此处需要加上-pix_fmt yuv420p指定视频格式为yuv420p,否则录制出来的视频可能 会因为格式无法播放

2. ffmpeg -f dshow -i video="screen-capture-recorder" -f dshow -i audio="virtual-audio-capturer" -y test123.mp4

此指令采集桌面视频和音频,结果保存在test123.mp4文件中,如果有同名的文件则覆盖

说明:
当需要采集音频时,设置-f需为dshow;这样就可以设置音频和视频多个输入
-i video="screen-capture-recorder":用screen-capture-recorder,采集视频此视频设备需要安装,可以从http://sourceforge.net/projects/screencapturer/ 此处进行下载,下载后直接安装即可
安装完成后,可以检查到设备中有了screen-capture-recorder视频设备

 

注意,此时当我们使用“window下配置的FFmpeg”执行录屏指令时,可能会报出“video=screen-capture-recorder: I/O error”错误,此问题是因为下载的screen-capture-recorder使用的ffmpeg和我们下载的ffmpeg版本不一致,此时直接使用screen-capture-recorder安装目录下ffmpeg进行录制就行(我自己的在D:\Program Files (x86)\Screen Capturer Recorder\configuration_setup_utility\vendor\ffmpeg此目录下)
i audio="virtual-audio-capturer":指定用virtual-audio-capturer进行音频录制

3. ffmpeg -f dshow -i video="Integrated Webcam" -y test1231952.mp4

此指令为使用摄像头录制视频
说明: -i video="Integrated Webcam" 指定摄像头进行视频采集
最后当我们在进行视频录制时没有设置-t参数时,视频会一直进行录制,当需要结束录制时,输入q即可。

基于Python的FFmpeg屏幕录制实现

了解完FFmpeg录屏的相关指令后,此时需要考虑的就是如何在UI自动化脚本执行过程中自动的进行屏幕的录制。当然我们已经熟悉了FFmpeg指令也知道了如何执行,那此时就是在代码中利用subprocess等模块执行相关的指令就可以了。

下面为用python实现的FFmpeg屏幕录制代码

 

此处给出的只是一个屏幕录制的简单例子,在实际使用中为了在UI自动化自行过程中同时实现屏幕录制则需要把录制相关方法放在另一个线程中,从而实现UI自动化执行过程中同时进行录制。


 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图书推荐|大数据从业人人必备的Excel大数据处理分析

《Excel大数据处理&分析》为活页式新形态教材,介绍了Excel 2016的数据表基本操作、数据输入、数据获取、数据排序、数据筛选、分类汇总、公式与函数、日期和时间函数、数学和统计函数、查找和引用函数、数据透视表、图表的可视化分析、宏和VBA、数据分析工具的应…

导轨安装DIN11 IPO EM系列模拟信号隔离放大器转换器4-20mA/0-10V/0-75mV/0-100mV/0-±10V

概述: 导轨安装DIN11 IPO EM系列模拟信号隔离放大器是一种将输入信号隔离放大、转换成按比例输出的直流信号混合集成电路。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等需要电量隔离测控的行业。该模块内部嵌入了一个高效微功率的电源&#xff0…

NLP学习笔记八-RNN文本自动生成

NLP学习笔记八-RNN文本自动生成 RNN文本自动生成的原理: 结合下面一张图,我们讲一下RNN文本自动生成的原理,RNN文本自动生成其实从一种简单意义上来说,就是做的分类任务,为什么这门说呢? 如下图&#xff0…

大麦一键生成订单截图 大麦生成抢票成功截图

一键生成购票链接 一键生成订单截图 下载源码程序:https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

DVWA-9.Weak Session IDs

大约 了解会话 ID 通常是在登录后以特定用户身份访问站点所需的唯一内容,如果能够计算或轻松猜测该会话 ID,则攻击者将有一种简单的方法来访问用户帐户,而无需暴力破解密码或查找其他漏洞,例如跨站点脚本。 目的 该模块使用四种…

Qt编写全能播放组件(支持ffmpeg2/3/4/5/6/Qt4/5/6)

一、前言 从代码层面以及自由度来说,用ffmpeg来写全能播放组件是最佳方案(跨平台最好最多、编解码能力最强),尽管已经有优秀的vlc/mpv等方案可以直接用,但是vlc/mpv对标主要是播放器应用层面,其他层面比如…

【探索 Kubernetes|集群搭建篇 系列 6】从 0 到 1,轻松搭建完整的 Kubernetes 集群

前言 大家好,我是秋意零。 前面一篇中,我们介绍了 kubeadm 的工作流程。那么今天我们就实际操作一下,探索如何快速、高效地从 0 开始搭建一个完整的 Kubernetes 集群,让你轻松驾驭容器化技术的力量!! &am…

*问题 F: 2026 模拟测试2(三数之和)

题目描述 有3个整数a1&#xff0c;a2&#xff0c;a3。已知0 < a1, a2, a3 < n&#xff0c;而且a1 a2是2的倍数&#xff0c;a2 a3是3的倍数&#xff0c; a1 a2 a3是5的倍数。你的任务是找到一组a1&#xff0c;a2&#xff0c;a3&#xff0c;使得a1 a2 a3最大。 输入 …

【JavaWeb】IDEA专业版和社区版创建Servlet项目

文章目录 1. 什么是Servlet2. 创建项目3. 引入依赖3.1 在pom.xml中引入依赖3.2 下载jar包引入依赖 4. 创建目录5. 编写代码验证6.总结 1. 什么是Servlet Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app.&#xf…

短视频账号矩阵系统源码--并发量问题怎么开发?

目录&#xff1a; 1.视频存储后端并发量如何实现 2.短视频矩阵系统开发的语言 3.需要对接的技术开放平台开发者对接的api接口 4.功能模型技术创建 文章目录 短视频账号矩阵系统后端如何处理并发量冲突问题前言一、视频存储后端并发量如何实现二、短视频矩阵系统开发语言三、…

RestTemplate发送HTTP请求

一、前言 之前对发送http请求&#xff0c;使用过okhttp&#xff0c;还有httpclient等&#xff0c;这次就直接使用springboot的RestTemplate了。 二、不同的请求方式 我这里只针对POST请求做说明&#xff1a; 下面针对post请求做三种说明&#xff1a; 1、调用的接口参数用Re…

我们来谈谈https

"这一封信只是得到它要回答问题&#xff0c;那个答案早已点燃在心里" 一、 http明文传输 紧接上文这仍然是一款拙劣的http服务器&#xff0c;我们此时在用户数输入栏输入数据信息并提交表单。我们先来认识认识使用到的两个工具软件。 1.PostMan postman是一款支持h…

阿里巴巴首次公开4份【并发编程全彩小册】:模型 + 原理 + 应用 + 模式, 四管齐下

相信大家都是知道的&#xff0c;阿里可以说是程序员的“必修地”每一个程序员都渴望去阿里看看&#xff0c;学习进步一下&#xff0c;但是有时候偏偏局限于自己的技术不到位&#xff01; 但是没关系&#xff0c;就算进不来了阿里&#xff0c;但是可以学习他们的技术呀&#xf…

CONT: Contrastive Neural Text Generation

CONT: Contrastive Neural Text Generation 首先&#xff0c;CONT使用自己的预测中的负面例子&#xff08;3.1&#xff09;来构建B集。&#xff08;原因解释&#xff1a;Kalkstein等人[18]指出&#xff0c;使用不同的对比性样本有助于提高模型的泛化能力。因此&#xff0c;我们…

短视频云端批量混剪实操指南

本文为阿里云智能媒体服务IMS「智能内容创作」实践指南第一期&#xff0c;讲述围绕新媒体广告营销场景&#xff0c;通过“去重策略”全自动批量混剪短视频&#xff0c;助力更高效、更快速地创作优质短视频内容。 欧叔&#xff5c;作者 5G时代&#xff0c;越来越多的企业把短视…

步进电机 力矩选型参考

(* 要提升1KG 的物体&#xff0c;以0 .3 米/秒的速度的提升&#xff0c;步进电机如何选型&#xff1f; 如果不是克服重力则FM*A 力越大加速度越大 *) Clear["Global"] qua 0.2;(* 输入 quality 1kg *) Tao qua*9.8; mps 0.2;(* 输入 0.3 M/S *) dia 0.01;(* 1cm…

多对一(association)、一对多(collection)

1、多对一的处理 多对一的理解&#xff1a; 多个学生对应一个老师如果对于学生这边&#xff0c;就是多对一的现象&#xff0c;即从学生这边关联一个老师&#xff01; 1.1、数据库的设计 CREATE TABLE teacher ( id INT(10) NOT NULL, name VARCHAR(30) DEFAULT NULL, PRIMAR…

Apple Vision Pro -开始使用visionOS

Apple Vision Pro -开始使用visionOS visionOS将熟悉的框架和全新的概念结合在一起&#xff0c;因此您可以为空间计算构建一个全新的应用程序世界。为了帮助您开始您的旅程&#xff0c;我们将介绍一系列会议&#xff0c;涵盖空间计算的构建块以及为该平台设计应用程序和游戏。…

软件开发模型

一、 概述   软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码、测试和维护 阶段。   软件开发模型能清晰、直观地表达软件开发全过程&#xff0c;明确规定了要完成的主要活动和任务&#xff0c;用来作…

rider发布项目报错:[MSB4057] 该项目中不存在目标“WebPublish”。

情景再现 Rider升级到2022.3版本及以上时&#xff0c;发布项目显示&#xff1a; [MSB4057] 该项目中不存在目标“WebPublish”。 或者显示 Error:Current toolset does not support publishing for non-Core ASP.NET projects 原因 这是因为Rider MSBuild版本不一致导致。 解…