![](https://img-blog.csdnimg.cn/20191110133230541.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
FFmpeg
文章平均质量分 58
FFmpeg从入门到精通
幽迷狂
我以我血荐轩辕 有问题可以发邮件:1768478912@qq.com
展开
-
FFmpeg5开发入门教程18:解码内存数据并播放
上一篇介绍解码MP3文件,然后使用Qt播放。本文介绍一个从内存中获取MP3数据,然后解码播放。为什么要从数据库获取数据呢?因为我的应用场景就是音频数据保存在数据库中。原创 2022-08-08 17:01:20 · 1160 阅读 · 0 评论 -
FFmpeg5开发入门教程17:软件解码音频并使用QAudioOutput播放
上一篇的介绍了解码音频并将数据格式由float变为signedint(双声道、16位数据、44100Hz、小端数据这些保持不变),然后将数据保持为PCM文件,并使用ffplay播放测试。本篇使用Qt的QAudioOutput类来播放解码后的数据,省略了保存为文件然后使用别的程序播放这个过程。...原创 2022-08-01 09:39:47 · 806 阅读 · 1 评论 -
FFmpeg5开发入门教程16:音频重采样解码为pcm
44100Hz就是音频的采样数,一段连续音频编码时包含多个数据包,一个数据包里面有连续数据,编码时会丢掉部分。比如说1秒的原始音频,44100Hz的意思就是我在这1秒的音频里面取44100个点,其他的数据丢掉。那么重采样最好的方法就是向下重采样,44100->40000,向上重采样时原始数据已经丢掉肯定会出现噪音。还是上一篇使用的音频文件,本篇主要是修改解码后的一些参数,比如数据格式等等。也可以使用ffmpeg软件命令来将MP3文件解码为pcm文件。解码后的音频大小为42.4MB。......原创 2022-07-25 20:39:55 · 1041 阅读 · 0 评论 -
FFmpeg5入门教程15:mp3音频解码为pcm
这行信息,格式为mp3,采样率为44.1kHz,stereo立体声(即双声道),fltp表示数据格式为浮点型(float)。ar为audiorate,ac为audiochannel,f32le为float32位小端数据格式。本系列的之前文章介绍了视频的编解码相关,接下来介绍音频的编解码,本文将mp3音频文件解码为pcm。使用的mp3音频文件为从网易云音乐上下载的排骨教主的牵丝戏,文件大小为9.6MB。和解码视频的部分类似。解码结果为84.5MB。的基本流程是一样的。...原创 2022-07-19 21:39:30 · 1696 阅读 · 0 评论 -
FFmpeg4入门14:Linux下摄像头捕获并编码为h264
上一篇是将H264流封装到MP4容器中,本篇介绍一个最常用的捕获原始数据的方法:从摄像头获取数据。因为本人已经放弃windows操作系统,所以使用linux来获取摄像头并编码为H264文件保存。linux下使用video4linux2作为设备来定义统一的接口,先看一下摄像头数据信息:摄像头原始数据为YVYU422格式,而我们一般使用的是YUV420P。所以我们编码之前需要将其解码为YUV420P(当然也可以不解码,因为视频播放的时候也会解码,这里只是为了入门教学)。那么步骤就是读取摄像头YUYV422数据原创 2022-07-11 09:26:01 · 1994 阅读 · 1 评论 -
FFmpeg4入门13:h264编码为mp4
上一篇将yuv源视频文件编码为的由libx264实现压缩的文件,将源文件从55M编码为620KB,但是h264文件只有视频数据,而且使用范围不太广。那么就需要进一步的封装,在此选用最常用的mp4格式为例。随便选一个mp4格式文件,用FFmpeg4入门4:解析视频并输出视频信息或者ffprobe查看一下数据。迈克尔杰克逊的,输出如下:有两条流,一条h264的视频流,一条aac的音频流。现在我们有h264的流,创建一个mp4文件,新建一条流并将h264流插入进去。(暂时没有音频部分)转换流程图为:可以看到和原创 2022-07-04 09:00:44 · 4027 阅读 · 4 评论 -
FFmpeg4入门12:yuv编码为h264
1080p画质的视频帧有1920 * 1080=2073600个像素点,每个像素点为3通道,每个通道每个像素点为8位。那么,一张图片为1920 * 1080 * 3 * 8bit=4976400bit=6220800B=6075KB=6MB。那么一个普通三通道1080P的30帧的1秒的视频尺寸为:6 * 30 * 1=180M。这个大小对于本地存储和网络传输都是一个考验,为了减少传输带宽、减小存储空间,就需要将视频压缩。这个压缩的过程叫编码。常用的是H264编码。h264编码器编码完成的文件格式为,与音频文原创 2022-06-27 10:08:54 · 1110 阅读 · 1 评论 -
FFmpeg4入门11:CUDA硬解并使用Qt播放视频(YUV420SP转RGB32)
之前几篇文章介绍了使用CPU+FFmpeg解码视频并显示在QWidget/QML/QOpenGL上,本文介绍FFmpeg使用硬件解码,主要是使用CUDA。首先看一下解码流程,主要流程和CPU解码差不多。硬解解码包括CUDA/QSV/DRM/VAAPI/VDPAU等等,CUDA很好理解,你主要装了NVIDIA显卡就可以使用;QSV是Intel CPU自带的解码器,但是现在大部分CPU不带QSV支持(便宜),而且配置也不方便,所以就忽略了。那么就先选一个:查找名为CUDA的硬件设备,如果没有找到,就输出当前使原创 2022-06-20 17:31:44 · 1074 阅读 · 3 评论 -
FFmpeg4入门10:软解并使用QML播放视频(YUV420P转OpenGL)
QML显示视频无法用之前的方法实现,我结果多次尝试过后终于找到了可以使用的方法。解码流程图为:解码函数调用流程图为:流程架构如下图:分为三个部分主要流程和之前的一样,只是少了格式转换和多了数据填充部分,关键代码如下:主要是将解码后的YUV(YUV420P)数据复制到指定的结构体中,并排入缓冲队列中。QML显示部分此部分需要两个类VideoItem、VideoFboItem,VideoItem是QML调用的接口,而VideoFboItem是由VideoItem自动调用。render/createFra原创 2022-06-13 09:29:13 · 1012 阅读 · 3 评论 -
FFmpeg4入门09:软解并使用QOpenGL播放视频(YUV420P)
我在开发过程中Qt用的比较大,所以本系列主要界面由Qt开发。而Qt主要的特性是跨平台,在嵌入式平台中,主要使用QML进行界面开发,如果使用QML开发视频的话,就需要用到OpenGL了。本篇主要介绍常用的桌面版的QOpenGL的视频显示,桌面版解码的YUV数据格式为YUV420P,下一篇介绍QML版的视频显示,也是YUV420P格式的。解码流程图为:解码函数调用流程图为:显示流程为:解码显示流程:共分为三个部分。这个就比较简单,前面几篇文章一直在说这个,FFmpeg默认软解输出格式为YUV420P。这里需要注原创 2022-06-07 11:07:02 · 1481 阅读 · 0 评论 -
FFmpeg4入门08:软解并使用QWidget播放视频(YUV420P转RGB32)
前两篇介绍了视频帧解码和帧数据解码保存,都是不够实时和直观,本篇介绍使用Qt作为界面来显示解码后的数据。使用ffmpeg解码视频每一帧,因为比较耗时,所以独立一个线程。解码完成后的数据发送给界面,界面渲染显示图像数据,界面显示一个线程。解码流程和之前一样。解码流程图为:函数调用流程图为:视频显示流程图为:解码显示流程如下:解码部分解码部分和之前的一样,不过需要调整一下。像初始化变量、打开文件、分配解码器上下文、打开解码器等等,这些操作只需要一次,并且耗时很短,不需要放在独立线程里面原创 2022-05-30 15:11:15 · 1011 阅读 · 0 评论 -
FFmpeg4入门07:解码视频并保存为YUV格式文件
上一篇我们解码并保存了其中的几帧确保解码过程和结果是对的。本篇我们将解码整个视频并保存为标准的YUV格式(YUV格式具体信息详见YUV格式介绍),我们就选YUV420P(I420)作为输出格式。保存文件需要对本地文件进行读写操作,那么首先要有文件操作指针,C为FILE,C++为iostream。以C为例。FILE *fp = fopen("result.yuv","w+b");扩展名任意,只要数据格式对就可以了,最好是把数据格式标识出来,比如:1280x720_yuv420p.yuv。与上一篇文原创 2022-05-23 14:47:09 · 1971 阅读 · 0 评论 -
FFmpeg4入门06:保存视频帧
上一篇介绍了解码的基本流程,获取了视频帧数,但是没有视频每一帧数据的解码操作。我们从视频中取出每一帧进行操作,我们已经分配了AVFrame内存,当我们转换它颜色空间时仍然需要一个位置来放置原始数据。我们使用av_image_get_buffer_size来获得我们需要的大小,并手动分配空间://一帧图像数据大小int numBytes = av_image_get_buffer_size(AV_PIX_FMT_RGB32, codecCtx->width, codecCtx->height原创 2022-05-16 15:49:01 · 1802 阅读 · 3 评论 -
FFmpeg4入门05:解码视频流过程
FFmpeg使用较多的就是解码视频了,我们先进行正常的解码流程,下一篇我们将解码视频前5帧并保存为图片。解码流程图为:函数调用流程图为:测试代码如下:#include <stdio.h>#include <stdlib.h>#include "libavcodec/avcodec.h"#include "libavfilter/avfilter.h"#include "libavformat/avformat.h"#include "libavutil/avut原创 2022-05-11 15:12:06 · 1183 阅读 · 0 评论 -
FFmpeg4入门04:输出视频信息
解析视频并输出视频信息,步骤为:测试代码:AVFormatContext *fmt_ctx = avformat_alloc_context();//创建对象并初始化int ret=0;char* fileName="/home/jackey/Videos/Sample.mkv";//文件地址do{ //打开文件 if ((ret = avformat_open_input(&fmt_ctx, fileName, NULL, NULL))<0) break;//C原创 2022-05-09 12:54:12 · 764 阅读 · 0 评论 -
FFmpeg4入门03:输出版本号
新建一个Qt纯C/C++项目.按照FFmpeg4入门0:准备添加头文件和配置文件。在main()中添加:unsigned codecVer = avcodec_version();printf("FFmpeg version is: %s, avcodec version is: %d\n.",FFMPEG_VERSION,codecVer);return 0;//编译器要求必须有返回值编译运行,输出为:FFmpeg version is: 4.2.2, avcodec version is:原创 2022-05-07 12:58:49 · 1459 阅读 · 0 评论 -
FFmpeg4入门02:开发组件
基本组件FFmpeg基本组件包括:可执行文件ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;ffsever:一个 HTTP 多媒体即时广播串流服务器;(4.x版本中已经没有了)ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示;ffprobe:是一个多媒体流分析工具。它从多媒体流中收集信息,并且以人类和机器可读的形式打印出来。它可以用来检测多媒体流的容器类型,以及每一个多媒体流的格式和类型。它可以作为一个独立的应用来使用,也可以结合文本过原创 2022-05-01 14:15:34 · 399 阅读 · 0 评论 -
FFmpeg4入门01:编译
个性化开发FFmpeg需要会从源码开始编译出自己需要的库文件,后续进行源码级优化时也方便进行。FFmpeg官方代码下载地址:FFmpeg-githubgit克隆源码:git clone https://github.com/FFmpeg/FFmpeg码云下载地址(码云每天从官方仓库同步一次):FFmpeg-gitee下载好源码后,就可以编译了。Linux下使用的是GCC编译器和make工具,并且FFmpeg没有提供cmake编译文件,所以我们只能用configure来生成Makefile文件,然原创 2022-05-01 11:05:08 · 421 阅读 · 0 评论 -
FFmpeg4入门00:准备
FFmpeg开发需要完整(不完整也行)的C/C++知识。软件配置:我的操作系统是Manjaro Linux,所有的软件直接从Manjaro软件仓库中安装,保持更新。Makefile如果是纯C/C++开发的话,使用Makefile或者CMake编译。模板Makefile文件:无CMake如果使用cmake编译的话:无Qt配置如果使用Qt开发(我用的就是Qt),在*.pro文件中添加:unix{ #FFmpeg部分 INCLUDEPATH+=/usr/include原创 2022-04-27 15:54:39 · 441 阅读 · 0 评论 -
/usr/include/pthread.h:775: error: ‘clockid_t’ has not been declared
今天学FFmpeg开发,第一项目就出现问题。按照一般的操作,在*.pro文件中添加头文件,库文件。unix{INCLUDEPATH += /usr/include LIBS += -L/usr/lib \ -lavcodec -lavdevice -lavfilter -lavformat \ -lavutil -lpostproc -lswres...原创 2019-11-10 20:47:21 · 1004 阅读 · 0 评论