在PYTHON程序中利用FFmpeg录屏真的很好用

FFmpeg是一个开源的跨平台音视频处理工具,拥有强大的音视频编解码能力和丰富的处理功能。它支持包括视频、音频在内的多媒体数据的转换、编辑、播放等操作,被广泛应用于音视频领域的编解码、转码、流媒体处理等方面。

以下是FFmpeg的一些主要特点和功能:

  1. 丰富的格式支持:FFmpeg支持几乎所有常见的音视频格式,包括但不限于MPEG, AVI, WMV, FLV, MP4, MOV, MP3, AAC等。
  2. 强大的编解码能力:FFmpeg支持多种音视频编解码器,可以对各种格式的音视频进行高效的转换和处理。
  3. 视频处理功能:包括裁剪、旋转、缩放、添加水印、合并、分割等。
  4. 音频处理功能:包括音频剪辑、混音、转换、音频增益调节等。
  5. 流媒体处理:支持流媒体的采集、编码、转发和播放。
  6. 跨平台性:FFmpeg支持Windows、Mac OS和Linux等多个操作系统平台,且提供了相应的命令行工具和API接口,方便集成到各种应用程序中。

FFmpeg可以通过命令行工具进行操作,也可以通过其提供的库文件集成到其他应用程序中。由于其强大的功能和灵活的配置,FFmpeg被广泛应用于视频网站、流媒体平台、多媒体应用程序等领域。

下载ffmpeg: https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-full.7z
注意: 要把ffmpeg-7.0-full_build\bin 路径加入到系统PATH变量中;

使用gdigrab作为输入设备,捕获整个桌面的画面,并对其进行裁剪、编码和压缩。最终输出的视频时长为10秒 

import subprocess
import osoutput_file = "output.mp4"# 如果文件已经存在,删除它
if os.path.exists(output_file):os.remove(output_file)# 设置ffmpeg命令
ffmpeg_cmd = ['ffmpeg',"-f", "gdigrab",                # 使用 gdigrab 作为输入  指定输入设备为 GDI 屏幕抓取。"-framerate", "30",             # 设置帧率为 30"-i", "desktop",                # 捕获整个桌面"-vf", "crop=800:600:100:100",  # 裁剪视频,宽 800,高 600,起点 (10, 10)"-c:v", "libx264",              # 使用 libx264 编码"-preset", "medium",         # 使用预设以加快编码速度"-crf", "20",                   # 设置质量参数,数值越低质量越高'-t', '10',          # 录制时长,这里设置为10秒output_file        # 输出文件名
]# 调用ffmpeg命令
subprocess.run(ffmpeg_cmd)# 选择合适的预设需要权衡编码速度和输出质量。以下是一些常见的预设选项,以及它们在编码速度和输出质量之间的权衡:
# 1. **ultrafast**:极快的编码速度,但输出质量可能受到影响。
# 2. **superfast**:非常快的编码速度,对输出质量的影响比 ultrafast 小一些。
# 3. **veryfast**:非常快的编码速度,输出质量较好。
# 4. **faster**:更快的编码速度,输出质量较好。
# 5. **fast**:快速的编码速度,输出质量较好。
# 6. **medium**:中等的编码速度和输出质量。
# 7. **slow**:慢速的编码速度,高质量的输出。
# 8. **slower**:更慢的编码速度,更高质量的输出。
# 9. **veryslow**:非常慢的编码速度,最高质量的输出。# 根据你的需求,可以根据时间和质量的权衡来选择合适的预设。如果你需要尽快完成编码并且对输出质量要求不是特别高,可以选择速度更快的预设。
# 如果输出质量对你来说更为重要,那么可以选择输出质量更高的预设,尽管编码速度会相应降低。

下面是对命令行参数的解释:

  • -f gdigrab:指定输入设备为GDI屏幕抓取,用于捕获桌面画面。
  • -framerate 30:设置帧率为30,即每秒捕获和处理30帧画面。
  • -i desktop:指定要捕获的输入源为整个桌面。
  • -vf crop=800:600:100:100:使用视频滤镜进行裁剪,将画面裁剪为宽度800、高度600,并且起点坐标为(100, 100)。
  • -c:v libx264:指定使用libx264编码器对视频进行编码。
  • -preset medium:设置编码预设为medium,以平衡编码速度和输出视频质量。
  • -crf 20:设置输出视频的质量参数,数值越低表示质量越高。这里设置为20。
  • -t 10:设置录制时长为10秒,即只录制10秒的视频。
  • output_file:指定输出文件名。

注意:请确保在运行命令之前,您已经定义了output_file变量并将其替换为您想要保存视频的文件路径和名称。

--------------------

FFmpeg是一个跨平台的开源多媒体处理工具,它支持音频、视频等多种格式的转换、编码、解码和处理。下面是一些常见的FFmpeg命令参数的归纳:

