自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 FFMPEG使用代码给视频添加时间戳滤镜

在上一周,我用,总算可以实时显示视频画面。在此基础上,我想为视频添加水印信息。网上的教程大多以命令行为主,少数有利用的代码的方式添加水印,而且都只能对已有文件进行操作,我还是期望能实时操作并显示添加水印的视频。

2024-06-23 11:53:41 950

原创 FFMPEG+QT显示桌面

我在录制屏幕或者摄像头采集的画面时,均是将图像编码后存入文件,每次都需要通过视频播放软件才能看到效果,我期望能实时显示采集的画面。之前在网上查找资料,发现绘制FFMPEG解码后的图像大多用SDL,但我想直接使用Qt的接口完成图像的显示。Qt中可以使用QImage类绘制图像,但Qt对于YUV格式的数据支持的不好,大家通常将YUV数据转换为RGB。对于格式转换,FFMPEG 提供了相应的函数,我们不需要自己按照公式自己转换。QT和FFMPEG对像素格式的枚举定义不同,再做转换时需注意。例如FFMPEG中。

2024-06-15 11:27:37 273

原创 使用代码获取音视频设备能力信息

我想通过代码获取类似上面的信息,这样就可以为用户提供帧率和视频大小的选择,不过并没有在FFMPEG中找到相应的接口。查看FFMPEG源码后,得知该功能是使用了微软提供的IAMStreamConfig接口,结合网上的资料和dshow.c源码,我对接口做了简单的封装,可以把需要的信息提取出来。对于视频设备,我只是获取了设备名称,设备支持的帧率范围和输出视频大小。对于音频设备,除了设备名,我还获取了设备的采样位数和采样率信息。如果需要其他的信息,可以在微软提供的结构体。

2024-06-02 20:03:24 253

原创 FFMPEG利用代码实现简单的录屏功能

在将封装后的音视频流写入文件时,我使用了两个线程,本来计划在各自的线程统计下一帧的时间戳,通过比较,将时间戳靠前的音频或视频帧写入文件。实现过程中,发现可以不做这一步处理,哪个线程抢占到输出上下文,正常写入即可。之前有利用FFMPEG封装过摄像头采集的图像,也封装过音频设备采集的数据,录屏其实只需要更换音视频的输入源即可。关于音频重采样部分的代码,我做了简单的封装,这部分的功能相对独立,提出来方便理解整体思路。主要的代码如下所示,其实和之前的封装代码有很多类似的地方,主要是将两个采集流程理清楚。

2024-05-26 22:33:59 267

原创 FFMPEG采集音频设备并输出到文件

之前有将pcm数据进行编码并写入文件,这次有些许不同,音频来源于电脑音频捕获设备。从音频设备获取的数据不能直接使用,需要进行解码然后再进行重采样,最终得到编码器需要的数据格式。具体的代码如下,为了减少代码量,例子中没有对函数返回值进行判断。可以先熟悉整体的流程,实际运用时再根据需要进行添加。

2024-05-20 22:31:26 208

原创 FFMPEG封装摄像头采集的图像数据到MP4文件

使用FFMPEG封装摄像头采集的图像数据到MP4文件

2024-05-08 17:58:10 522

原创 使用FFMPEG封装YUV数据

未经过编码处理的yuv数据直接存储将占用大量的磁盘空间,而且需要记录像素格式、分辨率等额为信息,一般的播放器也不支持直接打开。典型的多媒体容器格式如FLV、MP4、AVI和RMVB等,容器可以包含不同的类型的音视频流或者字幕流,以及正常播放所需要的同步信息。我以为是比特率不同导致,于是将命令行和代码输出的文件比特率都设置成一样,但是最终代码输出的视频帧率还是不为整数。两种方式输出的mp4文件有些许差异,代码输出的mp4文件帧率为25.11,比特率也比命令行输出的要高。关于这个帧率的问题目前还没查找到原因。

2024-04-21 21:58:28 303

原创 使用FFMPEG对PCM数据重采样

上面的命令可以将样点格式为AV_SAMPLE_S16,采样率48000Hz的双通道PCM数据,转换为样点格式为AV_SAMPLE_S16,采样率44100Hz的双通道PCM数据,参数可根据实际情况进行调整。使用两种方式转换出来的PCM文件大小应该一致,否则应该检查代码是否有误。

2024-04-18 21:27:30 173

原创 二叉树的遍历

多种方式遍历二叉树 遍历二叉树最简单的是使用递归,如果使用栈也不是很难,不过许久没用都忘记的差不多了。花了一些时间做了整理,方便以后查阅,也希望有人能用到。typedef struct TreeNode{ char data; struct TreeNode* left; struct TreeNode* right;}BiTree,*PBiTree;typed

2017-09-18 23:05:03 310

原创 有序链表合并

有序链表合并: LA、LB是两个带头结点的有序链表,归并两个链表得到新的有序表LC。设立指针pa,pb,pc,其中pa和pb分别指向LA,LB中当前待比较的结点,pc指向LC表中当前最后一个结点。将pa,pb结点中值较小的一个链接到pc之后。typedef struct Node{ int data; struct Node* next;}Node,*PLink;//销

2017-09-17 15:06:19 349

原创 约瑟夫环

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。//利用数组 int josephu(int n,int m) { int *arr; arr = new int[n];

2017-09-16 17:17:03 142

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除