
ffmpeg
幽雨雨幽
C/C++软件工程师
展开
-
视音频数据处理入门
参见。原创 2022-09-06 13:36:36 · 136 阅读 · 0 评论 -
FFmpeg源代码:avformat_write_header/av_write_frame/av_interleaved_write_frame/av_write_trailer
跟写视频文件相关的三个配套接口是avformat_write_header()用于写视频文件头av_write_frame()用于写视频数据av_interleaved_write_frame() 用于交错写视频数据av_write_trailer()用于写视频文件尾。原创 2022-08-26 11:14:52 · 1095 阅读 · 0 评论 -
FFmpeg源代码:avformat_new_stream
avformat_new_stream接口声明位于ffmpeg/libavformat/avformat.h 中,主要功能为在AVFormatContext 中创建 Stream 通道 与该接口相关的结构体avformat_new_stream接口实现位于ffmpeg/libavformat/utils.c 中原创 2022-08-26 10:15:26 · 893 阅读 · 0 评论 -
FFmpeg源代码:avformat_alloc_output_context2()
avformat_alloc_output_context2接口位于ffmpeg/libavformat/avformat.h中,avformat_alloc_output_context2()函数可以初始化一个用于输出的AVFormatContext结构体。如果指定为NULL,可以设定后两个参数(format_name或者filename)由FFmpeg猜测输出格式。根据格式名称,FFmpeg会推测输出格式。输出格式可以是“flv”,“mkv”,“mpegts”等等。...原创 2022-08-25 22:18:18 · 528 阅读 · 0 评论 -
FFmpeg源代码:av_image_get_buffer_size&av_image_copy_to_buffer
对齐的对齐数,也就是按多大的字节进行内存对齐。比如设置为1,表示按1字节对齐,那么得到的结果就是与实际的内存大小一样。再比如设置为4,表示按4字节对齐。也就是内存的起始地址必须是4的整倍数。av_image_get_buffer_size 接口声明位于libavutil/imgutils.h。根据像素格式、宽、高、linesize 对其方式来计算所需的内存大小。重点说明一个参数align:此参数是设定。...原创 2022-08-12 16:31:16 · 1509 阅读 · 0 评论 -
FFmpeg源代码:av_read_frame
例如,解码视频的时候,每解码一个视频帧,需要先调用 av_read_frame()获得一帧视频的压缩数据,然后才能对该数据进行解码(例如H.264中一帧压缩数据通常对应一个NAL)。从接口定义中可以看出,av_read_frame()调用了read_frame_internal()1. ff_read_packet()从相应的AVInputFormat读取AVPacket数据;ffmpeg中的av_read_frame()的作用是读取码流中的。read_frame_internal()是一个内部函数。...原创 2022-08-10 23:17:28 · 456 阅读 · 0 评论 -
FFmpeg源代码:AVFormatContext相关接口
需要注意的是,有些封装格式并没有header 或者header中并没有存储足够的信息,所以还需要调用avformat_find_stream_info函数来读取并解码一些帧来获取足够的信息。该接口的功能是打开一个输入媒体文件,读取文件头(如果有的话,MPEG没有format header)并探测视频封装格式,将媒体文件信息存储到ps中。dictionay:附加的一些选项,一般情况下可以设置为NULL。该接口注释已经写的很详细了,中文简单概述下。url:打开的视音频流的URL。.........原创 2022-08-10 18:02:40 · 278 阅读 · 0 评论 -
FFMPEG结构体分析之SwrContext
SwrContext是音频重采样的结构体,需要注意的是这个结构体和libavcodec 、libavformat不同, 它是不透明的,不能直接为结构体成员变量设置值,需要调用AVOptionsAPI接口设置参数SwrContext结构体定义位于/ffmpeg-5.0/libswresample/swresample_internal.h中,如下struct SwrContext { const AVClass *av_class; ...原创 2022-03-22 11:07:52 · 3325 阅读 · 0 评论 -
FFMPEG结构体分析之AVIOContext
Bytestream IOContext.是FFMPEG管理输入输出数据的结构体AVIOContext 结构体定义位于ffmpeg/libavformat/avio.h 中/** * Bytestream IO Context. * New fields can be added to the end with minor version bumps. * Removal, reordering and changes to existing fields require a majo..原创 2022-02-18 14:28:00 · 1206 阅读 · 0 评论 -
FFMPEG结构体分析之AVFormatContext
文件路径/** * Format I/O context. * New fields can be added to the end with minor version bumps. * Removal, reordering and changes to existing fields require a major * version bump. * sizeof(AVFormatContext) must not be used outside libav*, use * avf原创 2022-02-15 15:29:47 · 407 阅读 · 0 评论 -
FFMPEG结构体分析之AVStream
AVStream是存储每一个视频/音频流信息的结构体。该结构体定义位于libavformat/avformat.h中,如下:/** * Stream structure. * New fields can be added to the end with minor version bumps. * Removal, reordering and changes to existing fields require a major * version bump. * sizeof(A...原创 2022-01-18 11:27:52 · 1878 阅读 · 0 评论 -
FFMPEG结构体分析之AVCodec
AVCodec结构体定义位于libavcodec/codec.h中,如下/** * AVCodec. */typedef struct AVCodec { /** * Name of the codec implementation. * The name is globally unique among encoders and among decoders (but an * encoder and a decoder can share the sa原创 2022-01-17 16:08:37 · 2378 阅读 · 0 评论 -
FFmpeg源代码:avcodec_open2()
本文简单分析FFmpeg的avcodec_open2()函数。该函数用于初始化一个音视频编解码器的AVCodecContext。avcodec_open2()的声明位于libavcodec\avcodec.h,如下所示。/** * Initialize the AVCodecContext to use the given AVCodec. Prior to using this * function the context has to be allocated with avcodec_al原创 2022-01-17 14:47:17 · 3414 阅读 · 0 评论 -
FFmpeg 源代码:avcodec_find_encoder()和avcodec_find_encoder_by_name()
avcodec_find_encoder()用于通过codec id 查找FFmpeg的编码器avcodec_find_encoder_by_name()用于通过codec name 查找FFmpeg的编码器avcodec_find_encoder()和avcodec_find_encoder_by_name() 的声明位于libavcodec\codec.h,如下:/** * Find a registered encoder with a matching codec ID..原创 2022-01-16 11:22:57 · 2581 阅读 · 0 评论 -
FFmpeg 源代码:avcodec_find_decoder()和avcodec_find_decoder_by_name()
avcodec_find_decoder()用于通过codec id 查找FFmpeg的解码器avcodec_find_decoder_by_name()用于通过codec name 查找FFmpeg的解码器avcodec_find_decoder()和avcodec_find_decoder_by_name() 的声明位于libavcodec\codec.h,如下:/** * Find a registered decoder with a matching codec ID. *.原创 2022-01-16 10:10:27 · 2905 阅读 · 0 评论 -
[ffmpeg] 解码API
版本迭代ffmpeg解码API经过了好几个版本的迭代,上一个版本的API是解码视频:avcodec_decode_video2 解码音频:avcodec_decode_audio4我们现在能看到的很多解码例子用的都是这两个,不过现在ffmpeg更推荐用新一代的API向解码器输送数据包:avcodec_send_packet 从解码器获取帧:avcodec_receive_frame通常来说,一个packet会被解码出一个frame,不过也存在一个packet被解码出多个frame或者转载 2022-01-14 17:03:16 · 1902 阅读 · 0 评论 -
FFMPEG结构体分析之AVCodecContext
AVCodecContext,编码器上下文结构体,保存了视频(音频)编解码相关信息AVCodecContext 结构体定义在文件ffmpeg/libavcodec/avcodec.h中/** * main external API structure. * New fields can be added to the end with minor version bumps. * Removal, reordering and changes to existing fields req.原创 2022-01-14 14:14:03 · 613 阅读 · 0 评论 -
FFMPEG结构体分析
1.AVCodecContext原创 2022-01-14 14:13:06 · 286 阅读 · 0 评论 -
FFmpeg 音视频处理总纲
总体流程图如下参考:视音频数据处理入门:RGB、YUV像素数据处理_雷霄骅(leixiaohua1020)的专栏-优快云博客_rgb yuv原创 2022-01-14 10:38:19 · 238 阅读 · 0 评论 -
FFmpeg源代码学习
FFmpeg源代码原创 2022-01-14 10:26:11 · 1526 阅读 · 0 评论 -
FFMPEG libx264解码为YUV
在FFMPEG中,图像原始数据包括两种:planar和packed。planar就是将几个分量分开存,比如YUV420中,data[0]专门存Y,data[1]专门存U,data[2]专门存V。而packed则是打包存,所有数据都存在data[0]中具体哪个格式是planar,哪个格式是packed,可以查看pixfmt.h文件,路径为ffmpeg/libavutil/pixfmt.h。注:有些格式名称后面是LE或BE,分别对应little-endian或big-endian。另外名字后面有P的是pla原创 2022-01-14 10:22:37 · 848 阅读 · 0 评论 -
YUV 之解读
YUV - VideoLAN Wiki原创 2022-01-13 14:34:40 · 236 阅读 · 0 评论 -
FFMPEG 接口
1.av_image_copyav_image_copy()void av_image_copy ( uint8_t * dst_data[4], int dst_linesizes[4], const uint8_t * src_data[4], const int src_linesizes[4], enum AVPixelFormat pix_fmt, int width, int height ) Copy ima原创 2022-01-04 10:19:50 · 1138 阅读 · 0 评论 -
FFMPEG结构体分析之AVPacket
typedef struct AVPacket { /** * A reference to the reference-counted buffer where the packet data is * stored. * May be NULL, then the packet data is not reference-counted. */ AVBufferRef *buf; /** * Presentation times.原创 2021-12-09 16:43:40 · 2192 阅读 · 0 评论 -
ffmpeg源码学习之time_base
https://www.suninf.net/2018/02/ffmpeg-timestamps.html原创 2021-09-08 14:38:01 · 194 阅读 · 0 评论 -
倍速转码1
阿里云:适用于30分钟以上的长视频,通过对视频分片并行转码,大幅提升转码速度,转码速度是阿里云普通转码的5倍。业内普遍的转码机制为一台转码机执行一个作业,对于对转码效率有更高要求的客户来说,无法满足需求。倍速转码是通过多台转码机来并行转码,所以效率在原有的高速转码之上提升了几倍。结合高性能编解码器,实现了质量和转码效率的双重保障。七牛云:倍速转码不推荐用于转封装、转音频等低开销任务。建议用于时长大于25分钟。通过对视频分片并行转码,大幅提升转码速度,转码速度可提升3倍。...原创 2021-08-31 10:54:14 · 420 阅读 · 0 评论 -
ffmpeg 转码异常记录
ffmpeg 转码遇到一个问题,目前尚未排查出原因,先记录下来,后续跟踪背景:obs 采集媒体源(该媒体源mp4,h264编码,无音频,音频使用本地麦克风采集),推流到srs源站,ffmpeg 进行转码,转码参数为:ffmpeg -re -i rtmp://10.10.12.141:1935/live/0fMT3g0YT?vhost=push0420aa2.mudu.tv -r 25 -b:v 800k -vf scale=640:480 D:\video\test\atest.flv但是转码后..原创 2021-08-26 09:50:55 · 1792 阅读 · 0 评论 -
ffmpeg 源码学习
1.avformat_network_init()初始化网络2.av_log_set_callbackAVLog是FFmpeg的日志输出工具。在FFmpeg中所有的日志输出不是通过printf()函数而是通过av_log()函数。av_log()会最终调用fprintf(stderr,…)函数将日志内容输出到命令行界面上。但是在一些非命令行程序(MFC程序,Android程序等)中,av_log()调用的fprintf(stderr,…)就无法将日志内容显示出来了。对于这种情况,FFmpeg..原创 2021-07-08 10:41:45 · 502 阅读 · 0 评论 -
安装 Ffmpeg 步骤
看了N多ffmpeg的安装教程,无外乎是从ffmpeg官网的wiki上翻译过来的,具体的安装教程见官网1.https://trac.ffmpeg.org/wiki/CompilationGuideffmpeg各种平台安装流程指引,包括linux、windows等等;2.https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntuff...原创 2018-03-21 15:46:56 · 4181 阅读 · 0 评论 -
[FFmpeg] ffmpeg 常用命令
1. 视频转换比如一个avi文件,想转为mp4,或者一个mp4想转为ts。 ffmpeg -i input.avi output.mp4 ffmpeg -i input.mp4 output.ts2. 提取音频ffmpeg -i test.mp4 -acodec copy -vn output.aac 上面的命令,默认mp4的audio codec是aac,如果不是,可以都转为最常见的aac。 f...转载 2018-04-12 10:24:55 · 452 阅读 · 0 评论 -
ffmpeg ffplay ffprobe使用说明
在优快云上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者。在和大家探讨的过程中,我忽然发现了一个问题:在“大神”和初学者之间好像有一个不可逾越的鸿沟。“大神”们水平高超,探讨着深奥的问题;而初学者们还停留在入门阶段。究竟是什么原因造成的这种“两极分化”呢?最后,我发现了问题的关键:FFMPEG难度比较大,...转载 2018-06-13 14:38:46 · 1468 阅读 · 0 评论 -
使用FFMPEG生成HLS
http://elkpi.com/topics/ffmpeg-f-hls.html HLS也就是HTTP Live Streaming,是苹果出的一个基于HTTP的流媒体通信协议。字面意思有个live,也就是直播相关的。其实HLS可以分为点播以及直播两种。后面具体说两者在处理上有什么区别。目前HLS在RFC上还只是草案,并且一直不断更新,发现ffmpeg对于HLS的实现,不同版本的实现对应rfc版...转载 2018-06-21 10:39:47 · 7105 阅读 · 0 评论 -
ffplay播放没有声音"SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can't initialize audio client"
在window7 64bit下安装了ffmpeg,然后用ffplay命令播放声音时发生这个错误:SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can't initialize audio client那么只能播放视频图像而不能播放视频声音。在SO上找到解决方法:resolve只要设置环境一个变量SDL_AUDIODRIVER=directsound或者w...转载 2018-06-13 16:02:43 · 4611 阅读 · 0 评论 -
FFMPEG使用参数详解
目前又开始测MPEG1和MPEG2的解码,在准备编码好的测试序列过程中,需要通过编码器来进行原始视频序列的编码操作,以生成我们需要的测试数据。由于IPP example提供的Encoder不支持MPEG1,经过查询,决定MPEG1的编码使用FFMPEG。FFMEPG是个啥子东西呢,这里简单说一下:FFmpeg是用于录制、转换和流化音频和视频的完整解决方案,一套领先的音/视频编解码类库。 F转载 2017-08-03 15:06:08 · 1795 阅读 · 0 评论 -
ffmpeg 常用基本命令和ffmpeg处理RTMP流媒体的常用命令
ffmpeg 常用基本命令1.分离视频音频流ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流ffmpeg -i input_file -acodec copy -vn output_file_audio //分离音频流2.视频解复用ffmpeg –i test.mp4 –vcodec co转载 2017-02-16 14:26:31 · 1092 阅读 · 0 评论 -
最简单的基于FFMPEG的推流器附件:收流器
=====================================================最简单的基于FFmpeg的推流器系列文章列表:《最简单的基于FFmpeg的推流器(以推送RTMP为例)》《最简单的基于FFMPEG的推流器附件:收流器》=====================================================转载 2017-09-19 14:30:05 · 502 阅读 · 0 评论 -
使用ffmpeg合并视频文件的三种方法
ffmpeg合并视频的方法有三种。国内大多数仅介绍了其中之一。于是觉得有必要翻译一下。其实在ffmpeg的 FAQ文档中有比较详细的说明。 使用concat协议进行视频文件的合并这种方式的适用场景是:视频容器是MPEG-1, MPEG-2 PS或DV等可以直接进行合并的。换句话说,其实可以直接用cat或者copy之类的命令来对视频直接进行合并。很多文章介绍了这转载 2017-09-08 11:52:07 · 5811 阅读 · 0 评论 -
mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’
编译FAAC-1.28时遇到错误:mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’解决方法:从123行开始修改此文件mpeg4ip.h,到129行结束。修改前:#ifdef __cplusplusextern "C" {#endifchar转载 2017-08-04 10:45:32 · 761 阅读 · 0 评论 -
DTS和PTS的解释
DTS和PTS的解释 FFmpeg里有两种时间戳:DTS(Decoding Time Stamp)和PTS(Presentation Time Stamp)。顾名思义,前者是解码的时间,后者是显示的时间。要仔细理解这两个概念,需要先了解FFmpeg中的packet和frame的概念。 FFmpeg中用AVPacket结构体来描述解码前或编码后的压缩包,用AVFrame结构体来描述解码后或编转载 2017-08-18 11:20:17 · 8983 阅读 · 0 评论 -
理解音视频 PTS 和 DTS
视频视频的播放过程可以简单理解为一帧一帧的画面按照时间顺序呈现出来的过程,就像在一个本子的每一页画上画,然后快速翻动的感觉。但是在实际应用中,并不是每一帧都是完整的画面,因为如果每一帧画面都是完整的图片,那么一个视频的体积就会很大,这样对于网络传输或者视频数据存储来说成本太高,所以通常会对视频流中的一部分画面进行压缩(编码)处理。由于压缩处理的方式不同,视频中的画面帧就分为转载 2017-08-18 11:18:03 · 642 阅读 · 0 评论