- **输入/输出参数**:
  - `-i <inputfile>`:指定输入文件。
  - `-y`:覆盖输出文件而无需确认。
  - `-c:v <codec>`:指定视频编解码器。
  - `-c:a <codec>`:指定音频编解码器。
  - `-s <size>`:指定输出视频的尺寸。
  - `-b:v <bitrate>`:指定输出视频的比特率。
  - `-b:a <bitrate>`:指定输出音频的比特率。
  - `-r <framerate>`:指定输出视频的帧率。
  - `-f <format>`:指定输出文件的格式。

- **视频参数**:
  - `-vf <filtergraph>`:应用视频过滤器。
  - `-vframes <number>`:限制输出帧数。
  - `-ss <time>`:从指定时间开始处理。
  - `-t <duration>`:设置输出持续时间。

- **音频参数**:
  - `-af <filtergraph>`:应用音频过滤器。
  - `-ar <rate>`:指定输出音频的采样率。
  - `-ac <channels>`:指定输出音频的通道数。

- **编码器/解码器参数**:
  - `-encoders`:列出可用的编码器。
  - `-decoders`:列出可用的解码器。
  - `-icodec <codec>`:指定输入流的解码器。
  - `-vcodec <codec>`:指定视频流的编码器。
  - `-acodec <codec>`:指定音频流的编码器。

- **其他参数**:
  - `-hide_banner`:隐藏版本和版权信息。
  - `-stats`:显示处理统计信息。
  - `-loglevel <level>`:设置日志级别。
  - `-h`:显示帮助信息。

这只是一些常见的FFmpeg命令参数,实际上还有很多其他参数可以探索和使用。你可以通过查阅官方文档或运行 `ffmpeg -h` 命令获取更详细的信息。

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

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

相关文章

LangChain实战 | 3分钟学会SequentialChain怎么传多个参数

SequentialChain参数传递&#xff0c;总结了以下四种类型 参数传递入参出参一 对 一11一 对 多1n多 对 一n1多 对 多nn 0.连接大模型 先选一个llm&#xff0c;参考这篇博客选择一个国内大模型 LangChain连接国内大模型测试|智谱ai、讯飞星火、通义千问 from langchain_comm…

网络侦察技术

网络侦察技术 收集的信息网络侦察步骤搜索引擎检索命令bing搜索引擎Baidu搜索引擎Shodan钟馗之眼(zoomeye) whois数据库&#xff1a;信息宝库查询注册资料 域名系统网络拓扑社交网络跨域拓展攻击 其它侦察手段社会工程学社会工程学常见形式Web网站查询 其它非技术侦察手段总结网…

巅峰对决:OpenAI与Google如何用大模型开创未来

2024年&#xff0c;人工智能领域正引领着一场波澜壮阔的全球技术革命。 5月14日&#xff0c;OpenAI揭开了其新一代多模态人工智能大模型GPT4系列的神秘面纱&#xff0c;其中GPT-4o不仅拥有流畅迷人的嗓音&#xff0c;还展现出幽默、机智和深刻的洞察力……紧接着&#xff0c;在…

linux下cp和mv命令显示进度条

1.查看当前系统下coreutils工具包的版本号&#xff1a; [rootk8s-master ~]# rpm -qa | grep -w coreutils coreutils-8.22-24.el7_9.2.x86_64当前版本为8.22。 因为cp 和 mv 命令由 coreutils 软件包提供&#xff0c;所以需要重新下载 coreutils 软件包配置补丁 2.下载core…

数据结构——顺序表基本操作的实现(初始化、取值、查找、插入)

一、线性表与顺序表的概述 线性表的数据元素的逻辑特征是线性的&#xff0c;是一种典型的线性结构。这样的结构可以借鉴数组&#xff0c;如数组a[10]中&#xff0c;a[1]前一定是a[0]&#xff0c;a[1]后一定是a[2]&#xff0c;首结点&#xff08;a[0]&#xff09;前面无元素&am…

java医院管理系统源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的医院管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 医院管理系统的主要使用者分…

VR法治教育展厅互动体验突破了地域限制

VR全景互动展厅搭建编辑器以其卓越的特点、强大的功能及实际应用中的显著优势&#xff0c;成为企业级VR应用的得力助手。这款软件不仅能够制作逼真的虚拟场景&#xff0c;更能让用户沉浸其中&#xff0c;体验前所未有的真实感。 它拥有高度逼真的视觉效果&#xff0c;采用先进的…

智能单款计划助力品牌利润增长

零售品牌若要在激烈的市场竞争中胜出&#xff0c;季中单款的管理无疑是商品生命周期管理的核心环节之一。而单款计划的制定&#xff0c;首先依赖于对爆款、平销及滞销产品的敏锐洞察。一个利润现象不得不引起我们的关注&#xff1a;爆款产品的销售&#xff0c;往往成为拉动品牌…

