05 ffmpeg桌面图像h264编码并封装avi

MATLAB视频生成全攻略:从getframe到FFmpeg打造发布级仿真动画 在科学计算与工程仿真领域,数据可视化是沟通复杂原理与结果的关键桥梁。动态视频相比静态图表,能更直观地展示时变过程、多维关系及算法迭代,显著提升技术表达的说服力与传播效率。其核心原理在于按时间序列捕获图形渲染帧,并通过编码器生成连续视频文件。MATLAB为此提供了多层次工具链:基础的getframe函数用于灵活捕获图形窗口像素数据;VideoWriter对象作为官方编码接口,支持MPEG-4、Motion JPEG AVI等多种格式,并可调整帧率与画质参数以平衡性能与输出质量;对于高性能需求,可直接操作图形对 阅读详情

当ffmpeg获取桌面图像数据时, 数据格式是ARGB8888, 需要转换成yuv420p.

ARGB8888 --> RGB888 --> yuv444  --> yuv420p

Y    Y = 0.299 x R + 0.587 x G + 0.114 x B + 0 
U    Cb = -0.169 x R - 0.331 x G + 0.499 x B + 128 
V    Cr = 0.499 x R - 0.418 x G - 0.0813 x B + 128 

rgb32转换成yuv420p的实现代码:

int rgb32_2_yuv420p(unsigned char *rgb32, unsigned char *y, unsigned char *u, unsigned char *v, int w, int h)
{
    int i, j, n;
    int r, g, b;    


    for (i = 0; i < h; i+=2) //每两行来操作, 每行两个像素组合操作
    {
        for (j = 0; j < w; j+=2) //第一行  Y0  U0  Y1
        {
            n = (i*w+j); //第几个像素, 在rgb32每个像素4字节
            b = rgb32[n*4];
            g = rgb32[n*4+1];
            r = rgb32[n*4+2];
            // rgb32的高8位丢掉

            *y++ = 0.299*r + 0.587*g + 0.114*b + 0;
            *u++ = -0.169*r - 0.331*g + 0.499*b + 128;
            // v数据丢掉
            /////////////
            n += 1;  //同一行的下一个像素
            b = rgb32[n*4];
            g = rgb32[n*4+1];
            r = rgb32[n*4+2];           

            *y++ = 0.299*r + 0.587*g + 0.114*b + 0; 
            // u, v数据丢掉
        }

        for (j = 0; j < w; j+=2) //第二行  Y0  V0  Y1
        {
            n = ((i+1)*w+j); //第几个像素, 在rgb32每个像素4字节
            b = rgb32[n*4];
            g = rgb32[n*4+1];
            r = rgb32[n*4+2];

            *y++ = 0.299*r + 0.587*g + 0.114*b + 0;
            *v++ = 0.499*r - 0.418*g - 0.0813*b + 128 ;
            /////////////
            n += 1;  //同一行的下一个像素
            b = rgb32[n*4];
            g = rgb32[n*4+1];
            r = rgb32[n*4+2];           

            *y++ = 0.299*r + 0.587*g + 0.114*b + 0;         
        }       
    }

    return (w*h*3)>>1;
}

////////////////
编码过程与上一例子完全一样.

完整工程:
http://download.youkuaiyun.com/detail/jklinux/9846480

基于FFmpeg构建跨平台音视频合并工具:兼容国产操作系统实践 音视频处理是多媒体开发中的基础需求,其核心在于对容器格式与编码格式的理解。FFmpeg作为业界标准的多媒体处理框架,通过命令行接口提供了强大的编解码与流处理能力,其跨平台特性使其成为解决兼容性问题的关键技术。在工程实践中,静态编译的FFmpeg二进制文件能够有效规避动态库依赖问题,确保工具在不同Linux发行版、Windows及macOS上的一致运行。针对国产操作系统如统信UOS、麒麟OS的特殊性,通过架构探测与预置二进制策略,可以实现对ARM64与x86_64平台的无缝适配。本文以视频与音频合并为具体场景 阅读详情

相关推荐

ffmpeg实现将H264裸流封装成.mp4或.avi文件

