FFmpeg
文章平均质量分 87
FFmpeg
Lumos`
努力努力再努力
展开
-
ffplay命令汇总
ffplay命令选项目录ffplay播放控制ffplay命令主要选项ffplay命令高级选项ffplay命令播放媒体ffplay简单过滤器1. ffplay播放控制命令含义q, ESC退出播放t循环切换字幕流f全屏切换c循环切换节目p, SPC暂停w循环切换过滤器或显示模式m静音切换s逐帧播放9, 09减少音量, 0增加音量left/right向后/向前拖动10秒/, */减少音量,原创 2021-06-12 23:47:06 · 514 阅读 · 0 评论 -
ffmpeg.c学习-1-框架分析及命令行解析
ffmpeg.c学习-1-框架分析及命令行解析目录掌握ffmpeg.c的意义ffmpeg框架分析ffmpeg对应的⽂件ffmpeg程序框架流程框图分析命令行解析1. 掌握ffmpeg.c的意义ffmpeg.c本质是是基于FFmpeg库开发的多媒体⽂件转换器(multimedia converter)。ffmpeg.c的作⽤转码:⽐如转成MP3/AAC/H264/H265等等;压缩:⽐如将PCM进⾏⾳频编码,YUV进⾏视频编码;提取:⽐如提前⾳频⽂件为AAC,提前视原创 2021-05-29 14:20:08 · 555 阅读 · 0 评论 -
ffplay.c学习-8-暂停、逐帧、⾳量
ffplay.c学习-8-暂停、逐帧、⾳量目录播放、暂停暂停/继续状态切换暂停状态下的视频播放暂停状态下的⾳频播放逐帧、调⾳量、静⾳逐帧调⾳量静⾳常⽤的播放器操作:播放:程序启动即播放,处于暂停时通过p或空格键静⾳:m键⾳量+:0键⾳量-:9键暂停:p或空格键快退/快进:左箭头/右箭头逐帧:s键退出:q或Esc键全屏:f或者⿏标左键双击event_loop做按键响应1. 播放、暂停画⾯要停⽌画⾯停留在最后⼀帧声⾳要停⽌原创 2021-05-22 23:49:11 · 550 阅读 · 0 评论 -
ffplay.c学习-7-以音频同步为基准
ffplay.c学习-7-以音频同步为基准目录⾳频主流程视频主流程delay的计算1. ⾳频主流程ffplay默认也是采⽤的这种同步策略。此时⾳频的时钟设置在sdl_audio_callback: audio_callback_time = av_gettime_relative(); ... /* Let's assume the audio driver that is used by SDL has two periods. */ if (!isnan(i原创 2021-05-22 20:08:53 · 402 阅读 · 0 评论 -
ffplay.c学习-6-⾳视频同步基础
⾳视频同步基础目录⾳视频同步策略⾳视频同步概念FFmpeg中的时间单位⾳视频时间换算的问题不同结构体的time_base/duration分析不同结构体的PTS/DTS分析ffplay中PTS的转换流程分析Video Frame PTS的获取Audio Frame PTS的获取由于⾳频和视频的输出不在同⼀个线程,⽽且,也不⼀定会同时解出同⼀个pts的⾳频帧和视频帧。更有甚者,编码或封装的时候可能pts还是不连续的,或有个别错误的。因此,在进⾏⾳频和视频的播放时,需要对⾳原创 2021-05-16 17:29:31 · 346 阅读 · 0 评论 -
ffplay.c学习-5-视频输出和尺⼨变换
ffplay.c学习-5-视频输出和尺⼨变换目录视频输出模块视频输出初始化视频输出初始化主要流程初始化窗⼝显示⼤⼩视频输出逻辑video_refresh计算上⼀帧应显示的时⻓,判断是否继续显示上⼀帧估算当前帧应显示的时⻓,判断是否要丢帧调⽤video_display进⾏显示根据映射表获取frame对应SDL中的像素格式重新分配vid_texture格式转换-复⽤或新分配⼀个SwsContext图像显示图像格式转换函数说明sws_getCont原创 2021-05-14 09:41:26 · 241 阅读 · 0 评论 -
ffplay.c学习-4-⾳频输出和⾳频重采样
ffplay.c学习-4-⾳频输出和⾳频重采样目录⾳频输出模块打开SDL⾳频设备打开⾳频设备audio_open回调函数逻辑sdl_audio_callback回调函数读取数据⾳频重采样重采样逻辑样本补偿1. ⾳频输出模块ffplay的⾳频输出通过SDL实现。⾳频输出的主要流程:打开SDL⾳频设备,设置参数启动SDL⾳频设备播放SDL⾳频回调函数读取数据,这个时候我们就要从FrameQueue读取frame填充回调函数提供的buffer空间。aud原创 2021-04-29 08:59:33 · 221 阅读 · 0 评论 -
ffplay.c学习-3-音视频解码线程
ffplay.c学习-3-音视频解码线程目录解码线程视频解码线程video_thread()get_video_frame()同⼀播放序列流连续的情况下,不断调⽤avcodec_receive_frame获取解码后的frame。获取⼀个packet,如果播放序列不⼀致(数据不连续)则过滤掉“过时”的packet将packet送⼊解码器queue_picture()类型PacketQueueFrameQueuevidck解码线程视频videoq原创 2021-04-25 09:27:51 · 433 阅读 · 0 评论 -
ffplay.c学习-2-数据读取线程
ffplay.c学习-1-数据读取线程目录准备⼯作avformat_alloc_context 创建上下⽂ic->interrupt_callbackavformat_open_input()打开媒体⽂件avformat_find_stream_info()检测是否指定播放起始时间查找查找AVStream通过AVCodecParameters和av_guess_sample_aspect_ratio计算出显示窗⼝的宽、⾼stream_component_open()Fo原创 2021-04-21 23:14:20 · 495 阅读 · 0 评论 -
ffplay.c学习-1-框架及数据结构
ffplay播放器学习目录ffplay.c的意义FFplay框架分析数据结构分析struct VideoState 播放器封装struct Clock 时钟封装struct MyAVPacketList和PacketQueue队列packet_queue_init()packet_queue_destroy()packet_queue_start()packet_queue_abort()packet_queue_put()packet_queue_get()packet原创 2021-04-18 14:57:27 · 298 阅读 · 0 评论 -
FFmpeg Filter基本使用
FFmpeg Filter基本使用目录FFmpeg filter简介filter的使⽤⽅法filter的语法filterchain的语法filtergraph的语法基本结构创建简单的滤波过程创建复杂的滤波过程滤波APIffmpeg中有很多已经实现好的滤波器,这些滤波器的实现位于libavfilter⽬录之下,⽤户需要进⾏滤波时,就是是调⽤这些滤波器来实现的。ffmpeg对于调⽤滤波器有⼀整套的调⽤机制。1. FFmpeg filter简介FFmpeg filter提供了很原创 2021-04-15 21:10:20 · 515 阅读 · 0 评论 -
视频过滤器案例
视频过滤器案例目录AVFilter主体框架流程视频过滤器案例代码实现1. AVFilter主体框架流程在利⽤AVFilter进⾏⾳视频数据处理前先将在进⾏的处理流程绘制出来,现在以FFmpeg filter官⽅⽂档中的⼀个例⼦为例进⾏说明。这个例⼦的处理流程如上所示,⾸先使⽤split滤波器将input流分成两路流(main和tmp),然后分别对两路流进⾏处理。对于tmp流,先经过crop滤波器进⾏裁剪处理,再经过flip滤波器进⾏垂直⽅向上的翻转操作,输出的结果命名为flip流。原创 2021-04-13 00:08:15 · 540 阅读 · 0 评论 -
FFmpeg过滤器框架分析
FFmpeg过滤器框架分析目录主要结构体和API介绍AVFilterGraph-对filters系统的整体管理AVFilter-定义filter本身的能⼒AVFilterContext-filter实例,管理filter与外部的联系AVFilterLink-定义两个filters之间的联接AVFilterPad-定义filter的输⼊/输出接⼝AVFilterInOut-过滤器链输⼊/输出的链接列表函数使⽤AVFilter主体框架流程⽐较常⽤的滤镜有:scale、trim、原创 2021-04-12 20:17:13 · 335 阅读 · 0 评论 -
H264和AAC合成FLV案例
H264和AAC合成FLV案例目录FFmpeg合成流程FFmpeg函数:avformat_write_headerFFmpeg结构体:avformat_alloc_output_context2FFmpeg结构体:AVOutputFormatFFmpeg函数:avformat_new_streamFFmpeg函数:av_interleaved_write_frameFFmpeg函数:av_compare_tsFFmpeg时间戳详解1. FFmpeg合成流程示例本程序会⽣成⼀个原创 2021-04-12 17:13:43 · 784 阅读 · 0 评论 -
视频编码案例
视频编码案例目录FFmpeg视频编码流程H.264码率设置FFmpeg与H264编码指南X264参数之zerolatency的分析YUV编码成H.264案例1. FFmpeg视频编码流程从本地读取YUV数据编码为h264格式的数据,然后再存⼊到本地,编码后的数据有带startcode。1. 函数说明avcodec_find_encoder_by_name:根据指定的编码器名称查找注册的编码器。avcodec_alloc_context3:为AVCodecContext分原创 2021-04-10 21:33:02 · 765 阅读 · 0 评论 -
音频编码案例
音频编码案例目录FFmpeg流程PCM样本格式PCM编码成AAC案例1. FFmpeg流程从本地⽂件读取PCM数据进⾏AAC格式编码,然后将编码后的AAC数据存储到本地⽂件。示例的流程如下所示1. 关键函数说明:avcodec_find_encoder:根据指定的AVCodecID查找注册的编码器。avcodec_alloc_context3:为AVCodecContext分配内存。avcodec_open2:打开编码器。avcodec_send_frame:将AVF原创 2021-04-09 08:59:29 · 359 阅读 · 0 评论 -
音频处理基本概念及音频重采样
音频处理基本概念及音频重采样目录重点问题重采样什么是重采样为什么要重采样可调节的参数对应参数解析采样率采样格式及量化精度(位宽)分⽚(plane)和打包(packed)声道分布(channel_layout)⾳频帧的数据量计算⾳频播放时间计算FFmpeg重采样API⾳频重采样⼯程范例简单范例(resample)复杂范例1. 重点问题如何进⾏重采样采样率不⼀样的时候pts怎么处理官⽅参考⽂档:http://ffmpeg.org/doxyg原创 2021-04-08 22:23:37 · 2303 阅读 · 0 评论 -
AVIO内存输入模式
AVIO内存输入模式目录介绍代码示例1. 介绍AVIO内存输入模式是将内存区作输入输出,当启用内存IO模式后(即ifmt_ctx->pb有效时),将会忽略avformat_open_input()第二个参数url的值。而对于其他一些场合,当有效音视频数据位于内存,而这片内存并无一个URL属性可用时,则只能使用内存IO模式来取得输入数据。2. 代码示例#include <stdio.h>#include <stdlib.h>#include &l原创 2021-03-30 08:02:21 · 358 阅读 · 0 评论 -
音频解码和视频解码
音频解码目录⾳频解码过程FFmpeg流程关键函数关键数据结构avcodec编解码API介绍avcodec_send_packetavcodec_receive_frame代码实现1. ⾳频解码过程⾳频解码过程如下图所示2. FFmpeg流程1. 关键函数avcodec_find_decoder:根据指定的AVCodecID查找注册的解码器。av_parser_init:初始化AVCodecParserContext。avcodec_alloc_c原创 2021-03-28 22:14:26 · 545 阅读 · 0 评论 -
H.264基础知识及视频码流解析
H.264基础知识及视频码流解析目录H.264概述H264相关概念H264压缩方式H264分层结构H264码流结构H264的NAL单元H.264视频码流解析转载:入门理解H264编码视音频数据处理入门:H.264视频码流解析1. H.264概述编码是为了将数据进行压缩,这样在传输的过程中就不会使资源被浪费。用一个简单的例子来说明编码的必要性:当你此刻显示器正在播放一个视频,分辨率是1280720,帧率是25,那么一秒所产生正常的数据大小为:1280720(位像素)*25(原创 2020-07-30 21:35:21 · 6224 阅读 · 0 评论 -
AAC音频基础知识及码流解析
AAC音频基础知识及码流解析目录AAC简介1. AAC简介AAC是高级音频编码(Advanced Audio Coding) 的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术。由Fraunhofer IIS、Dolby Laboratories、AT&T、Sony等公司共同开发,目的是取代MP3格式。2000年,MPEG-4标准出现后,AAC重新集成了其特性,加入了SBR技术和PS技术,为了区别于传统的MPEG-2 AAC又称为MPEG-4 AAC。AAC是新原创 2020-08-08 20:51:35 · 5203 阅读 · 0 评论 -
ffmpeg解封装及解码实战
ffmpeg解封装及解码实战目录封装格式相关函数解封装流程补充分离AAC和H2641. 封装格式相关函数1. 基本概念2. 相关函数1. avformat_alloc_context();负责申请一个AVFormatContext结构的内存,并进行简单初始化2. avformat_free_context();释放AVFormatContext及其所有流。3. avformat_close_input();关闭解复用器。关闭后就不再需要使用avformat_free_cont原创 2021-03-24 22:32:33 · 531 阅读 · 0 评论 -
ffmpeg内存模型及AVPacket和AVFrame API基本使用
ffmpeg内存模型目录ffmpeg内存模型AVPacket常用APIAVFrame常用API1. ffmpeg内存模型/** * Supply raw packet data as input to a decoder. * * Internally, this call will copy relevant AVCodecContext fields, which can * influence decoding per-packet, and apply them whe原创 2021-03-24 08:35:11 · 413 阅读 · 0 评论 -
FFmpeg入门
FFmpeg入门播放器框架常见音视频概念ffmpeg库简介ffmpeg函数简介ffmpeg注册方式ffmpeg数据结构简介ffmpeg常用结构体简介1. 播放器框架播放器框架图,用到的api和结构体后面介绍。2. 常见音视频概念1. 常用音视频术语容器/文件(Conainer/File): 即特定格式的多媒体文件,比如mp4、 flv、 mkv等。媒体流(Stream): 表示时间轴上的一段连续数据,如一段声音数据、一段视频数据或一段字幕数据,可以是压缩的,也可以是原创 2021-03-22 09:05:51 · 1041 阅读 · 0 评论 -
SDL音视频渲染
SDL音视频渲染目录SDL简介SDL窗口显示SDL Event事件SDL ThreadSDL PCM播放SDL YUV播放1. SDL基本介绍1. SDL简介SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、 Windows、 Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、 媒体播原创 2021-03-21 18:51:55 · 558 阅读 · 0 评论