文档章节

ffmpeg 笔记

明月惊鹊
 明月惊鹊
发布于 2015/08/18 16:45
字数 748
阅读 389
收藏 1

 ffmpeg -list_devices true -f dshow -i dummy

USB2.0 PC CAMERA

ffplay -ar 16000 -channels 1 -f s16le -i xxx.pcm

ffplay -f rawvideo -video_size 1280x720 xxx.yuv

 

ffmpeg -r 25 -f dshow -s 640x480 -i video="USB2.0 PC CAMERA":audio="麦克风 (USB2.0 MIC)" -vcodec libx264 -b 600k -acodec libvo_aacenc -channels 1 -ab 128k -f flv rtmp://192.168.1.2/record/pi

 

ffmpeg -f dshow -i video="USB2.0 PC CAMERA":audio="麦克风 (USB2.0 MIC)" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec libvo_aacenc -channels 1 -ab 128k -f flv rtmp://192.168.1.2/record/pi

 

av_rescale_q(a,b,c)是用来把时间戳从一个时基调整到另外一个时基时候用的函数。它基本的动作是计算a*b/c

 

参看最新版本的ffmpeg,av_read_frame是对av_read_packet的封装,它就是frame不是packet 。需要对ffmpeg里面的几个概念澄清一下:

frame:是指直观上完整的视频帧或音频帧,注意可以指视频也可以指音频,一般是未解码的;

packet:是形式上的概念,指视频或音频的包,这里的包未必是完整的完整的视频帧或音频帧,可能是一帧视频的一部分。

picture:指直观上完整图象,只能指视频,简言之,picture是解压后的视频frame;

特别要区分frame和packet。frame很好理解,直观的帧。但frame有两个问题:一是每个压缩后的frame通常都比较大,特别是视频;二是每个frame的压缩后的大小都不一样; 这两个原因都使frame不便于存储和传输,所以就引入了packet的概念。

packet是文件容器和传递层面的一个技术概念,而frame是一般人都能理解的直观概念。对于视频,一个frame通常会被划分为等大的多个packet,但是它们的时间戮是相同的。

ffmpeg中av_read_frame读出的完整的帧,不是包,在函数内部已经保证了帧的完整性。对于视频,av_read_frame读出的就是完整的一帧视频,不会是半帧或多帧;对于音频,av_read_frame读出的可能是多帧,但也是完整的,不存在半帧的情况。

 

av_rescale_rnd  a*b/c 

 

 

filter 语法  

; 表示不同线路的filter

, 表示同一个线路的filter

: 分割同一个filter中的参数,

If the option value itself is a list of items (e.g. the format filter takes a list of pixel formats), the items in the list are usually separated by ’|’.

A filter with no input pads is called a "source", a filter with no output pads is called a "sink".

 

 

AVFormatContext = {AVInputFormat, AVOutputFormat, AVIOContext};

AVIOContext = {read, write, seek}

AVInputFormat = {read_header,read_packet,read_close,read_seek};

AVOutputFormat = {write_header, write_packet, write_trailer, interleave_packet}

URLContext = {interrupt_callback, rw_timeout}

URLProtocol = {url_read, url_write, url_seek, url_close}

libavdevices 其实就是muxer/demuxer 归到avformat里

 

格式回归协议:(format - avio context)

AVFormatContext <<--- avformat_open_input -> avio_open2 {ffurl_open 关联了URLContext;  ffio_fdopen 生成了AVIOContext; 并且把URLProtocol某些成员的信息赋值给AVIOContext.} -> av_probe_input_buffer 获取其他信息 ->avio_read->AVIOContext->

 

av_read_packet --->>  s->iformat->read_packet(AVFormatContext*, pkt) ->调用avio_r8(ctx->pb,);                      绕了半天format终于回归avioctx;

av_write_packet -->>  av_write_frame -> ctx->oformat->write_packet -> 调用avio_w8(ctx->pb,);

 

AVIOContext  <<----->> AVInputFormat \ AVOutputFormat

*s = avio_alloc_context(buffer, buffer_size, h->flags & AVIO_FLAG_WRITE, h,

                (void*)ffurl_read, (void*)ffurl_write, (void*)ffurl_seek);

 

ffmpeg accelerate http://stackoverflow.com/questions/23289157/how-to-use-hardware-acceleration-with-ffmpeg

mac:

avcodec_find_decoder_by_name("h264_vda");

linux:

avcodec_find_decoder_by_name("h264_vdpau");

avcodec_find_decoder_by_name("h264_vaapi")

 

© 著作权归作者所有

上一篇: golang 笔记
下一篇: ffmpeg.exe 笔记
明月惊鹊
粉丝 28
博文 68
码字总数 14850
作品 0
广州
高级程序员
私信 提问
java在linux上调用ffmpeg命令行组合图片为视频时无法加入音频!

在window上本地测试时,音频时可以加入视频中的;当上载到Linux上后,居然加不进音频;用putty直接执行又没问题,不知何故?运行时代码: 命令行: ffmpeg/bin/ffmpeg -y -r 1.28 -f image2...

e国阳光
2016/10/15
568
3
php 安装ffmpeg-php

下载ffmepg源码包和ffmpeg-php包,如下: #wget http://www.ffmpeg.org/releases/ffmpeg-export-snapshot.tar.bz2 #wget http://downloads.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0......

Thebreezecomes
2018/06/28
0
0
最简单的基于FFmpeg的移动端例子:IOS 视频转码器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/47072673 ===================================================== 最简单的...

雷霄骅
2015/08/01
0
0
最简单的基于FFmpeg的移动端例子附件:Android 自带播放器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leixiaohua1020/article/details/47056733 ===================================================== 最简单的...

雷霄骅
2015/07/25
0
0
最新FFmpeg音视频核心技术精讲与实战(完整版)

第1章 课程导学与准备工作 全民娱乐时代,需要音视频等多媒体产品层出不穷,但会处理音视频数据的工程师却极度匮乏,进入音视频开发领域正当时,这门课程就是为这样的你而生。来吧!加入我们...

L272339
01/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【阴阳师】真蛇10层记录

蛇切黑体系 追月神 散件一速,速度越高越好(220+) 镰鼬 招财二速,速度211以上; 山兔 火灵三速,速度180-200均可; 丑女 心眼四速,速度170左右即可; 大蛇 蚌精暴击套。速度高于阴阳师即...

Areya
15分钟前
3
0
js动态设置元素高度

this.$refs.xxx.style.height= this.contentHeight; 元素需要绑定

Carbenson
52分钟前
2
0
今天的学习

今天学到了ci框架中的查询语句的where条件语句: 1、$this->db->select('')->from('')->where('id = ??')->get()->result_array();2、$this->db->select('')->from('')->where('id', '??'......

墨冥
今天
2
0
MySQL在高并发下的订单撮合、系统使用、共享锁与排他锁保证数据一致性

前序 距离上次择文发表,两月余久。2018年也即将要结束了,目前的工作依然是与区块链应用相关的,也很荣幸在9月初受邀签约出版暂名为《区块链以太坊DApp实战开发》一书,预计在明年年初出版。...

我最喜欢三大框架
今天
2
0
深入理解Flutter多线程

该文章属于<简书 — 刘小壮>原创,转载请注明: <简书 — 刘小壮> https://www.jianshu.com/p/54da18ed1a9e Flutter默认是单线程任务处理的,如果不开启新的线程,任务默认在主线程中处理。 ...

刘小壮
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部