由于我是移植到arm-linux环境(海思HI3521A),H264裸流直接从海思的编码模块VENC获取。 H264数据流序列: SPS, PPS, SEI, I, P, P, ... P, P, SPS, PPS, SEI, I, P, P, ... P, P, ... 源码如下: #include <stdio.h> #include "mpi_venc.h" #ifndef __STDC_CONSTANT_MACROS #define __STDC_CONSTANT_MA...

Qiuoooooo的博客 9169

06 FFmpeg用命令将视频转成RGB888或RGB565

直接使用 ffmpeg -i in.mp4 out.rgb就能解码转码生成RGB视频裸流,但是用ffprobe查看格式会报错,用ffplay播放.rgb文件需要指定具体的格式才行。网上搜FFmpeg转RGB888,能搜到的东西很少,换了关键词后就能搜到了。查看ffmepg支持的 pixel_format 图像像素格式。

qq582880551的博客 2680

【FFmpeg+Qt开发】转码流程 H.264 转(mov、mp4、avi、flv)等视频格式 示例详解

本文详细讲解了 FFmpeg技术种 转码的详细内容 核心部分+示例分析 希望对真正在学习的伙伴们有所帮助!

持续学习,持续进步! 1万+

走进音视频的世界——RGB与YUV格式

在图像的世界里,一般使用RGB作为存储格式。而在视频的世界里,一般使用YUV作为压缩存储格式。有时候面试官会问:为什么视频使用YUV来压缩存储,而不用RGB?YUV与RGB有什么区别,两者如何转换的?常见的RGB格式有哪些,常见的YUV格式又有哪些?手机摄像头的预览格式是什么,如何转换为YUV420P的?我们带着这些问题,来揭开RGB与YUV格式的面纱。............

徐福记456 6943

1,1分钟上手GStreamer,解码h264 raw,保存成jpg

最近基于Nvidia开发板做一些开发,发现DeepStream是一个绕不过去的槛。当然你也可以有很多其他的选择,比如使用FFMPEG,但是decode,encode这些在Jetson上支持的并不是很好。或者也使用MutiMediaApi,但是难度比较高,对个人要求比较高。所以DeepStream相对来说是一个不错的选择,要弄明白DeepStream,必须得先弄明白GStreamer。 安装GStreamer环境,学习了两天,基本有个入门吧。 以解码h264 raw 文件为例,可以使用下面的命令,来简单看

nuaa_yk的专栏 8063

rgba8888转yuvsp420

RGBA8888转换为YUV NV21格式的几种算法

FFmpeg实现音频解码并播放

前言 音频解码播放的原理是将不同类型的音频转化为pcm格式进行播放 开发环境 Android Studio 3.5.3,运行环境:Mac,编译环境cmake 环境配置 新建一个module工程,前提是该project是一个C++项目 在main文件夹下面新建cpp文件夹,新建CMakeLists.txt文件,新建native-lib文件,然后点击右键,选择Link C++ With Gradle...

qq_29342787的博客 2287

ffmpeg桌面图像h264编码并封装avi

ffmpeg桌面图像h264编码并封装avi. http://blog.youkuaiyun.com/jklinux/article/details/72519344

ffmpeg将jpg图片转为rgb8888格式

weixin_43747615的博客 1250

深入浅出:.sh文件在Linux系统中的实战应用与技巧

本文深入浅出地介绍了.sh文件在Linux系统中的实战应用与技巧。从基础概念入手,详细讲解了Bash脚本的运行方法、权限管理,并通过编写自动化备份脚本等实例,展示了如何利用Shell脚本提升工作效率。文章还涵盖了脚本调试、错误处理以及函数、参数解析等进阶技巧,帮助读者从入门到精通,掌握这一强大的自动化工具。

weixin_29243279的博客 346

深入解析Sigma Delta调制器 —— 从电流采样到数字信号处理的完整链路

本文深入解析了Sigma Delta调制器的工作原理与应用。通过剖析过采样、噪声整形与负反馈核心机制,并结合AMC1306等实例,详细阐述了从电流采样到数字信号处理的完整链路。该技术凭借其高精度和高抗干扰能力,在ADC、电流测量及音频处理等领域发挥着关键作用。

