FFMPEG
文章平均质量分 81
雷霄骅
这个作者很懒,什么都没留下…
展开
-
C语言的面向对象设计 —— 对 X264/FFMPEG 架构探讨
类似题目的文章已经不新鲜了,这里,我仅仅总结自己的一些代码经验,结合两款在视频开发领域比较常用的开源软件探讨C语言的应用问题。1.为什么要用C语言曾几何时,我也不熟悉C,最早接触C的是在大学四年级,当时已经学过pascal,过二级也是pascal。接着走上了Delphi的路,多方便的软件,写写画画,程序就出来了,本科的毕业设计就是这样出来的MIS,在当时还很时髦的花哨了一阵,弄了个优秀论文转载 2013-10-14 23:49:42 · 11832 阅读 · 0 评论 -
FFmpeg架构之I/O模块分析
注意:这篇转载的文章比较早,写得很清晰,但是新版的ffmpeg的很多数据结构的名字已经改了。因此只能作参考。1概述ffmpeg项目的数据IO部分主要是在libavformat库中实现,某些对于内存的操作部分在libavutil库中。数据IO是基于文件格式(Format)以及文件传输协议(Protocol)的,与具体的编解码标准无关。 ffmpeg工程转码时数据IO层次关转载 2013-10-16 16:10:04 · 14430 阅读 · 1 评论 -
windows 下使用 MinGW + msys 编译 ffmpeg
本文参考了网络上的不少文章,但由于版本环境的问题参考文章并不能直接指导编译,本文吸收多方经验,并在自己多次编译实验的基础上写成,欢迎转载,请注名出处。 FFmpeg是在Linux平台下开发的,但它同样可以在其它操作系统环境中编译运行,本文介绍的就是在windows下编译FFmpeg。一 编译准备 您最好新建一个目录专门用来保存以下下载的文件。1 下载 MinGW 和 M转载 2013-10-16 19:24:35 · 14186 阅读 · 20 评论 -
FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
FFMPEG中的swscale提供了视频原始数据(YUV420,YUV422,YUV444,RGB24...)之间的转换,分辨率变换等操作,使用起来十分方便,在这里记录一下它的用法。swscale主要用于在2个AVFrame之间进行转换。下面来看一个视频解码的简单例子,这个程序完成了对"北京移动开发者大会茶歇视频2.flv"(其实就是优酷上的一个普通视频)的解码工作,并将解码后的数据保存为原始数据文件(例如YUV420,YUV422,RGB24等等)。其中略去了很多的代码。注:完整代码在文章:100原创 2013-11-06 15:37:09 · 124621 阅读 · 70 评论 -
在FFMPEG中使用libRTMP的经验
FFMPEG在编译的时候可以选择支持RTMP的类库libRTMP。这样ffmpeg就可以支持rtmp://, rtmpt://, rtmpe://, rtmpte://,以及 rtmps://协议了。但是如何使用ffmpeg支持RTMP协议还是有一定的学问的。本文总结一下部分经验。ffmpeg接受一个字符串的输入方式,比如:“rtmp://xxxx live=1 playpath=xxx ...”这种的输入形式,即第一个字符串是rtmp的url,然后加一个空格,然后再附加一些参数。附加的参数的格式形如“p原创 2013-11-06 17:48:30 · 25788 阅读 · 5 评论 -
FFMPEG类库打开流媒体的方法(需要传参数的时候)
使用ffmpeg类库进行开发的时候,打开流媒体(或本地文件)的函数是avformat_open_input()。其中打开网络流的话,前面要加上函数avformat_network_init()。一般情况下,只要传入流媒体的url就可以了。但是在打开某些流媒体的时候,可能需要附加一些参数。例如在播放中央人民广播电台的声音信号的时候,其url为“rtsp://mms.cnr.cn/cnr003?MzE5MTg0IzEjIzI5NjgwOQ==”如果直接进行打开是不会成功的,我们可以使用ffplay做一下原创 2013-11-06 20:07:23 · 41688 阅读 · 10 评论 -
FFMPEG结构体分析:AVCodecContext
FFMPEG有几个最重要的结构体,包含了解协议,解封装,解码操作,此前已经进行过分析:FFMPEG中最关键的结构体之间的关系在此不再详述,其中AVCodecContext是包含变量较多的结构体(感觉差不多是变量最多的结构体)。本文将会大概分析一下该结构体里每个变量的含义和作用。因为如果每个变量都分析的话,工作量太大,实在来不及。首先看一下结构体的定义(位于avcodec.h):原创 2013-11-08 00:49:27 · 90742 阅读 · 15 评论 -
FFMPEG结构体分析:AVIOContext
FFMPEG有几个最重要的结构体,包含了解协议,解封装,解码操作,此前已经进行过分析:FFMPEG中最关键的结构体之间的关系在此不再详述,其中AVIOContext是FFMPEG管理输入输出数据的结构体。本文将会详细分析一下该结构体里每个变量的含义和作用。首先看一下结构体的定义(位于avio.h):原创 2013-11-08 23:52:17 · 43462 阅读 · 8 评论 -
FFMPEG结构体分析:AVCodec
FFMPEG有几个最重要的结构体,包含了解协议,解封装,解码操作,此前已经进行过分析:FFMPEG中最关键的结构体之间的关系在此不再详述,其中AVCodec是存储编解码器信息的结构体。本文将会详细分析一下该结构体里每个变量的含义和作用。首先看一下结构体的定义(位于avcodec.h文件中):原创 2013-11-09 00:17:28 · 58670 阅读 · 11 评论 -
FFMPEG结构体分析:AVStream
FFMPEG有几个最重要的结构体,包含了解协议,解封装,解码操作,此前已经进行过分析:FFMPEG中最关键的结构体之间的关系在此不再详述,其中AVStream是存储每一个视频/音频流信息的结构体。本文将会分析一下该结构体里重要变量的含义和作用。首先看一下结构体的定义(位于avformat.h文件中):原创 2013-11-10 00:02:04 · 60423 阅读 · 5 评论 -
FFMPEG结构体分析:AVPacket
FFMPEG有几个最重要的结构体,包含了解协议,解封装,解码操作,此前已经进行过分析:FFMPEG中最关键的结构体之间的关系在此不再详述,其中AVPacket是存储压缩编码数据相关信息的结构体。本文将会详细分析一下该结构体里重要变量的含义和作用。首先看一下结构体的定义(位于avcodec.h文件中):原创 2013-11-10 00:38:47 · 84514 阅读 · 14 评论 -
ffplay的快捷键以及选项
ffplay是ffmpeg工程中提供的播放器,功能相当的强大,凡是ffmpeg支持的视音频格式它基本上都支持。甚至连VLC不支持的一些流媒体都可以播放(比如说RTMP),但是它的缺点是其不是图形化界面的,必须通过键盘来操作。因此本文介绍一下它的快捷键以及选项。 快捷键 播放视音频文件的时候,可以通过下列按键控制视音频的播放按键作用q,原创 2013-11-11 00:03:44 · 49294 阅读 · 8 评论 -
各种视频编码器的命令行格式
各种编码器命令行工具的简单使用方式第一行是编码,第二行是解码注意: 输入为YUV420P序列分辨率:1920x1080P帧率:25HEVC://编码器自动输出重建文件TappEncoder -c encoder_lowdelay_P_main.cfg -i src01_1920x1080.yuv -wdt 1920 -hgt 1080 -b src01_1920x1原创 2013-09-15 12:31:56 · 20249 阅读 · 0 评论 -
ffmpeg函数介绍
本文对在使用ffmpeg进行音视频编解码时使用到的一些函数做一个简单介绍,我当前使用的ffmpeg版本为:0.8.5,因为本人发现在不同的版本中,有些函数名称会有点小改动,所以在此有必要说明下ffmpeg的版本号。ffmpeg本人也是刚接触,本文将采用累加的方法逐个介绍我使用到的函数,如有不妥之处,还望谅解! 头文件引入方法:extern "C" {#include转载 2013-09-24 16:01:44 · 52630 阅读 · 26 评论 -
FFplay源代码分析:整体流程图
FFplay源代码的流程图如图所示,网上的,不记得从哪弄的了,但是流程很清晰。看完FFplay源代码之后再看这个图感觉整个代码结构一目了然。转载 2013-09-24 16:22:40 · 57203 阅读 · 25 评论 -
vc2005编译ffmpeg以及ffplay
编译过程:1 http://ffmpeg.zeranoe.com/builds/ 下载官方提供的源码,win32库和dll。2 新建vc2005 console空工程,把ffmpeg.h,ffmpeg.c,cmdutils.c,cmdutils.h,cmdutils_common_opts.h,ffmpeg_filter.c,ffmpeg_opt.c加到工程。3 http://转载 2013-09-25 21:35:02 · 9169 阅读 · 0 评论 -
FFMPEG列出DirectShow支持的设备
FFMPEG列出dshow支持的设备: ffmpeg -list_devices true -f dshow -idummy举例:采集摄像头和麦克风ffmpeg -f dshow -i video="Camera":audio="Microphone"(摄像头名称是Camera,麦克风名称是Microphone) 比如说,在我的笔记本上采集10秒的视频,并且使用x264转载 2013-11-22 13:13:38 · 14885 阅读 · 2 评论 -
使用FFmpeg类库实现YUV视频序列编码为视频
搞视频处理的朋友肯定比较熟悉YUV视频序列,很多测试库提供的视频数据都是YUV视频序列,我们这里就用用YUV视频序列来做视频。关于YUV视频序列,我就不多讲了,可以看书学习,通常的视频序列都是YUV420格式的。步骤也就那几步,添加视频流,打开编码器,开辟相应的内存空间,然后就可以打开YUV序列逐帧写入数据了,so easy!记得最后要做好文件的关闭和内存的释放,因为FFmpeg是c风格的转载 2013-09-22 01:36:13 · 28747 阅读 · 21 评论 -
使用批处理脚本(BAT)调用FFMPEG批量编码视频
使用批处理脚本(BAT)编码视频非常方便,尤其当视频序列非常多的时候,更是省了不少简单重复性劳动。只要学会批处理里面几个基本的命令就行了,感觉和c/c++差不多。set:设置变量(注意:变量一般情况下是字符串,而不是整形或者其他类型)%变量名%:可以取到变量的值传上来一个做实验的批处理脚本做示范(其中调用了ffmpeg和x264):@echo off@rem 使用此脚本生原创 2013-09-25 22:02:24 · 18354 阅读 · 0 评论 -
FFMPEG 库移植到 VC 需要的步骤
在VC下使用FFMPEG编译好的库,不仅仅是把.h,.lib,.dll拷贝到工程中就行了,还需要做以下几步。(此方法适用于自己使用MinGW编译的库,也同样适用于从网上下载的编译好的库,例如http://ffmpeg.zeranoe.com/builds/)。(1)像其他额外库一样,设置VC的Include路径为你c:\msys\local\include,设置VClib路径为次c:\msys转载 2013-10-15 12:27:19 · 35346 阅读 · 27 评论 -
ffmpeg参数中文详细解释
a) 通用选项-L license-h 帮助-fromats 显示可用的格式,编解码的,协议的...-f fmt 强迫采用格式fmt-I filename 输入文件-y 覆盖输出文件-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持转载 2013-10-15 18:57:50 · 198272 阅读 · 19 评论 -
C89 和 C99 标准比较
注1: GCC支持C99, 通过 --std=c99 命令行参数开启,如:代码:gcc --std=c99 test.c 注2: FFMPEG使用的是C99。而VC支持的是C89。因此VC一般情况下是无法编译FFMPEG。---------------------------------------------------------------------------转载 2013-10-16 16:34:39 · 21768 阅读 · 0 评论 -
FFmpeg 2.1 试用(新版支持HEVC,VP9)
前两天帮一位老师转码图像的时候,无意间发现新版FFmpeg 2.1竟然支持了下一代编码标准HEVC,以及Google提出的下一代编码标准VP9。真心没想到FFmpeg对下一代的编码标准支持的是如此之快。我还以为这两种编码标准还要在实验室呆上1年呢。看来这两种编码标准离大规模应用已经不远了。下面是其更新列表,红色部分为其新增加的HEVC和VP9的支持: - aecho filter- p原创 2013-11-01 12:37:19 · 19467 阅读 · 25 评论 -
avcodec_decode_video2()解码视频后丢帧的问题解决
使用libav转码视频时发现一个问题:使用下面这段代码解码视频时,视频尾巴上会丢掉几帧。while(av_read_frame(ifmt_ctx,&packet) >= 0){ ret = avcodec_decode_video2(video_dec_ctx, vframe, &got_frame, &packet); if (got_frame) { pac转载 2014-02-09 20:50:06 · 23568 阅读 · 3 评论 -
方便使用FFMPEG的经验
FFMPEG是命令行工具,因此使用起来多少还是会有些不方便。在这记录两点方便使用FFMPEG的方法:1.任何目录下都可以使用FFMPEG问题描述:需要转码(播放)的时候,需要把ffmpeg.exe(ffplay.exe)拷贝到转码视频目录中。解决方法:在系统环境变量的path中添加FFMPEG可执行程序的的目录。例如FFMPEG位于D:\ffmpeg\bin中。右键“我的电原创 2014-02-13 00:29:06 · 16899 阅读 · 5 评论 -
XBMC源代码简析 5:视频播放器(dvdplayer)-解复用器(以ffmpeg为例)
本文我们分析XBMC中视频播放器(dvdplayer)中的解复用器部分。由于解复用器种类很多,不可能一一分析,因此以ffmpeg解复用器为例进行分析。XBMC解复用器部分文件目录如下图所示:原创 2014-01-08 00:03:28 · 8678 阅读 · 5 评论 -
XBMC源代码分析 4:视频播放器(dvdplayer)-解码器(以ffmpeg为例)
XBMC分析系列文章:XBMC源代码分析 1:整体结构以及编译方法XBMC源代码分析 2:Addons(皮肤Skin)XBMC源代码分析 3:核心部分(core)-综述本文我们分析XBMC中视频播放器(dvdplayer)中的解码器部分。由于解码器种类很多,不可能一一分析,因此以ffmpeg解码器为例进行分析。XBMC解码器部分文件目录如下图所示:原创 2014-01-07 00:03:53 · 12744 阅读 · 3 评论 -
XBMC源代码分析 6:视频播放器(dvdplayer)-文件头(以ffmpeg为例)
本文我们分析XBMC中视频播放器(dvdplayer)中的文件头部分。文件头部分里包含的是封装Dll用到的头文件。由于文件头种类很多,不可能一一分析,因此还是以ffmpeg文件头为例进行分析。XBMC中文件头部分文件目录结构如下图所示。原创 2014-01-09 00:28:26 · 8881 阅读 · 8 评论 -
ffmbc——为广播电视以及专业用途量身定制的FFmpeg
无意中发现了个为广播电视以及专业用途量身定制的FFmpeg。也是开源的,记录之。ffmbc 全称是 FFMedia Broadcast,是个改版的FFmpeg,有如下功能:创建可以导入Final Cut Pro, AVID Media Composer, Adobe Premiere中的文件创建 XDCAM HD422 文件(.mov 或 .mxf)创建 XDCAM IMX原创 2014-02-16 00:28:54 · 17944 阅读 · 3 评论 -
ffmpeg处理RTMP流媒体的命令大全
最近浏览国外网站时候发现,翻译不准确的敬请谅解。1、将文件当做直播送至liveffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName2、将直播媒体保存至本地文件ffmpeg -i rtmp://server/live/streamName -c copy dump.flv3、将其中一个转载 2013-09-25 21:23:55 · 72309 阅读 · 24 评论 -
ffmpeg中的sws_scale算法性能测试
经常用到ffmpeg中的sws_scale来进行图像缩放和格式转换,该函数可以使用各种不同算法来对图像进行处理。以前一直很懒,懒得测试和甄别应该使用哪种算法,最近的工作时间,很多时候需要等待别人。忙里偷闲,对ffmpeg的这一组函数进行了一下封装,顺便测试了一下各种算法。简单说一下测试环境,我使用的是Dell的品牌机,i5的CPU。ffmpeg是2010年8月左右的当时最新版本编译而成,我使用转载 2013-09-25 21:18:41 · 31856 阅读 · 5 评论 -
ffplay for mfc 代码备忘
之前上传了一个开源播放器工程ffplay for mfc。它将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下,并且使用MFC做了一套界面。它可以完成一个播放器播放视频的基本流程:解协议,解封装,视频/音频解码,视音频同步,视音频输出。此外还包含一些控制功能:播放,暂停/继续,前进,后退,停止,逐帧播放,全屏等;以及一些码流分析功能:视频解码分析和音频解码分析。详细的原创 2014-07-10 00:49:22 · 16643 阅读 · 7 评论 -
FFMPEG源码分析:avformat_open_input()(媒体打开函数)
avformat_open_input[cpp] view plaincopy//参数ps包含一切媒体相关的上下文结构,有它就有了一切,本函数如果打开媒体成功, //会返回一个AVFormatContext的实例. //参数filename是媒体文件名或URL. //参数fmt是要打开的媒体格式的操作结构,因为是读,所以是inp转载 2013-09-22 02:11:02 · 26978 阅读 · 2 评论 -
ffmpeg源码分析:transcode()函数
还是先看一下主函数吧:(省略了很多无关大雅的代码)[cpp] view plaincopyint main(int argc, char **argv) { OptionsContext o = { 0 }; int64_t ti; //与命令行分析有关的结构的初始化,下面不再罗嗦转载 2013-09-20 17:34:05 · 9560 阅读 · 2 评论 -
ffmpeg源码分析:transcode_init()函数
transcode_init()函数是在转换前做准备工作的.此处看一下它的真面目,不废话,看注释吧:[cpp] view plaincopy//为转换过程做准备 static int transcode_init(OutputFile *output_files, int nb_output_files,转载 2013-09-20 17:36:06 · 8570 阅读 · 1 评论 -
ffmpeg 从内存中读取数据(或将数据输出到内存)
ffmpeg一般情况下支持打开一个本地文件,例如“C:\test.avi”或者是一个流媒体协议的URL,例如“rtmp://222.31.64.208/vod/test.flv”其打开文件的函数是avformat_open_input(),直接将文件路径或者流媒体URL的字符串传递给该函数就可以了。但其是否支持从内存中读取数据呢?这个问题困扰了我很长时间。当时在做项目的时候,通过Winpcap抓取网络上的RTP包,打算直接送给ffmpeg进行解码。一直没能找到合适的方法。因为抓取的数据包是存在内存中的原创 2013-10-24 00:03:25 · 65280 阅读 · 89 评论 -
FFmpeg获取DirectShow设备数据(摄像头,录屏)
这两天研究了FFmpeg获取DirectShow设备数据的方法,在此简单记录一下以作备忘。1. 列设备 ffmpeg -list_devices true -f dshow -i dummy命令执行后输出的结果如下(注:中文的设备会出现乱码的情况):我自己的机器上列出了以下设备:[dshow @0388f5e0] DirectShow video devices[dshow @0388原创 2014-08-02 00:57:27 · 139875 阅读 · 104 评论 -
使用FFMPEG类库分离出多媒体文件中的H.264码流
在使用FFMPEG的类库进行编程的过程中,可以直接输出解复用之后的的视频数据码流。只需要在每次调用av_read_frame()之后将得到的视频的AVPacket存为本地文件即可。经试验,在分离MPEG2码流的时候,直接存储AVPacket即可。在分离H.264码流的时候,直接存储AVPacket后的文件可能是不能播放的。如果视音频复用格式是TS(MPEG2 Transpo原创 2013-09-18 11:15:37 · 42319 阅读 · 46 评论 -
最简单的基于FFMPEG的转码程序
本文介绍一个简单的基于FFmpeg的转码器。转码器在视音频编解码处理的程序中,属于一个比较复杂的东西。因为它结合了视频的解码和编码。一个视频播放器,一般只包含解码功能;一个视频编码工具,一般只包含编码功能;而一个视频转码器,则需要先对视频进行解码,然后再对视频进行编码,因而相当于解码器和编码器的结合。下图例举了一个视频的转码流程。输入视频的封装格式是FLV,视频编码标准是H.264,音频编码标准是原创 2014-05-25 00:01:33 · 93477 阅读 · 95 评论 -
使用FFMPEG类库分离出多媒体文件中的音频码流
在使用FFMPEG的类库进行编程的过程中,可以直接输出解复用之后的的音频数据码流。只需要在每次调用av_read_frame()之后将得到的视频的AVPacket存为本地文件即可。经试验,在分离MP3码流的时候,直接存储AVPacket即可。在分离AAC码流的时候,直接存储AVPacket后的文件可能是不能播放的。如果视音频复用格式是TS(MPEG2 Transport S原创 2013-09-18 11:13:11 · 11426 阅读 · 6 评论