ffmpeg从入门到精通 下载_最快入门的FFmpeg教程(下载即可用)

3edc95741539c56c5c31a2bb00d6b921.png

欢迎star的项目

  • 一个cpp文件就可以理解的渲染管线,1000行代码深刻理解渲染管线
  • 最快入门的FFmpeg教程 下载即可运行的八个demo 这里下载: https://github.com/wlxklyh/FFMpegStudy

测试视频:

87e3bbb8e1d7b9e2d7956b120a9f97f3.png

一、Tutorial1——视频截帧保存

https://github.com/wlxklyh/FFMpegStudy/blob/master/win/Tutorial1 这个是9361帧的截图

aafd82d5461d854deb49c70717094c6a.png

流程说明: 1. 初始化 av_register_all() AVFormatContext pFormatCtx = avformat_alloc_context() 2. 打开文件(会读取header) avformat_open_input(pFormatCtx,filepath) 3. 检查和获取流信息的API avformat_find_stream_info() av_dump_format() 4. 从pFormatCtx中得到那个streamsindex是视频流 pFormatCtx->stream[i]->codec->codec_type == ACMEIDIA_TYPE_VIDEO 5. 从视频流里面得到CodeContext 编解码上下文 6. 从而得到解码器 7. 读取帧 av_read_frame 得到avpacket(存储的可能是视频流 也可能是音频流) 8. 判断avpacket是不是视频流 9. 从读取出的avpacket中读取AVFrame出来 10. 用sws_scale转AVFrame的格式 大多可能是YUV 我们要转成RGB保存 11. SaveFrame fwrite(frame->data[0]+pFrame->linesize[0],1,width*3,pFile)

#include 

二、Tutorial2——视频显示到屏幕(SDL)

https://github.com/wlxklyh/FFMpegStudy/blob/master/win/Tutorial2

35f9fa14772076480bca0728ab5db2dd.gif

跟Tutorial1大致一致 除了SDL部分 和 Frame编码为YUV 1. SDL部分

SDL_Init
  1. Frame编码为YUV 注意Frame的初始化 格式是PIX_FMT_YUV420P avpicture_get_size(PIX_FMT_YUV420P, avcodecContext->width, avcodecContext->height); sws_scale 转换的时候格式是PIX_FMT_YUV420P

流程说明: 1. 初始化编码器库 2. 打开视频文件 avformat_open_input 3. 查找视频流 pFormatCtx->stream[i]->codec_type == VEDIO 4. 得到解码器上下文 pFormatCtx->stream[vedioIndex]->codec 5. 得到解码器 avcode_find_decoder(avVideoCondecCtx) 6. 打开解码器 avcode_open 7. 帧初始化 AVFrame avpicture_fill 8. SDL初始化 SDL_Surface SDL_Overlay 9. 初始化一个packet av_new_packet 10. 逐帧读取 av_rean_frame 1. 如果是视频流avcodec_decode_video 解码 2. 转换上下文 swscontext 3. sws_scale转换成NowYUVFrame 4. 赋值SDL_Overlay 5. 显示SDL_DisplayYUVOverlay

#include 

三、Tutorial3——播放音频

https://github.com/wlxklyh/FFMpegStudy/blob/master/win/Tutorial3 播放视频的代码请看Tutorial2这里只说播放音频的

跟播放视频不一样的地方: 1. 要解码音频 然后塞入到一个队列 2. 读取音频的是在另外一个线程的回调 所以主线程是生产者(生产packet)、音频线程是消费者(消耗packet) 3. 主线程解码音频的过程跟解码视频的类似 逐帧解码后塞入队列packet_queue_put 4. 回调是异步线程需要取队列packet_queue_get 然后

音频解码流程:

  1. 查找音频流
  2. 得到音频流解码器上下文
  3. 得到音频解码器
  4. 打开音频解码器
  5. 帧初始化
  6. 逐帧得到音频的packet
  7. 把音频packet塞入队列
  8. 回调函数audio_callback
  9. 取出一帧的数据:audio_decode_frame
    1. 从队列里面取出一个:packetpacket_queue_get
    2. 音频解码:avcodec_decode_audio4
    3. 获取音频buff大小:av_samples_get_buffer_size
    4. 根据buff大小:Frame->data 取出来
  10. 往音频线程的 stream赋值
#include 

四、Tutorial4、5、6、7——创建线程、同步视频、同步音频、快进

先看着代码: https://github.com/wlxklyh/FFMpegStudy/blob/master/win/Tutorial456

引用

1、雷神的FFMpeg最小demo https://blog.csdn.net/leixiaohua1020/article/details/10528443

2、FFmpeg Tutorial.pdf 中文翻译文档 https://github.com/wlxklyh/FFMpegStudy/blob/master/FFmpeg%20Tutorial.pdf

3、视频连接:

87e3bbb8e1d7b9e2d7956b120a9f97f3.png

后面学习FFMpeg(win)都从这里拷贝出来 不用管环境和头文件的问题。

欢迎加微信讨论(备注Gituhb)

https://u.wechat.com/MLz38VV_N_mCtcIoBB7Nhls (二维码自动识别)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值