ttt77的博客 643

音视频开发—使用FFmpeg从纯H264码流中提取图片 C语言实现

本文讲述了如何通过FFmpeg从H264纯码流文件中提取出图片的详细操作和相关的代码

weixin_46999174的博客 2318

智能优化电池:基于单片机的电池管理系统

设计简介: 本设计是基于单片机的电池管理系统,主要实现以下功能: 可通过LCD1602显示温度、电压电流值; 可通过按键调整温度、电压和电流的阈值; 用ADC0832将模拟量转换为数字量。 标签:51单片机、LCD1602、ADC0832 效果图: 总体资料: 原理图: 软件设计流程: 系统框图: 本设计以STC89C52单片机为核心控制器,加上其他的模块一起组成电动汽车的电池管理的整个系统,...

专注单片机实战教学,分享单片机学习资料 375

FFmpeg 入门指南:从核心概念到实战应用,掌握音视频处理利器

音视频处理是多媒体开发中的基础技术,其核心在于对容器、流、编码器等概念的理解。FFmpeg 作为一套开源的跨平台解决方案,通过其模块化设计和丰富的过滤器系统,实现了对音视频记录、转换和流化的全面支持。在技术价值上,FFmpeg 不仅提供了强大的命令行工具链(包括 ffmpeg、ffprobe 和 ffplay),还允许开发者进行深度定制和集成,从而在视频格式转换、剪辑、流媒体处理等场景中发挥关键作用。本文以 FFmpeg 为核心,结合过滤器(Filter)和流映射思想,帮助开发者快速上手并解决实际开发中的高

weixin_34026276的博客 326

Unity学习笔记之【IK反向动力学操作】

反向动力学,简称IK。相较于正向动力学,反向动力学旨在子级对父级产生的影响。使用IK,可以实现根据目标位置或方向来计算并调整角色的关节(骨骼)链,以使角色的末端(如手臂、腿部等)达到预期的位置或取向。通过使用 Unity 的 IK 功能,你可以实现各种复杂的角色动画效果,如角色抓取、足部对齐、手臂跟随等。 2. 将所视的目标物体拖拽绑定 4. 实现效果如下 :移动角色时注释立方体 实现效果如下

m0_47351846的博客 2954

【知识点总结】电机学——原理部分

大家好,由于院校地区存在疫情没法返校,再结合当下形式,去各地旅游放松可能不是一个好的决定,o(╥﹏╥)o,期待已久的旅行就先放一边吧,但也不能闲着,既然无事,那不如继续我的总结,本次总结的内容是电机学,自九推以后我越来越明白电机学的重要性……呜呜呜~~实在太重要了,几乎所有与专业复试有关的题目都会涉及电机学,而它又比较抽象,容易使人浅尝辄止,只能理解一些表面的东西。为此自九推之后,我深刻领悟自身不足,决定对电机学发起依次猛攻,势必要将其彻底拿下,这这只是我的粗略总结,若有空闲,我将不断完善它。

weixin_51130221的博客 1万+

Qt 中如何将图片转化为yuv420p

默认是 QImage::Format_ARGB32_Premultiplied格式,此时一个像素用四个字节存储,按照argb argb的格式,不同的格式转换为yuv420p的时候,由于rgb的数据排列方式不同,需要采用不同的计算方式,因此建议转化为QImage::Format_RGB888;建议通过将格式转换为mage.convertToFormat(QImage::Format_RGB888),这样rgb的存储每个八字节,按照rgb rgb 的格式存储;

LIJIWEI0611的博客 1524

Win10离线安装.net framework 3.5全攻略:镜像匹配与DISM命令实战(附错误0x8024402c解决方案)

本文详细解析了在Windows 10系统中离线安装.NET Framework 3.5的完整流程与核心难点。重点阐述了如何精准匹配系统版本与安装镜像,并提供了使用DISM命令进行离线安装的实战步骤。针对常见的错误代码0x8024402c,文章深入剖析了其根源,并给出了系统级的排查与解决方案,特别适合企业内网运维人员参考。