svix - webhooks

文章目录 一、关于 SvixClient Library Overview与 Svix 托管服务的区别 二、运行服务器1、部署1.1 Docker1) 使用 Docker Compose2) 独立容器 1.2 预编译的二进制文件1.3 从源代码构建 2、运行时依赖项3、Redis/Valkey 注意事项持久性 Eviction 政策4、服务器配置4.1 配置文件…

express.js--生成token(二)

主要作用是访问路由接口时&#xff0c;生成身份权限信息 下载依赖 npm i express-jwt npm i jsonwebtoken 配置管理 config/index.js module.exports {app: {port: process.PORT || 3000,//jwt密钥jwtSecret: jwtSecret,//token过期时间expiresIn: 60 * 60 * 24,} } con…

从零开始:如何集成美颜SDK和优化美颜接口

今天&#xff0c;小编将从零开始&#xff0c;详细讲解如何集成SDK并优化美颜接口。 一、选择合适的美颜SDK 评估SDK的功能 在评估过程中&#xff0c;可以通过阅读官方文档、查看示例代码以及实际测试来确定SDK是否符合需求。 兼容性和性能 确保其支持你开发的应用平台&…

【代码随想录算法训练营第37期 第二十一天 | LeetCode530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先】

代码随想录算法训练营第37期 第二十一天 | LeetCode530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先 一、530.二叉搜索树的最小绝对差 解题代码C&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* …

【网络】高级IO(select||poll||epoll)

基础引入 应用层read&&write的时候&#xff0c;把数据从用户层写到操作系统&#xff0c;本质是拷贝函数。read时候如果缓冲区没有数据&#xff0c;那么就要等待数据才能读取&#xff0c;因此IO等待拷贝&#xff0c;要进行拷贝&#xff0c;必须等待读写事件就绪。高效I…

成长之路Flutter中的TextField组件

TextField组件本身具备多种属性&#xff0c;支持很多参数设置来实现不同样式效果。 TextField组件可直接上手使用&#xff0c;但默认样式和输入规则并不一定是需求开发中想要的&#xff08;实话说默认样式并不好看&#xff09;。下面就通过Flutter TextField组件属性介绍来自定…

Android15 Beta更新速览

Android15 Beta更新速览 前台服务变更 前台服务使应用保持活动状态&#xff0c;以便它们可以执行关键且对用户可见的操作&#xff0c;通常以牺牲电池寿命为代价。在 Android 15 Beta 2 中&#xff0c;dataSync 和 mediaProcessing 前台服务类型现在具有约 6 小时的超时时间&a…

青春旅行家:大学生旅游创业的新星

在青春的岁月里&#xff0c;我们怀揣着梦想&#xff0c;渴望探索世界的每一个角落。对于普通高校的大学生而言&#xff0c;毕业季不仅是人生中的一次重要转折&#xff0c;更是实现梦想、放飞自我的绝佳时机。在这个特殊的时刻&#xff0c;一群年轻的大学生创业者凭借他们的智慧…

内网安全--隧道技术-CS上线本地

免责声明:本文仅做技术交流与学习...请勿非法搞破坏... ---隧道技术:硬刚网络协议,(你不让我走我偏走!) 解决不出网协议上线的问题&#xff08;利用出网协议进行封装出网&#xff09; 代理协议&#xff1a; SOCKS4/5 代理软件&#xff1a; SocksCap Proxifier ProxyChains(…

YOLOv8改进 | 融合模块 | 用Resblock+CBAM卷积替换Conv【轻量化网络】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 在目标检测领域内,尽管YOLO系列的算法傲视群雄,但在某些方面仍然存在改进的空间。在YOLOv8提取特征的时候,由于卷积的缘故,会导致很多信息的丢失。而凯明大神的神作resnet可以减少信息的丢失。本文给大家带…

磁盘管理以及文件系统08

1、为什么要对磁盘进行分区&#xff1f; 业务层面&#xff1a;为满足一定的需求所是做的特定操作。 2、硬盘是什么&#xff0c;以及硬盘的作用 硬盘&#xff1a;计算机的存储设备&#xff0c;一个或者多个带磁性的盘组成的&#xff0c;可以在盘片上进行数据的读写。硬盘的最…

LVGL圆弧、线条、图片、色环、按钮矩阵、文本区域、键盘部件

目录 LVGL圆弧部件 LVGL线条部件 LVGL图片部件 LVGL色环部件 LVGL按钮矩阵部件 LVGL文本区域部件 LVGL键盘部件 LVGL圆弧部件 圆弧部件以弧形滑动的形式来调节、显示某个参数的值。 圆弧部件组成部分&#xff1a; 背景弧&#xff08;LV_PART_MAIN&#xff09; 前景弧&am…