
ffmpeg学习笔记
ffmpeg从0开始的学习笔记
dancing_night
不积跬步无以至千里,qq联系方式:821486004
展开
-
osg+ffmpeg播放视频
1、概述原理很简单,ffmpeg负责解码,然后把解码的图像当做纹理贴到osg创建的场景中去,看代码。2、代码#include <osg/Billboard>#include <osg/Texture2D>#include <osgDB/ReadFile>#include <osgViewer/Viewer>#include &l...原创 2020-04-03 17:06:08 · 1342 阅读 · 0 评论 -
ffmpeg学习笔记目录
1、命令使用最开始看一下ffmpeg命令的中文解释,然后ffmpeg的基本用法,日常命令使用中最多的ffmpeg调用x264编码、mpeg4中的deblocking的用法,x264中输出值含义,x264编码之码率控制,x264参数介绍之一,x264参数介绍之二。2、编译ffmpegwin7用mingw+msys编译ffmpeg编译中遇到的文题解决各个组件下载地址,及编译方法,问原创 2015-06-19 10:05:19 · 4387 阅读 · 2 评论 -
ffmpeg实现录屏+录音
1、概述最简单的基于FFmpeg的AVDevice例子(屏幕录制+声音采集),视频采用mpeg4编码,音频采用aac编码,并生成mp4文件,其中fifo是此程序的关键,此程序只是一个demo很多优化都没做,仅供参考。2、代码/** *最简单的基于FFmpeg的AVDevice例子(屏幕录制+声音采集),视频采用mpeg4编码,音频采用aac编码,并生成mp4文件 *缪国凯 MK原创 2015-06-30 18:13:13 · 33834 阅读 · 32 评论 -
用ffmpeg实现录音
1、概述2、代码/**最简单的录音程序*缪国凯 MK*821486004@qq.com*本程序实现采集麦克风音频数据,压制为aac*2015-6-19*/#include "stdafx.h"#include <windows.h>#include <DShow.h>#include <comutil.h>#pragma co...原创 2015-06-19 15:31:47 · 15020 阅读 · 8 评论 -
最简单ffmpeg解码
1、概述用ffmpeg解码的例子,把解码数据保存为yuv文件。2、代码/* *最简单的FFmpeg的解码器 * *缪国凯 Mickel *821486004@qq.com * *本程序实现了视频解码保存为yuv,写yuv是用文件方式写的,没用到muxer */#include "stdafx.h"#ifdef __cplusplusextern "C"{原创 2015-06-19 11:59:50 · 1730 阅读 · 0 评论 -
ffmpeg中avio_open无法打开中文路径的解决方法
将文件路径转换成为UTF-8编码即可,具体实现如下:int ANSIToUTF8(char* pszCode, char* UTF8code){ WCHAR Unicode[100]={0,}; char utf8[100]={0,}; // read char Lenth int nUnicodeSize = MultiByteToW原创 2014-11-19 16:31:24 · 7545 阅读 · 0 评论 -
利用ffmpeg压缩屏幕图像为avi(录屏、压制)
看了雷神关于ffmpeg方面的文章,结合自己最近做的一个基与cdc抓屏、vfw压制的录屏工具,就想改为采用ffmpeg来压制avi。关于如何用ffmpeg压制视频相信大家都有一些见解,这里写这篇文章最核心的东西是如何把采集的来的LPBITMAPINFOHEADER图像数据转换为ffmpeg所需要的AVFrame数据。核心思想是利用sws_scale把图像从PIX_FMT_RGB32格式转换原创 2015-01-24 16:01:43 · 4769 阅读 · 5 评论 -
分享一段wave降噪处理代码
一段wave波形降噪处理代码。头文件:#pragma oncetypedef signed short Int16; typedef signed int Int32;//body of the "fmt" chunk typedef struct { Int16 FormatTag; Int16 Channels; Int32 SamplesPerSe原创 2015-02-05 17:05:19 · 7372 阅读 · 7 评论 -
avi通过文件读写方式实现剪切、拼接(不经过解码、编码)
本文参考:http://blog.youkuaiyun.com/sunnylion1982/article/details/38376453网上很多视频处理软件在处理avi视频剪切为avi视频的时候,是先解码,在找到需要的帧,然后再压缩编码的,这样效率比较低,因为编码是比较花时间的,在解析avi文件结构时,我发现是否可以把需要的帧直接拷贝文件数据然后根据真实的数据写文件头,以较快的速度剪切avi文件?答案原创 2015-02-06 11:10:13 · 3437 阅读 · 2 评论 -
FFmpeg 基本用法
FFmpegFFmpeg 基本用法本课要解决的问题1.FFmpeg的转码流程是什么?2.常见的视频格式包含哪些内容吗?3.如何把这些内容从视频文件中抽取出来?4.如何从一种格式转换为另一种格式?5.如何放大和缩小视频?6.如何旋转,翻转,填充,裁剪,模糊,锐化视频?7.如何给视频加logo,删除logo?8.如何给视频转载 2015-02-10 15:54:48 · 1642 阅读 · 0 评论 -
MP4文件格式的解析,以及MP4文件的分割算法
MP4文件格式的解析,以及MP4文件的分割算法 mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime。以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心思,主要问题是处理mp4文件庞大的“媒体头”。当然,流媒体点播也可以采用flv格式来做,flv也可以封装H.264视频数据的,不过Adobe却不推荐这么做,人家说毕竟mp4才是H.264最佳转载 2015-03-18 11:05:04 · 886 阅读 · 0 评论 -
windows 下使用 MinGW + msys 编译 ffmpeg
本文参考了网络上的不少文章,但由于版本环境的问题参考文章并不能直接指导编译,本文吸收多方经验,并在自己多次编译实验的基础上写成,欢迎转载,请注名出处。 FFmpeg是在Linux平台下开发的,但它同样可以在其它操作系统环境中编译运行,本文介绍的就是在windows下编译FFmpeg。一 编译准备 您最好新建一个目录专门用来保存以下下载的文件。1 下载 MinGW 和 M转载 2015-03-24 22:19:53 · 2568 阅读 · 0 评论 -
avcodec_decode_video2()解码视频后丢帧的问题解决
使用libav转码视频时发现一个问题:使用下面这段代码解码视频时,视频尾巴上会丢掉几帧。[cpp] view plaincopywhile(av_read_frame(ifmt_ctx,&packet) >= 0){ ret = avcodec_decode_video2(video_dec_ctx, vframe, &got_转载 2015-03-25 09:58:29 · 2693 阅读 · 0 评论 -
ffmpeg 命令中文解释
a) 通用选项-L license-h 帮助-fromats 显示可用的格式,编解码的,协议的...-f fmt 强迫采用格式fmt-I filename 输入文件-y 覆盖输出文件-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持-转载 2015-03-25 10:16:48 · 1160 阅读 · 0 评论 -
win7+MinGW编译ffmpeg遇到的问题总结
1、编译x264的时候老是不通过,用mingw编译最新的x264,./configure 时出现“No working C compiler found”,原因:找不到c编译器。解决办法:首先请确认你的已经正确安装c编译器,其次MinGW\msys\1.0\etc目下的fstab文件,如果不存在fstab,请复制一份fstab.sample,然后改名为:fstab,再修改其内容为:C:/m原创 2015-04-02 13:38:45 · 10709 阅读 · 4 评论 -
x264编码----码率控制
x264是一个 H.264/MPEG4 AVC 编码器,本指南将指导新手如何创建高质量的H.264视频。 对于普通用户通常有两种码率控制模式:crf(Constant Rate Factor)和Two pass ABR。码率控制是一种决定为每一个视频帧分配多少比特数的方法,它将决定文件的大小和质量的分配。 如果你在编译和安装libx264 方面需要帮助,请查看ffmpe转载 2015-04-03 10:56:54 · 5464 阅读 · 0 评论 -
x264输出统计值含义
典型的x264输出(Stats Output)如下:[text] view plaincopyavis [info]: 1280x720 @ 1.77 fps (40997 frames) yuv4mpeg: 640x480@30/1fps, 0:0 x264 [info]: 352x288 (given by file name) @转载 2015-04-03 10:58:41 · 1320 阅读 · 0 评论 -
ffmpeg各个结构详解
typedef struct AVCodec{ const char *name; // 标示Codec 的名字, 比如,"msrle" "truespeech" 等。 enum CodecType type; // 标示Codec 的类型,有Video ,Audio,Data 等类型 enum CodecID id; // 标示Codec 的ID,有CODEC_ID_M SRLE,CODE转载 2015-04-07 11:46:08 · 2086 阅读 · 0 评论 -
Windows下用eclipse+mingw+gdb调试ffmpeg
1、下载eclipse、下载jdk这些就不介绍了,网上很多教程。2、下载mingw+msys并安装请参照http://blog.youkuaiyun.com/dancing_night/article/details/44600143和http://blog.youkuaiyun.com/dancing_night/article/details/44831085,按照上面的教程安装mingw的自带msys和gdb。原创 2015-04-08 22:16:12 · 2362 阅读 · 0 评论 -
ffmpeg编码函数调用结构
这是在eclipse下调试的ffmpeg转码函数调用结构图:编码命令为:-s 480x272 -i C:\Users\Administrator\Desktop\TestVedio\src_480x272.yuv -y C:\Users\Administrator\Desktop\TestVedio\debug.avi。以前学习ffmpeg没有系统化,最近打算以此为切入点,先把整体原创 2015-04-09 11:05:34 · 1066 阅读 · 0 评论 -
eclipse快捷键调试总结
(1)Ctrl+M --切换窗口的大小(2)Ctrl+Q --跳到最后一次的编辑处(3)F2 ---重命名类名 工程名 --当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时Tooltip还会显示即Show Tooltip Description。 F3 --跳到声明或定义的地方。 F5 --单转载 2015-04-09 11:32:48 · 595 阅读 · 0 评论 -
open_input_file函数调用结构图
open_input_file函数调用结构图(有些重复的函数调用就略掉了,大致是按流程往下的)。函数大致说明:AVFormatContext *avformat_alloc_context(void);函数介绍: Allocate an AVFormatContext. avformat_free_context() can be used to free the co原创 2015-04-09 16:42:38 · 1902 阅读 · 0 评论 -
transcode函数调用结构
函数调用结构图:大致函数说明:原创 2015-04-13 16:24:50 · 2308 阅读 · 0 评论 -
mingw下配置pkg-config
编译ffmpeg支持库很多需要pkg-config,折腾大半天终于好了,记录一下,以作备忘。1、下载到http://ftp.acc.umu.se/pub/gnome/binaries/win32/dependencies/下载pkg-config,我下载的是pkg-config_0.26-1_win32.zip 2011-11-23 22:08 31K原创 2015-04-15 14:36:39 · 5226 阅读 · 0 评论 -
mingw编译libxml2
一、简介 Libxml2 是一个xml c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件。它除了支持c语言版以外,还支持c++、PHP、Pascal、Ruby、Tcl等语言的绑定,能在Windows、Linux、Solaris、MacOsX等平台上运行。功能还是相当强大的,相信满足一般用户需求没有任何问题。具体的介绍就参考 http:转载 2015-04-15 15:12:27 · 1510 阅读 · 0 评论 -
ffmpeg安装gme
1、下载http://ffmpeg.zeranoe.com/builds/source/external_libraries/gme-0.6.0.tar.xz下载gme2、下载cmake http://www.cmake.org/download/下载cmake-3.2.2-win32-x86.exe,测试一下cmake,在cmd中输入cmake,看是否有信息打出,如果没有,则需要把c原创 2015-04-17 16:54:57 · 1493 阅读 · 0 评论 -
方便使用ffmpeg命令行工具
FFMPEG是命令行工具,因此使用起来多少还是会有些不方便。在这记录两点方便使用FFMPEG的方法:1.任何目录下都可以使用FFMPEG问题描述:需要转码(播放)的时候,需要把ffmpeg.exe(ffplay.exe)拷贝到转码视频目录中。解决方法:在系统环境变量的path中添加FFMPEG可执行程序的的目录。例如FFMPEG位于D:\ffmpeg\b转载 2015-04-23 10:27:17 · 1786 阅读 · 0 评论 -
常见视频格式介绍
一、常见的编码格式 1、无声时代的 FLC FLC、FLI 是 Autodesk 开发的一种视频格式,仅仅支持 256 色,但支持色彩抖动技术,因 此在很多情况下很真彩视频区别不是很大,不支持音频信号,现在看来这种格式已经毫无用 处,但在没有真彩显卡没有声卡的 DOS 时代确实是最好的也是唯一的选择。最重要的是, Autodesk 的全系列的动画制作软件都提供了对这种格式的支持,转载 2015-04-23 14:58:10 · 4381 阅读 · 0 评论 -
ffmpeg调用libx264编码高级选项
在命令行中输入:ffmpeg -h -encoder=libx264会输出一下信息:Encoder libx264 [libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10]: Threading capabilities: no Supported pixel formats: yuv420p yuvj420p yuv422原创 2015-04-23 17:52:00 · 16608 阅读 · 1 评论 -
How To Use Mpeg4 AVC Deblocking Effectively (Small FAQ)
在http://forum.doom9.org/showthread.php?t=109747 上看到的一篇文章,讲得不错,翻译一下,以作备忘。 原文是: In X264 there are two deblocking parameters, called Deblocking strength and Deblocking threshold. The strength p翻译 2015-04-24 15:23:40 · 900 阅读 · 0 评论 -
x264参数介绍(一、帧类型和码率控制)
预设值预设值是x264在r1177版本增加的一个方便的命令行选项。可以用x264.exe –fullhelp查看所有的命令行帮助。profile默认:无说明:限制输出文件的profile。这个参数将覆盖其它所有值,此选项能保证输出profile兼容的视频流。如果使用了这个选项,将不能进行无损压缩(qp 0 or crf 0)。可选:baseline,main,hig转载 2015-04-24 16:30:37 · 2420 阅读 · 0 评论 -
x264参数介绍(二、分析和视频可用性信息)
分析partitions默认:’p8x8,b8x8,i8x8,i4x4′说明:H.264在压缩前会被切分为16×16大小的宏块。这些块可被进一步切分成更小的块,利用此参数,可以控制不同的帧类型(I、P、B)开启更细的帧切分(8×8、4×4),具体参数如下:I帧:i8x8、i4x4;P帧:p8x8(会同时开启p16x8和p8x16)、p4x4(会同时开启p8x4和p4x8转载 2015-04-24 16:33:43 · 1125 阅读 · 0 评论 -
ffmpeg库移植到vc下需要的步奏
在VC下使用FFMPEG编译好的库,不仅仅是把.h,.lib,.dll拷贝到工程中就行了,还需要做以下几步。(此方法适用于自己使用MinGW编译的库,也同样适用于从网上下载的编译好的库,例如http://ffmpeg.zeranoe.com/builds/)。(1)像其他额外库一样,设置VC的Include路径为你c:\msys\local\include,设置VClib路径为次c:\msys转载 2015-04-28 11:58:19 · 1060 阅读 · 0 评论 -
简单的ffmpeg视频转码,只处理视频
1、简单说下整体流程用avformat_open_input打开输入文件上下文,再用avformat_find_stream_info找到流信息,为输出分配AVFormatContext空间,然后根据流信息找到视频流,为输出创建流,并打开编解码器,写输出文件头,然后一个循环读帧---解码----压缩----写入,然后flush_encoder,最后写文件尾,释放资源----结束。2、贴上代原创 2015-05-07 12:11:48 · 5187 阅读 · 0 评论 -
ffmpeg各个组件下载地址+编译方法+错误处理
1、介绍这是一个在win7+mingw下编译ffmpeg及其组件库的文件,文件中包含了组件的下载地址,编译方法,依赖库安装,错误处理。2、效果图贴一张截图,3、下载地址http://download.youkuaiyun.com/detail/dancing_night/8672729原创 2015-05-07 16:11:33 · 1206 阅读 · 0 评论 -
时间戳问题汇总
A:RFC3984 规定采用 90000 Hz 的时钟,因此如果编码帧频是 30,那么时间戳间隔就该是 90000 / 30 = 3000,根据抓包来看,似乎时间戳间隔的确是 3000。时间戳的间隔不固定,比如有的时间戳间隔是 2990 有的是 3002,会导致解析出来的视频出现快播的效果么?Q:各位大侠好:我现在正在开发视频实时流播放,简单的过程如下:采集视频流 -> 视频流转换转载 2015-05-07 16:40:35 · 2435 阅读 · 0 评论 -
ffmpeg音频转码(用filter重取样)
1、概述简单说下流程,其实流程和视频转码差不多,不过多了一个filter的处理,因为音频转码需要重采样,所以与视频转码不同的地方就是把解码出来的frame送入filter然后用经过filter的frame来encode。2、代码下面贴上代码:/**最简单的音频转码器(只处理音频)*缪国凯 Mickel*821486004@qq.com*本程序实现从一个视频格式转码到另一个视原创 2015-05-08 11:36:08 · 5743 阅读 · 2 评论 -
ffmpeg音频转码,采用swr_convert重取样
1、概述:和上一篇音频转码流程一样,只是把filter重取样改为了swr_convert重取样,理解本例子对AVFrame中data如何存储音频数据有更好的理解。2、代码:/**最简单的音频转码器(只处理音频)*缪国凯 Mickel*821486004@qq.com*本程序实现从一个视频格式转码到另一个视频格式,只处理音频,视频忽略,若有多个音频流,只处理第一个,采用swr_c原创 2015-05-11 11:24:23 · 14464 阅读 · 3 评论 -
AVFrame关于视音频数据存储
1、概述这几天用ffmpeg实现简单音频转码,在写程序的过程中发现音频在AVFrame中存储与视频很相似,音频要复杂一些,本人记性不好,所以在这里记录下来,以作备忘。2、2个数据成员在AVFrame中有2个很重要的数据成员,一个是data,一个是linesize。data中存储的是未编码的源始数据(不论视音频),linesize中存储的是每行data中数据大小。data的定义如下:原创 2015-05-11 11:56:49 · 7530 阅读 · 0 评论 -
ffmpeg实现视频切割
1、概述本程序实现把一个视频切割为2个视频,不涉及编解码,最难理解的地方在于pts和dts的计算,要好好看看,不够完美的地方在于没有按照关键帧切割,所以会在切割点花屏,以后改善。*注:只处理一个视频流和一个音频流,若流多了,估计会crash。简单说下流程:打开输入---->打开输出---->根据输入来创建流---->拷贝流设置---->循环读帧---->判断时间点是否到达切割点原创 2015-05-14 14:06:44 · 6150 阅读 · 2 评论