weixin_29299807的博客 659

argb888与rgb888转换程序_运用NEON指令集加速RGB与YUV相互转换

最近做H264编解码的工作,使用了Android平台MediaCodec,进行硬编解码,以减少CPU的压力。然后发现适用性最强的格式是YUV420P和YUV420SP,绝大部分Android设备都可以支持这两种格式的H264输入。(如何查看Android设备所支持格式,见我的上一篇文章《Android平台MediaCodec避坑指北》)但是Android API level 23. 开始不被推荐,...

weixin_35725821的博客 1763

tkinter动态表格 - 实时更新数据(TkinterTable)

tkinter动态表格 - 实时更新数据(TkinterTable) 参考 [TkinterTable] Tkinter上的表格GUI】 https://github.com/dmnfarrell/tkintertable/wiki/Usage https://github.com/dmnfarrell/tkintertable/issues/47 python使用tkinter编写一个数据显示窗口(实时显示更新的数据) 首先安装TkinterTable,即pip install tki

qq_33934427的博客 1万+

【Verilog基础】CDC跨时钟域方法,典型异步电路设计之脉冲同步器(上)

【Verilog基础】CDC跨时钟域方法,典型异步电路设计之脉冲同步器(上):慢时钟域到快时钟域!

悟已往之不谏 知来者之可追 1544

ARGB_8888如何转化成YUV

也就是在一个由4个像素点组成的像素块中,uv分量是Y分量的一半。然后在每一个像素块中去算出各自的uv分量。由于YUV的像素大小是ARGB8888的1.5倍,所以我们创建一个大小为图片面积*1.5的数组,用于存储YUV数据。定义一个索引变量,用于跟踪YUV数组中当前写入数据的位置。Y分量是完整存储的,所以我们遍历获取ARGB的像素值,再从这些像素值中分离RGB各自的值。之后算出Y的值并存储到yuv数组中。首先获取图片的宽和高,创建一个大小为图片面积的数组。再将图片的像素值提取出来并存储到数组。

wjxgg的博客 392

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

用ffmpeg把H264数据流解码成YUV420P

转自http://blog.youkuaiyun.com/vheavens/article/details/7528463 在网上找了很久这方面的内容,发现网上的代码都太旧了,所使用的函数旧到连最新版本的ffmpeg都已经不包含了,所以对于我这个初学者来说太坑拉。不过经过多次查找ffmpeg的头文件和结合网上的内容,终于成功可以解码拉。现在贴出来。 首先是初始化一些参数 [cpp]

只有不想做的,没有做不到的 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

FFmpeg解码帧数据上传至OpenGL ES及GPU实现YUV转换RGB

https://www.jianshu.com/p/eed347f56d76 本文档描述了经FFmpeg解码得到的多个YUV格式或RGB格式数据上传至OpenGL ES及YUV转换RGB的办法。有关YUV转换RGB的描述可参考我另一个文档音视频开发:RGB与YUV相互转换问题。 1、YUV 1.1、YUV420p yuv420p三个通道分开,分别上传即可。 const uint8...

u010029439的博客 2222

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

FFmpeg视频解码中的YUV420P格式

参考文章 在做基于FFmpeg解码的视频播放时,需要涉及到帧数据存储的YUV与RGB格式,所以了解了一下,参考下述博文。 https://blog.youkuaiyun.com/lanxiaziyi/article/details/74139729#avframe-%E4%B8%8E-yuv420%E9%82%A3%E4%BA%9B%E4%BA%8B 发展史 视网膜存在三种视锥细胞,分别含有对红...

老王的技术博客 3万+

ffmpeg常用基本命令(转)

【FFmpeg】FFmpeg常用基本命令   1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an output_file_video  //分离视频流 ffmpeg -i input_file -acodec copy -vn output_file_audio  //分离音频流 2.视频解复用 ffmpeg –i test.mp...

weixin_34050389的博客 742
上一篇: 04 ffmpeg摄像头数据H264编码
下一篇: linux下的输入设备编程
jklinux
博客等级 码龄10年 1060粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值