
ffmpeg
文章平均质量分 73
FFmpeg从入门到入门
吃的是草,挤出来的是代码!
展开
-
ffmpeg基础知识
容器(Container) 容器就是一种文件格式,比如flv,mkv等。包含下面5种流以及文件头信息。 流(Stream) 是一种视频数据信息的传输方式,5种流:音频,视频,字幕,附件,数据。 帧(Frame) 帧代表一幅静止的图像,分为I帧,P帧,B帧。 编解码器(Codec) 是对视频进行压缩或者解压缩,CODEC =COde (编码) +DECod翻译 2017-05-09 09:32:44 · 738 阅读 · 1 评论 -
FFmpeg日志相关
今天学习日志相关内容,记录下来,以免忘记,在FFmpeg中使用av_log()来打印日志信息,首先函数定义在libavutil/log.c中void av_log(void* avcl, int level, const char *fmt, ...){ AVClass* avc = avcl ? *(AVClass **) avcl : NULL; va_list vl;原创 2017-08-28 14:54:15 · 709 阅读 · 0 评论 -
FFmpeg错误码相关
今天在学习FFmpeg中错误码相关的内容时,发现FFmpeg的错误码使用的是FOURCC,比以往定义成简单的负整数有意思的多,特记录下来,以免忘记。 首先错误码都定义在libavutil/error.h和error.c中 以av_strerror开始分析:int av_strerror(int errnum, char *errbuf, size_t errbuf_size){ int原创 2017-08-28 16:19:20 · 5150 阅读 · 0 评论 -
avformat_open_input函数分析
今天来对avformat_open_input这个函数进行分析,主要参考网上大牛们的博客,节省了很多时间,特记录下来,以免忘记 函数的结构如下: avformat_open_input定义在libavformat/utils.c中://参数ps包含一切媒体相关的上下文结构,有它就有了一切,本函数如果打开媒体成功,//会返回一个AVFormatContext的实例.//参数filename原创 2017-08-28 16:58:33 · 1306 阅读 · 0 评论 -
avformat_find_stream_info分析
本文简单分析FFmpeg中一个常用的函数:avformat_find_stream_info()。该函数可以读取一部分视音频数据并且获得一些相关的信息。avformat_find_stream_info()的声明位于libavformat\avformat.h,如下所示。 [cpp] view plain copy/** * Read pack转载 2017-08-29 09:42:11 · 1472 阅读 · 0 评论 -
解码相关函数注解
分组包含属于单个基本流的一个或多个编码帧。 在lavf API中,此过程由用于打开文件的avformat_open_input()函数表示,av_read_frame()用于读取单个数据包,最后是avformat_close_input(),该文件执行清理。一、数据结构struct AVInputFormat{const翻译 2017-08-29 16:13:02 · 439 阅读 · 0 评论 -
avformat_alloc_output_context2()
首先编码的大致流程如下: (1)avformat_alloc_output_context2() (2)avfomat_write_header() (3)avcodec_send_frame()/avcodec_receive_packet() (4)av_write_frame() (5)av_write_trailer() 今天学习avformat_alloc_output_con原创 2017-09-07 10:26:37 · 7507 阅读 · 0 评论 -
av_write_trailer()
av_write_trailer()用于输出文件尾,它的声明位于libavformat\avformat.h,如下所示。/** * Write the stream trailer to an output media file and free the * file private data. * * May only be called after a successful ca原创 2017-09-07 15:30:40 · 1806 阅读 · 0 评论 -
av_write_frame()
av_write_frame()用于输出一帧视音频数据,它的声明位于libavformat\avformat.h,如下所示。/** * Write a packet to an output media file. * * This function passes the packet directly to the muxer, without any buffering * or原创 2017-09-07 14:03:01 · 4568 阅读 · 1 评论 -
avformat_write_header()
avformat_write_header(),av_write_frame()以及av_write_trailer()这三个函数一般是配套使用,其中av_write_frame()用于写视频数据,avformat_write_header()用于写视频文件头,而av_write_trailer()用于写视频文件尾。首先来分析avformat_write_header(),函数的声明位于libavf原创 2017-09-07 10:48:41 · 5071 阅读 · 0 评论 -
ffmpeg中的时间
一、 首先FFmpeg中存在多个时间基(time_base),对应不同的阶段(结构体),每个time_base具体的值不一样,ffmpeg提供函数在各个time_base中进行切换。搞清楚各个time_base的来源,对于阅读ffmpeg的代码很重要。 1、AVstream中(libavformat/avformat.h) typedef struct AVStream { /**原创 2017-08-30 10:34:47 · 562 阅读 · 0 评论 -
avformat_alloc_output_context2函数解析
本文简单分析FFmpeg中常用的一个函数:avformat_alloc_output_context2()。在基于FFmpeg的视音频编码器程序中,该函数通常是第一个调用的函数(除了组件注册函数av_register_all())。avformat_alloc_output_context2()函数可以初始化一个用于输出的AVFormatContext结构体。它的声明位于libavformat\a转载 2017-08-30 14:40:00 · 4283 阅读 · 0 评论 -
FFmpeg.c分析
本文将会对FFmpeg.c中的主要函数分别解析。主要参考http://blog.youkuaiyun.com/leixiaohua1020/article/details/39760711,并对其中更新的API进行修改。main()main()是FFmpeg的主函数。调用了如下函数av_register_all():注册所有编码器和解码器。show_banner():打印输转载 2017-09-08 14:38:28 · 1577 阅读 · 0 评论 -
av_read_frame解析
ffmpeg中的av_read_frame()的作用是读取码流中的音频若干帧或者视频一帧。例如,解码视频的时候,每解码一个视频帧,需要先调用 av_read_frame()获得一帧视频的压缩数据,然后才能对该数据进行解码(例如H.264中一帧压缩数据通常对应一个NAL)。 通过av_read_packet(***),读取一个包,需要说明的是此函数必须是包含整数帧的,不存在半帧的情况,以ts原创 2017-08-31 10:34:33 · 2527 阅读 · 1 评论 -
AVOption
本文继续上篇文章《FFmpeg源代码分析:结构体成员管理系统-AVClass》中的内容,记录FFmpeg中和AVOption相关的源代码。AVOption用于在FFmpeg中描述结构体中的成员变量。一个AVOption可以包含名称,简短的帮助信息,取值等等。上篇文章简单回顾上篇文章中概括了AVClass,AVOption和目标结构体之间的关系。以AVFormatContex转载 2017-09-06 09:25:43 · 2506 阅读 · 0 评论 -
ffmpeg基本命令
1.普通格式转换 ffmpeg -i input.avi output.mp4 从选项指定的任意数量的输入“文件”(可以是常规文件,管道,网络流,抓取设备等)读取 -i,并写入任意数量的输出“文件”,由一个简单的输出url。在命令行上发现的任何不能被解释为选项的内容都被认为是输出url。 2. 提取音频 ffmpeg -i input.mp4 -acodec copy -vn output.转载 2017-05-09 18:01:57 · 584 阅读 · 0 评论 -
fatal error C1189: #error : missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS
参考文章:https://ffmpeg.zeranoe.com/forum/viewtopic.php?f=15&t=158fatal error C1189: #error : missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROSfatal error C1189: #error : missing -转载 2017-06-01 11:14:15 · 712 阅读 · 0 评论 -
pkg-config的用法
学习ffmpeg的过程中,编译程序时经常找不到头文件和库文件路径。pkg-config能根据软件安装时软件的.pc配置文件路径找到相应的头文件路径和库文件路径。不用我们自己指定路径。pkg-configpkg-config程序是干什么用的?简单的说就是向用户向程序提供相应库的路径、版本号等信息的程序。譬如说我们运行以下命令:pkg-config 查看gcc的CFLAGS参转载 2017-06-01 15:28:40 · 3694 阅读 · 0 评论 -
ffmpeg 新老接口问题及对照集锦
fmpeg源码包里面有个apichangs文档,里面有各种接口改变的记录,如果你发现接口不能用了,可以去搜索那个文档,可以找到对应的新接口,然后到新接口对应的头文件中找到说明文字网上很多关于ffmpeg (libav)的资料都是N年以前的,而事实上ffmpeg数年来一直在“以时俱进”,因此无论是一些新手,或者号称为老手的人,有时候难免出头痛。。。。。。为了解决大家的转载 2017-06-01 16:37:22 · 747 阅读 · 0 评论 -
基于FFmpeg的视音频分离器
http://blog.youkuaiyun.com/leixiaohua1020/article/details/39802819 本文记录一个基于FFmpeg的视音频分离器,视音频分离器(Demuxer)即是将封装格式数据(例如MKV)中的视频压缩数据(例如H.264)和音频压缩数据(例如AAC)分离开。如图所示。在这个过程中并不涉及到编码和解码。本文只提取音频压缩数据。 本文记录的程序可以将转载 2017-06-16 16:59:40 · 512 阅读 · 0 评论 -
centos下ffmpeg环境搭建
原网址:https://trac.ffmpeg.org/wiki/CompilationGuide/Centos 获取依赖关系注意:#表示该命令应以超级用户或root身份执行,并且仅在本指南中为yum命令所需。获取依赖关系 这些是编译所需的,但是可以根据您的喜好在完成以上操作后,则可以将其删除(除了make;默认情况下应该安装,许多事情取决于它)。# yum install autoconf au翻译 2017-05-08 17:56:52 · 941 阅读 · 0 评论 -
ffmpeg SDK 基本数据结构和函数
学习过程中在网上看到的帖子,有点老了,一些API已经过时,主要是为了学习各数据结构的关系,在学习的过程中对部分了解到的已过时的API进行了更新。 原文地址:http://blog.chinaunix.net/uid-26000296-id-4217128.html 一、重要的数据结构及函数列表 I. 数据结构: (1) AVFormatContext (2) AVOutputFormat转载 2017-06-07 14:37:32 · 519 阅读 · 0 评论 -
学习ffmpeg官方示例代码transcoding.c遇到的问题
编译测试遇到问题,首先我的编译命令:export PKG_CONFIG_PATH=/home/user/ffmpeg_build/lib/pkgconfig:$PKG_CONFIG_PATH//将库的路径添加到PKG_CONFIG_PATH中gcc transcoding.c -o transcoding `pkg-config --libs --cflags libavcodec libavut转载 2017-06-05 09:54:55 · 717 阅读 · 0 评论 -
ffmpeg time_base
ffmpeg time_baseffmpeg存在多个时间基准(time_base),对应不同的阶段(结构体),每个time_base具体的值不一样,ffmpeg提供函数在各个time_base中进行切换。搞清楚各个time_base的来源,对于阅读ffmpeg的代码很重要。一、time_base1、AVStream(libavformat/avformat.h)typede转载 2017-06-30 16:44:38 · 416 阅读 · 0 评论 -
ffmpeg相关开源项目
1.FFmpeg build for android random architectures with example jnihttps://github.com/appunite/AndroidFFmpeg2.ijkplayer - Android/iOS 基于FFMPEG库的播放器http://git.oschina.net/bbcallen/ijkplayergit下载转载 2017-06-12 10:09:24 · 520 阅读 · 1 评论 -
利用ffmpeg解析视频文件信息
解析文件的信息主要从AVFormatContext fmt_ctx,*AVCodecContext *codec_ctx,这两个结构体中获取,fmt_ctx 初始化的函数avformat_open_input(),codec_ctx的初始化函数avcodec_alloc_context3() 下面列举一些代码里用到的结构体成员typedef struct AVFormatContext {原创 2017-06-13 16:39:50 · 5911 阅读 · 0 评论 -
代码学习,将视频文件处理为ppm文件
本段代码初步体验ffmpeg处理流程#include <inttypes.h> #include <stdint.h> #include <stdio.h>#ifdef __cplusplus extern "C" { #endif#include "libavutil/avutil.h" #include "libavcodec/avcodec.h" #include "l转载 2017-06-01 16:34:58 · 846 阅读 · 0 评论 -
av_register_all函数分析
今天开始对FFmpeg中的主要函数进行学习,特记录下来。 首先av_register_all函数在libavformat/allformats.c中定义void av_register_all(void){ AVOnce control = AV_ONCE_INIT; ff_thread_once(&control, register_all);}函数中调用了register_原创 2017-08-28 11:11:25 · 1402 阅读 · 0 评论 -
avcodec_send_packet()/ avcodec_receive_frame()
ffmpeg中解码的API之前的是avcodec_decode_video2()和avcodec_decode_audio4(),现在使用avcodec_send_packet()/ avcodec_receive_frame()来代替原有的接口。API与编码/解码和音频/视频非常相似,工作原理如下:1、像往常一样设置和打开AVCodecContext。原创 2017-09-02 09:55:14 · 5374 阅读 · 0 评论