在安卓中使用FFmpeg录制摄像头的视频并保存到本地MP4文件

在移动应用开发中,有时需要利用设备的摄像头录制视频,并且希望在录制过程中能够精确控制视频的质量、格式和时长。FFmpeg作为一个强大的多媒体处理工具,提供了广泛的功能和选项,能够帮助我们实现这样的需求。

添加依赖

在安卓平台上,可以使用 com.arthenica:mobile-ffmpeg-full 库来实现这一目标。

implementation 'com.arthenica:mobile-ffmpeg-full:4.4'

仓库地址:https://github.com/tanersener/mobile-ffmpeg

更多 ffmpeg 的其他用法,参考上述地址文档示例

使用FFmpeg录制视频的命令

FFmpeg.execute("-f android_camera -video_size 1280x720 -i 0:0 -r 25 -b:v 1.5M -pixel_format yuv420p -t 00:01:00 /sdcard/recorded_video.mp4");

参数的含义和作用:

  • -f android_camera:指定输入的格式为android_camera,告诉FFmpeg从Android设备的摄像头获取视频流。

  • -video_size 1280x720:设置视频输入的分辨率为1280x720像素。取决于你的摄像头支持的分辨率,按需求来。

  • -i 0:0:指定输入文件或设备。在这里,0:0表示FFmpeg将从Android系统默认的摄像头获取视频输入。0代表设备号(通常是摄像头),0代表输入流索引(通常是视频流)。

  • -r 25:设置输出视频的帧率为25帧每秒(fps)。决定了视频每秒显示多少帧画面。

  • -b:v 1.5M:设置视频的视频比特率为1.5 Mbps(1.5兆比特每秒)。比特率决定了视频的质量和文件大小,较高的比特率通常意味着更高的视频质量和更大的文件大小。

  • -pixel_format yuv420p:设置像素格式为YUV420P。YUV420P是一种广泛用于视频编码和传输的像素格式,其中Y表示亮度分量(Luma),U和V表示色度分量(Chroma)。

  • -t 00:01:00:设置录制的视频时长为1分钟(00:01:00)。FFmpeg会在达到指定的时间后停止录制。

  • /sdcard/recorded_video.mp4:指定输出文件的路径和文件名。在这里,视频将被保存为MP4格式的文件,路径是/sdcard/recorded_video.mp4。实际路径按你需求写即可,确保有权限读写就行。

注意

在FFmpeg中 各参数的顺序不要随意更改,否则就会导致参数设置无效,导致使用默认参数,比如 -video_size 1280x720 如果放在-i 0:0的后面的话,就会不起作用,切记切记!

-t 00:01:00 是录制一分钟,到时间自动结束,当然你要想一直录制就把这个参数去掉就行,想要结束的时候调用 FFmpeg.cancel即可

-b:v 1.5M 可以根据需求灵活配置,一切以实际为准,值越大视频就越大,找一个合适的值即可。

🆗,就这些雷,我替大家踩了,下班。

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

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

相关文章

【C语言】C语言-身份证管理系统(源码+注释)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

关于.NETCORE站点程序部署到nginx上无法访问静态文件和无法正确生成文件的问题解决过程。

我的netcore6项目,部署到IIS的时候,生成报告时,需要获取公司LOGO图片放到PDF报告文件中,这时候访问静态图片没有问题。 然后还有生成邀请二维码图片,这时候动态创建图片路径和图片也没有问题,可以在站点的…

funasr最新更新GPU版本安装避坑

#当前安装过程没有cpu版本顺利 1.个人在自己的电脑上安装ubantu系统,以便使用本身的显卡功能(本人显卡NVIDIA GeForce RTX 4060)(这里需要注意,更新里面有附加驱动安装驱动会导致黑屏,小伙伴不要心急重装系统,可以ctr…

Python爬虫教程第4篇-使用BeautifulSoup解析html

文章目录 Beautiful Soup简介安装Beautiful Soup快速开始如何使用Beautiful Soup中的对象TagNameAttributes多值属性 NavigableStringBeautifulSoupComment 遍历文档树子节点tag名字.contents 和 .children.descendants.strings 和 stripped_strings 父节点.parent.parents 兄弟…

git批量删除本地包含某字符串的特定分支

git批量删除本地包含某字符串的特定分支 git branch -a | grep 分支中包含的字符串 | xargs git branch -D git删除本地分支_git查看删除本地分支-CSDN博客文章浏览阅读989次。git branch -d <分支名>可以通过: git branch 查看所有本地分支及其名字&#xff0c;然后删…

JavaScript(9)——作用域的一些问题

如果在函数内部&#xff0c;变量没有声明直接赋值&#xff0c;也会当做全局变量看。强烈不推荐&#xff01;&#xff01; function op() {num 80}op()console.log(num) 在不同作用域下&#xff0c;可能存在变量命名冲突的情况&#xff1a; let num 10 function fn(){let num…

