
ffmpeg
文章平均质量分 77
dancing_night
不积跬步无以至千里,qq联系方式:821486004
展开
-
ffmpeg4.x版本录音
1、最近一网友找到我,说我博客上的录音程序用不起了,研究一番发现是他用我代码然后链接ffmpeg库。发现版本改动还挺大,故此从新上传一份依赖最新版本的ffmpeg的录音程序,以便大家参考。2、直接上代码:/**最简单的录音*缪国凯 Mickel*821486004@qq.com*本程序用目前最新ffmpeg录音*2018-11-19*/#include <win...原创 2018-11-19 16:02:09 · 1785 阅读 · 4 评论 -
ffmpeg源码跟踪笔记之avcodec_decode_video2
1、函数介绍 /** * Decode the video frame of size avpkt->size from avpkt->data into picture. * Some decoders may support multiple frames in a single AVPacket, such * decoders would then just decode the原创 2015-06-11 16:03:03 · 6914 阅读 · 0 评论 -
ffmpeg源码跟踪之时间基转换,时间戳比较笔记
1、概述经常在代码中我们转换时间基的时候用到av_rescale_q,av_rescale_q_rnd,av_compare_ts这些函数,也从来没有去好好看看代码,今天有时间好好看看代码。2、代码+解释av_rescale_q:int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq){ return av原创 2015-06-12 15:45:53 · 11744 阅读 · 2 评论 -
视音频pts计算
1、概述这段时间做转码,计算pts的时候都是转换一下时间基,我就在想这个pts如果没有原来的pts做参考如何计算其值?摸索一番总算明白了头绪记录于此。2、视频pts视频比较好理解,就是每帧递增,假如fps是25帧的,时间基为fps的倒数1/25,那么pts递增即可。如下:第一帧:pts=0第二帧:pts=1第三帧:pts=3...第n帧:pts = n原创 2015-05-25 18:27:34 · 10491 阅读 · 12 评论 -
代码实现分析mpeg-2文件
1、概述把上一篇文章中讲到的mpeg-2文件结构分析用代码实现,结合mpeg-2文件分析,才容易看懂。2、代码/**本程序主要分析MPEG-2文件*作者:缪国凯(MK)*821486004@qq.com*2015-7-8*/#include "stdafx.h"#define PRINTLOG PrintLogenum PESTYPE{ AUDIOPES =原创 2015-07-10 16:59:01 · 2112 阅读 · 0 评论 -
MPEG-2 文件结构解析
一个完整的MPEG-2文件就是一个PS流文件。 MPEG-2文件的构造格式如下图: 自己找个mpg文件打开,可以看到文件以0x0000 01B9结束(有些文件不标准没有),即MPEG_Program_end_code,之前有很多个0x0000 00BA字段,即为program pack的开始标志,program pack包的构造如下:原创 2015-07-10 16:26:48 · 7623 阅读 · 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 评论 -
ffmpeg源码跟踪笔记之av_write_frame 与 av_interleaved_write_frame
1、函数介绍2、函数调用图3、han原创 2015-06-12 11:45:17 · 21624 阅读 · 1 评论 -
avcodec_decode_video2少帧问题
使用libav转码视频时发现一个问题:使用下面这段代码解码视频时,视频尾巴上会丢掉几帧。[cpp] view plaincopywhile(av_read_frame(ifmt_ctx,&packet) >= 0){ ret = avcodec_decode_video2(video_dec_ctx, vframe,转载 2015-06-15 17:29:39 · 1417 阅读 · 0 评论 -
ffmpeg源码跟踪笔记之av_read_frame
1、函数介绍/** * Return the next frame of a stream. * This function returns what is stored in the file, and does not validate * that what is there are valid frames for the decoder. It will split wha原创 2015-06-11 14:16:42 · 4195 阅读 · 1 评论 -
ffmpeg源码跟踪笔记之avcodec_open2
1、函数介绍 /** * Initialize the AVCodecContext to use the given AVCodec. Prior to using this * function the context has to be allocated with avcodec_alloc_context3(). * * The functions avcodec_find_原创 2015-06-11 10:11:32 · 5263 阅读 · 5 评论 -
把自定义的demuxer加入ffmpeg源码
.简介:把上一篇文章中的demuxer加入ffmpeg源码中去,使可以用命令行方式调用自定义的demuxer第一步:在libavformat目录下新建mkdemuxer.c和mkdemuxer.h,代码如下:mkdemuxer.c:/* *实现一个自己的demuxer并加入到demuxer链中去*作者:缪国凯(MK) *821486004@qq.com原创 2015-06-03 17:06:59 · 2111 阅读 · 0 评论 -
ffmpeg代码实现自定义decoder
1、概述本文主要讲述如何用ffmpeg代码实现自己的decoder。2、代码/* *本程序主要实现一个自己的decoder并加入到decoder链中去,供api调用*作者:缪国凯(MK) *821486004@qq.com *2015-6-4 */ #include "stdafx.h"#ifdef __cplusplusextern "C"{#endif#i原创 2015-06-05 13:45:33 · 1569 阅读 · 0 评论 -
ffmpeg代码实现自定义encoder
1、概述本文主要讲述如何用ffmpeg代码实现自己的encoder。2、代码/* *本程序主要实现一个自己的encoder并加入到encoder链中去,供api调用*作者:缪国凯(MK) *821486004@qq.com *2015-6-4 */ #include "stdafx.h"#ifdef __cplusplusextern "C"{#endif#i原创 2015-06-04 14:24:18 · 1733 阅读 · 0 评论 -
把自定义encoder加入ffmpeg源码
第一步:在libavcodec目录下新建mkencoder.c并加入代码:/* *实现一个自己的encoder,编码工作其实就是把frame的数据拷贝到pkt*作者:缪国凯(MK) *821486004@qq.com *2015-6-4 */ #include "avcodec.h"#include "libavutil/pixdesc.h"static av_col原创 2015-06-04 14:32:28 · 1710 阅读 · 0 评论 -
把自定义的decoder加入ffmpeg源码
第一步:在libavcodec目录下新建mkdecoder.c,并加入一下代码:/* *实现一个自己的decoder,编码工作其实就是把pkt的数据拷贝到frame*作者:缪国凯(MK) *821486004@qq.com *2015-6-5 */ #include "avcodec.h"static av_cold int mk_init_decoder(AVCodecC原创 2015-06-05 14:30:24 · 2464 阅读 · 1 评论 -
ffmpeg源码跟踪笔记之avformat_open_input
1、函数调用图2、带注释的源码int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options){ AVFormatContext *s = *ps; i原创 2015-06-08 17:44:39 · 2478 阅读 · 0 评论 -
ffmpeg源码跟踪笔记之avformat_find_stream_info
1、函数介绍位于libavformat/avformat.h:/** * Read packets of a media file to get stream information. This * is useful for file formats with no headers such as MPEG. This * function also computes the re原创 2015-06-09 17:45:06 · 2831 阅读 · 0 评论 -
I帧和IDR帧
DR(Instantaneous Decoding Refresh)--即时解码刷新。 I和IDR帧都是使用帧内预测的。它们都是同一个东西而已,在编码和解码中为了方便,要首个I帧和其他I帧区别开,所以才把第一个首个I帧叫IDR,这样就方便控制编码和解码流程。IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始,重新算一个新的序列开始编码。而I帧不具有随机访问的能力,这个功能是转载 2015-05-26 10:28:25 · 1986 阅读 · 0 评论 -
ffmpeg字幕相关
增加字幕流ffmpeg -i video.avi -i sub.ass -map 0:0 -map 0:1 -map 1 -c:a copy -c:v copy -c:s copy video.mkv提取字幕流1)原始文本输出ffmpeg -i output.mkv -an -vn -bsf:s mov2textsub -scodec copy -f rawvideo sub.原创 2015-08-25 17:27:33 · 5449 阅读 · 2 评论 -
ffmpeg用filter实现视频scale
1、概述此例子用ffmpeg的filter实现视频scale。2、代码 /** * 最简单的基于FFmpeg的AVFilter例子(scale) * * 缪国凯(MK) * 821486004@qq.com * * http://blog.youkuaiyun.com/dancing_night * * 本程序使用FFmpeg的AVfilter实现了视频的缩放功能。 *原创 2015-08-31 11:43:44 · 4049 阅读 · 3 评论 -
用ffmpeg提取mp4的h264码流写文件花屏
1、用ffmpeg提取mp4的h264码流写文件的方法网上有很多,不知道的请参考雷神博客:http://blog.youkuaiyun.com/leixiaohua1020/article/details/118008772、但是这么写出来的文件是有问题的,首先的确能播放,但是会有很大几率出现花屏a、首先说说解决方案其实很简单,也是利用av_bitstream_filter_filter方法,如下原创 2017-04-01 17:30:23 · 7158 阅读 · 5 评论 -
关于用ffmpeg转手机视频发现视频长宽倒了的问题
1、概述最近用代码转手机视频,发现一个很奇怪的现象,明明源视频物体是竖着的,转了就不对,找了半天发现是以前一直没在乎的视频流rotate值。特此做个笔记。2、解决方案我们可以在输入的流里通过av_dict_get读出rotate值,并把这个值写到输出流里。代码如下: if (inPutStream) { AVDictionaryEntry *tag = NULL;原创 2017-11-03 20:42:04 · 1918 阅读 · 6 评论 -
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用drawtext filter 给视频加字幕,代码实现
简介:利用drawtext filter给视频加字幕,忽略音频,只处理一个视频。流程:openinput->openout->readpacket->decode->push into filter->pull out ->encode->writefile重点看下CPenWordIntoPic里面如何初始化filter的,工程在底部的链接里。贴一下初始化...原创 2018-06-01 13:46:51 · 6493 阅读 · 3 评论 -
ffmpeg不用filter添加水印
1、流程介绍openInput->openPic->InitOutput->readFrame->decode->operateAvframe->encode->writeFile->end2、核心代码核心代码为处理AVFrame如下:for(int j = 0; j < m_markH; j++) { if ((m_y + j) &...原创 2018-06-26 15:48:06 · 685 阅读 · 0 评论 -
处理AVFrame使存储的YUV旋转(YUV420P,旋转90的倍数)
1、原理介绍以YUV420P为例,AVFrame结构体存储YUV为data[0]存储Y,data[1]存储U,data[2]存储V,按一行一行的顺序存储,知道如何存储后,要旋转90的倍数就简单了。2、代码旋转90:for (int i = 0; i < m_srcW; i++) { for (int j = 0; j < m_srcH; j++) { m_Fra...原创 2018-06-26 16:00:49 · 2184 阅读 · 7 评论 -
ffmpeg用filter添加水印
1、利用filter添加水印,流程不过多介绍2、代码/** * 最简单的基于FFmpeg的AVFilter例子 * * 缪国凯(MK) * 821486004@qq.com * * http://blog.youkuaiyun.com/dancing_night * * 本程序使用FFmpeg的AVfilter实现了水印添加功能。 * * */#include "stdafx...原创 2018-06-26 17:34:47 · 1986 阅读 · 0 评论 -
AVFrame存储YUV420P对齐分析
1、概述被这个问题困扰很久,由于懒癌晚期,一直都是云里雾里,最近终于把微信聊天记录里的视频分析了一下,记录于此已做备忘。2、分析过程用ffmpeg写了个解码程序,遍历微信聊天视频目录找出所有视频文件,一个600多个,挨个解码,并把其长宽,AVFrame.linesize[0],AVFrame.linesize[1],AVFrame.linesize[2]打印出来,做对比,终于发现一些规律。下面是打...原创 2018-06-27 16:37:16 · 5553 阅读 · 1 评论 -
ffmpeg一些filter用法、以及一些功能命令
1、加字幕 命令:ffmpeg -i -filter_complex subtitles=filename=-y 说明:利用libass来为视频嵌入字幕,字幕是直接嵌入到视频里的硬字幕。 参考资料:http://ffmpeg.org/ffmpeg-filters.html#subtitles-12、剪切 命令:原创 2015-07-06 17:20:26 · 19966 阅读 · 1 评论 -
release下调用ffmpeg出错
win7 下开发视频服务器,用到ffmpeg,debug版本运行正常,切换到release时,出现"0x00905a4d 处未处理的异常: 0xC0000005: 读取位置 0x00905a4d 时发生访问冲突",原以为是jrtplib得问题,鼓捣半天才发现是ffmpeg. 用一个很小的测试程序验证,在av_register_all处就崩溃.鸟!难道是用mingw生成ffmpeg时有调转载 2016-11-02 16:41:10 · 964 阅读 · 0 评论 -
用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 time_base详解
ffmpeg time_baseffmpeg存在多个时间基准(time_base),对应不同的阶段(结构体),每个time_base具体的值不一样,ffmpeg提供函数在各个time_base中进行切换。搞清楚各个time_base的来源,对于阅读ffmpeg的代码很重要。一、time_base1、AVStream(libavformat/avformat.h)typede转载 2016-08-03 10:39:52 · 2498 阅读 · 0 评论 -
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音频转码,采用swr_convert重取样
1、概述:和上一篇音频转码流程一样,只是把filter重取样改为了swr_convert重取样,理解本例子对AVFrame中data如何存储音频数据有更好的理解。2、代码:/**最简单的音频转码器(只处理音频)*缪国凯 Mickel*821486004@qq.com*本程序实现从一个视频格式转码到另一个视频格式,只处理音频,视频忽略,若有多个音频流,只处理第一个,采用swr_c原创 2015-05-11 11:24:23 · 14464 阅读 · 3 评论 -
利用ffmpeg的filter混音
概述流程介绍流程如下线程之间数据走向如下代码下载地址概述一个简单的混音demo,把文件a和文件b的音频混为一个音频流输出并存为文件,只处理每个文件的第一个音频流 注:源代码是网友Larry_Liang(1085803139)写的,我帮其调试通过,存在这里以免备忘流程介绍流程如下:打开输入1->打开输入2->打开输出->初始化混音filter->开启采集线程和编码写文件循环线程之间数据走向原创 2016-11-08 11:25:05 · 11193 阅读 · 1 评论 -
PCM简介
转自:http://blog.youkuaiyun.com/ownwell/article/details/8114121/1. 音频简介 经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等. 44100HZ 16bit stereo: 每秒钟有 44100 次采样, 采样数据用 16 位(2字节转载 2016-11-08 23:34:40 · 1294 阅读 · 0 评论 -
ffmpeg解码音频保存为PCM
[TOC]简介一个简单保存PCM的demo,注意保存那里对双声道的处理,因为pcm对双声道是交替存储的代码/**一个简单保存PCM的demo,注意保存那里对双声道的处理,因为pcm对双声道是交替存储的*缪国凯*MK(821486004@qq.com)*/#ifdef __cplusplusextern "C"{#endif#include "libavcodec/avcodec.h原创 2016-11-08 23:40:54 · 8826 阅读 · 2 评论 -
ffmpeg音频编码
简介一个简单编码PCM的demo代码/**一个简单编码PCM的demo,参数都是根据PCM数据格式填写的,如果你的PCM不是s16p 44100 双声道,那么你需要自己修改编码上下文参数*注意读取对双声道的处理,因为pcm对双声道是交替存储的*缪国凯*MK(821486004@qq.com)*/#ifdef __cplusplusextern "C"{#endif#include原创 2016-11-09 00:57:06 · 2011 阅读 · 0 评论 -
ffmpeg代码实现自己的demuxer
1、概述继上一篇文章,本文主要讲述如何用ffmpeg代码实现自己的demuxer,实现的意义一是了解ffmpeg代码结构,二是可以自己整自己的视频格式,让别人播放不了,此demuxer解复用的是上一篇文章中复用的文件。2、代码// MyDemuxer.cpp : Defines the entry point for the console application.//#incl原创 2015-06-03 14:25:50 · 2723 阅读 · 0 评论