Spring-Spring、IoC、DI、注解开发

1、Spring是什么 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。 Spring整体架构 Spring优点&#xff1a; Spring属于低侵入设计。IOC将对象之间的依赖关系交给Spring,降低组件之间的耦合&#xff0c;实现各个层之间的解耦&#xff0c;让我们更专注于业务…

代码随想三刷单调栈篇1

代码随想三刷单调栈篇1 739. 每日温度题目代码 496. 下一个更大元素 I题目代码 503. 下一个更大元素 II题目代码 42. 接雨水题目代码 84. 柱状图中最大的矩形题目代码 739. 每日温度 题目 链接 代码 class Solution {public int[] dailyTemperatures(int[] temperatures) {…

python库识别图像中人物的个数

要在Python中识别图像中的人物数量&#xff0c;可以使用OpenCV库来进行图像处理和特征提取&#xff0c;然后使用深度学习模型&#xff08;如YOLO、SSD或Faster R-CNN&#xff09;来识别物体。以下是一个简化的例子&#xff0c;使用OpenCV和预训练的YOLO模型来识别图像中的物体数…

5G中的RedCap

5G中的RedCap&#xff1a;降低能力的重要性和实现方式 随着5G技术的推广和普及&#xff0c;设备和终端的多样化使得网络能力的管理变得更加复杂和关键。RedCap&#xff08;Reduced Capability&#xff09;作为一个重要的概念&#xff0c;旨在解决设备能力差异对网络服务和用户…

WSGI 服务器教程:`write` 方法解析

Python WSGI 服务器教程&#xff1a;write 方法解析 在本文中&#xff0c;我们将详细解析一个用于 WSGI 服务器的 write 方法。这个方法负责处理 HTTP 响应&#xff0c;包括设置响应头和发送响应数据。我们将逐行解释该方法的工作原理&#xff0c;并提供一些背景知识&#xff…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十三章 Linux连接档

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

前台线程和后台线程(了解篇)

在多线程编程中&#xff0c;理解线程的不同类型对于编写高效、稳定的程序至关重要。特别地&#xff0c;前台线程&#xff08;Foreground Threads&#xff09;与后台线程&#xff08;Background Threads&#xff09;在行为上有着根本的区别&#xff0c;这些区别直接影响到程序的…

jdevelope安装

准备 1.jdk1.8&#xff08;已经安装不做记录&#xff09; 2.下载jdevelope安装包 3.安装包安装jdevelope开发工具 4.创建或导入项目 下载jdevelope安装包 官网下载地址&#xff1a;https://edelivery.oracle.com 安装包安装jdevelope开发工具 cmd管理员权限运行安装脚本…

【栈和队列OJ题】

栈和队列OJ题 文章目录 栈和队列OJ题1. 用队列实现栈2. 用栈实现队列3. 括号匹配问题4. 循环队列 1. 用队列实现栈 OJ链接&#xff1a;225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09; 好的&#xff0c;我们一起来看一下题目&#xff0c;题目是这样说的 思路&…

百日筑基第十七天-消息队列入门

百日筑基第十七天-消息队列入门 基础概念 什么是消息队列&#xff1f; MQ&#xff1a;Message Queue 存放消息的队列&#xff0c;消费消息时是按照顺序&#xff08;队列先进先出&#xff09;消费的。 参与消息传递的双方称为 生产者 和 消费者 &#xff0c;生产者负责发送…

2024年06月CCF-GESP编程能力等级认证C++编程三级真题解析

本文收录于专栏《C等级认证CCF-GESP真题解析》&#xff0c;专栏总目录&#xff1a;点这里。订阅后可阅读专栏内所有文章。 一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级&…

天润融通引领客服革新,AI大模型助力品牌服务升级

AI时代&#xff0c;消费零售品牌的客户服务应该怎么做&#xff1f; 如今消费者的关注点已经越来越复杂&#xff0c;一条毛巾&#xff0c;关注点就可以包括&#xff1a; 是否婴幼儿可用&#xff0c;是否儿童成人可用&#xff1b;是否可以直接接触皮肤&#xff1b;是否无甲醛、…

张量笔记(4):张量网络

张量分解通常是将高维张量分解成一系列较低维的张量&#xff0c;表示能力相对较低。而张量网络可以表示复杂的高维数据结构&#xff0c;通过连接多个张量形成网络结构&#xff0c;可以更灵活地表示和处理复杂的数据关系。本节主要介绍HT和TT网络。 2.5.1 HT分解——首先我们引入…

一篇文章解锁vue2

本文章对标vue2笔记内容&#xff0c;欢迎补充 文章目录 Vue介绍Vue2的生命周期生命周期钩子 使用vue/cli&#xff08;脚手架&#xff09;创建项目工程组件属性refpropsmixinplugins插件 数组更新检测&#xff08;会改变原数组&#xff09;添加/修改响应式布局vue内置指令自定义…