当前位置:文档之家› ffmpeg时间戳

ffmpeg时间戳

ffmpeg时间戳
ffmpeg时间戳

FFmpeg里有两种时间戳:DTS(Decoding Time Stamp)和PTS(Presentation Time Stamp)。顾名思义,前者是解码的时间,后者是显示的时间。要仔细理解这两个概念,需要先了解FFmpeg中的packet和frame的概念。

FFmpeg中用AVPacket结构体来描述解码前或编码后的压缩包,用AVFrame结构体来描述解码后或编码前的信号帧。对于视频来说,AVFrame就是视频的一帧图像。这帧图像什么时候显示给用户,就取决于它的PTS。DTS是AVPacket里的一个成员,表示这个压缩包应该什么时候被解码。如果视频里各帧的编码是按输入顺序(也就是显示顺序)依次进行的,那么解码和显示时间应该是一致的。可事实上,在大多数编解码标准(如H.264或HEVC)中,编码顺序和输入顺序并不一致。于是才会需要PTS和DTS这两种不同的时间戳。

FFmpeg里有两种时间戳:DTS(Decoding Time Stamp)和PTS(Presentation Time Stamp)。顾名思义,前者是解码的时间,后者是显示的时间。要仔细理解这两个概念,需要先了解FFmpeg中的packet和frame的概念。

FFmpeg中用AVPacket结构体来描述解码前或编码后的压缩包,用AVFrame结构体来描述解码后或编码前的信号帧。对于视频来说,AVFrame就是视频的一帧图像。这帧图像什么时候显示给用户,就取决于它的PTS。DTS是AVPacket里的一个成员,表示这个压缩包应该什么时候被解码。如果视频里各帧的编码是按输入顺序(也就是显示顺序)依次进行的,那么解码和显示时间应该是一致的。可事实上,在大多数编解码标准(如H.264或HEVC)中,编码顺序和输入顺序并不一致。于是才会需要PTS和DTS这两种不同的时间戳。

视频的显示和存放原理

对于一个电影,帧是这样来显示的:I B B P。现在我们需要在显示B帧之前知道P帧中的信息。因此,帧可能会按照这样的方式来存储:IPBB。这就是为什么我们会有一个解码时间戳和一个显示时间戳的原因。解码时间戳告诉我们什么时候需要解码,显示时间戳告诉我们什么时候需要显示。所以,在这种情况下,我们的流可以是这样的:

PTS: 1 4 2 3

DTS: 1 2 3 4

Stream: I P B B

通常PTS和DTS只有在流中有B帧的时候会不同。

DTS和PTS

音频和视频流都有一些关于以多快速度和什么时间来播放它们的信息在里面。音频流有采样,视频流有每秒的帧率。然而,如果我们只是简单的通过数帧和乘以帧率的方式来同步视频,那么就很有可能会失去同步。于是作为一种补充,在流中的包有种叫做DTS(解码时间戳)和PTS(显示时间戳)的机制。为了这两个参数,你需要了解电影存放的方式。像MPEG等格式,使用被叫做B帧(B表示双向bidrectional)的方式。另外两种帧被

叫做I帧和P帧(I表示关键帧,P表示预测帧)。I帧包含了某个特定的完整图像。P帧依赖于前面的I帧和P帧并且使用比较或者差分的方式来编码。B帧与P帧有点类似,但是它是依赖于前面和后面的帧的信息的。这也就解释了为什么我们可能在调用

avcodec_decode_video以后会得不到一帧图像。

ffmpeg中的时间单位

AV_TIME_BASE

ffmpeg中的内部计时单位(时间基),ffmepg中的所有时间都是于它为一个单位,比如AVStream中的duration即以为着这个流的长度为duration个AV_TIME_BASE。AV_TIME_BASE定义为:

#define AV_TIME_BASE 1000000

AV_TIME_BASE_Q

ffmpeg内部时间基的分数表示,实际上它是AV_TIME_BASE的倒数。从它的定义能很清楚的看到这点:

#define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE}

AVRatioal的定义如下:

typedef struct AVRational{

int num; //numerator

int den; //denominator

} AVRational;

ffmpeg提供了一个把AVRatioal结构转换成double的函数:

static inline double av_q2d(AVRational a){

/**

* Convert rational to double.

* @param a rational to convert

**/

return a.num / (double) a.den;

}

现在可以根据pts来计算一桢在整个视频中的时间位置:

timestamp(秒) = pts * av_q2d(st->time_base)

计算视频长度的方法:

time(秒) = st->duration * av_q2d(st->time_base)

这里的st是一个AVStream对象指针。

时间基转换公式

?t imestamp(ffmpeg内部时间戳) = AV_TIME_BASE * time(秒)

?t ime(秒) = AV_TIME_BASE_Q * timestamp(ffmpeg内部时间戳)

所以当需要把视频跳转到N秒的时候可以使用下面的方法:

int64_t timestamp = N * AV_TIME_BASE;

2

av_seek_frame(fmtctx, index_of_video, timestamp, AVSEEK_FLAG_BACKWARD); ffmpeg同样为我们提供了不同时间基之间的转换函数:

int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)

这个函数的作用是计算a * bq / cq,来把时间戳从一个时基调整到另外一个时基。在进行时基转换的时候,我们应该首选这个函数,因为它可以避免溢出的情况发生。

ffmpeg编译、使用与常见问题

FFMPEG编译、使用与常见问题 一. Linux下FFMPEG的安装与测试 (1) 二. FFMPEG编译中出现的一些问题与解决方法 (4) 三. FFMpeg简介及命令选项参数 (8) 四. FFMPEG与x264的编译 (13) 一.Linux下FFMPEG的安装与测试 a. 先装mp3在linux下的包:lame-3.97.tar.gz; tar -xvzf lame-3.97.tar.gz; cd lame-3.97; ./configure --enable-shared --prefix=/usr/; make; make install; b. 支持Ogg Vorbis: as4自带相应的rpm包,你可以安装一下如下rpm包: libvorbis, libvorbis-devel,libogg, libogg-devel 一般情况下as4都会安装 c. 支持xvid x264,现在最流行的两种高质量的压缩格式 xvid的编译安装 wget https://www.doczj.com/doc/688219546.html,/downloads/xvidcore-1.1.0.tar.gz tar zvxf xvidcore-1.1.0.tar.gz cd xvidcore-1.1.2/build/generic ./configure --prefix=/usr --enable-shared make make install x264的获取用git: git clone git://https://www.doczj.com/doc/688219546.html,/x264.git cd x264 ./configure --prefix=/usr --enable-shared make make install3 d. AC3和dts编码的支持

ffmpeg之参数详解29

本文讲述参数详解 1. ffmpeg.exe -i F:\闪客之家\闪客之 歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\11.flv ffmpe g -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\tes t.flv 使用-ss参数作用(time_off set the start time offset),可以从指定时间点开始转换任务。如: 转换文件格式的同时抓缩微图: ffmpeg -i "test.avi " -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg ' 对已有flv抓图: ffmpeg -i "test.flv " -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg ' -ss后跟的时间单位为秒Ffmpeg转换命令 ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 17 6x144 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp 或者 ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp ffmpeg参数设定解说 -bitexact 使用标准比特率 -vcodec xvid 使用xvid压缩 -s 320x240 指定分辨率 -r 29.97 桢速率(可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97) 画面部分,选其一 -b <比特率> 指定压缩比特率,似乎ffmpeg是自动VBR的,指定了就大概是平均比特率,比如768,1500这样的就是原来默认项目中有的 -qscale <数值> 以<数值> 质量为基础的VBR,取值0.01-255,约小质量越好 -qmin <数值> 设定最小质量,与-qmax(设定最大质量)共用,比如-qmin 10 -qmax 31 -sameq 使用和源同样的质量声音部分 -acodec aac 设定声音编码 -ac <数值> 设定声道数,1就是单声道,2就是立体声,转换单声道的TVrip可以用1(节省一半容量),高品质的DVDrip就可以用2 -ar <采样率> 设定声音采样率,PSP只认24000 -ab <比特率> 设定声音比特率,前面-ac设为立体声时要以一半比特率来设置,比如192kbps的就设成96,转换君默认比特率都较小,要听到较高品质声音的话建议设到160kbps(80)以上 -vol <百分比> 设定音量,某些DVDrip的AC3轨音量极小,转换时可以用这个提高音量,比如200就是原来的2倍这样,要得到一个高画质音质低容量的MP4的话,首先画面最好不要用固定比特率,而用VBR参数让程序自己去判断,而音质参数可以在原来的基础上提升一点,听起来要舒服很多,也不会太大(看情况调整例子:ffmpeg -y -i "1.avi " -title "Test

用ffmpeg转换视频格式

用?mpeg转换视频格式deanraccoon@https://www.doczj.com/doc/688219546.html, 2011年5月9日 目录

1实用?fmpeg命令 转自 https://www.doczj.com/doc/688219546.html,/blog/19-ffmpeg-commands-for-all-needs 转自 https://www.doczj.com/doc/688219546.html,/spip.php?article36 1.1查看视频文件信息 ffmpeg-i video.avi 1.2N个图片转化视频 ffmpeg-f image2-i image%d.jpg video.mpg 这个命令把当前文件夹下所有图片转成视频文件 1.3视频转化图片 ffmpeg video.mpg image%d.jpg 图片格式包括:PGM,PPM,PAM,PGMYUV,JPEG,GIF,PNG,TIFF,SGI 1.4视频转为iphone可播放的格式 ffmpeg source_video.avi input-acodec aac-ab128kb-vcodec mpeg4-b1200kb-mbd2-flags +4mv+trell-aic2-cmp2-subcmp2-s320x180-title X final_video.mp4 参数含义: ?源文件:source video.avi ?音频编码:aac ?音频的比特率:128kb/s ?视频编码:mpeg4 ?视频比特率:1200kb/s ?视频大小:320px par180px ?结果文件:?nal video.mp4 1.5视频转换成psp格式 ffmpeg-i source_video.avi-b300-s320x240-vcodec xvid-ab32-ar24000-acodec aac final_video.mp4参数含义: ?源文件:source video.avi

ffmpeg用法

ffmpeg.exe -i F:\闪客之家\闪客之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\11.flv ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 使用-ss参数作用(time_off set the start time offset),可以从指定时间点开始转换任务。如: 转换文件格式的同时抓缩微图: ffmpeg -i "test.avi " -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg ' 对已有flv抓图: ffmpeg -i "test.flv " -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg ' -ss后跟的时间单位为秒Ffmpeg转换命令 ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x1 44 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp 或者 ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp ffmpeg参数设定解说 -bitexact 使用标准比特率 -vcodec xvid 使用xvid压缩 -s 320x240 指定分辨率 -r 29.97 桢速率(可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97) 画面部分,选其一 -b <比特率> 指定压缩比特率,似乎ffmpeg是自动VBR的,指定了就大概是平均比特率,比如768,1500这样的就是原来默认项目中有的 -qscale <数值> 以<数值> 质量为基础的VBR,取值0.01-255,约小质量越好 -qmin <数值> 设定最小质量,与-qmax(设定最大质量)共用,比如-qmin 10 -qmax 31 -sameq 使用和源同样的质量声音部分 -acodec aac 设定声音编码 -ac <数值> 设定声道数,1就是单声道,2就是立体声,转换单声道的TV rip可以用1(节省一半容量),高品质的DVDrip就可以用2 -ar <采样率> 设定声音采样率,PSP只认24000 -ab <比特率> 设定声音比特率,前面-ac设为立体声时要以一半比特率来设置,比如192kbps的就设成96,转换君默认比特率都较小,要听到较高品质声音的话建议设到160kbps (80)以上 -vol <百分比> 设定音量,某些DVDrip的AC3轨音量极小,转换时可以用这个提高音量,比如200就是原来的2倍这样,要得到一个高画质音质低容量的MP4的话,首先画面最好不要用固定比特率,而用VBR参数让程序自己去判断,而音质参数可以在原来的基础上提升一点,听起来要舒服很多,也不会太大(看情况调整例子:ffmpeg -y -i "1.avi " -title "Test " -vcodec xvid -s 368x208 -r 29.97 -b 1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol 200 -f psp -muxvb 768 "1.*** "

ffmpeg完全安装

Linux下ffmpeg的完整安装: 首先安装各种解码器 1.安装MP3音频编码器lame lame-398-1.tar.gz Url:https://www.doczj.com/doc/688219546.html,/project/showfiles.php?group_id=290&package_id=309 tar zxvf lame-398-1.tar.gz cd lame-398-1 ./configure --enable-shared --prefix=/usr make & make install 2.安装汇编优化器yasm,可能安装x264要用到 https://www.doczj.com/doc/688219546.html,/projects/yasm/releases/ tar zxvf yasm-1.3.0.tar.gz cd yasm-1.3.0 ./configure --enable-shared --prefix=/usr make & make install 3.安装ogg库,libogg Url:https://www.doczj.com/doc/688219546.html,/releases/ogg/libogg-1.3.2.tar.gz tar zxvf libogg-1.3.2.tar.gz cd libogg-1.3.2 ./configure --enable-shared --prefix=/usr make & make install 4.安装vorbis编解码器,libvorbis Url:https://www.doczj.com/doc/688219546.html,/releases/vorbis/libvorbis-1.3.3.tar.gz tar zxvf libvorbis-1.3.3.tar.gz cd libvorbis-1.3.3 ./configure --enable-shared --prefix=/usr make & make install /*********************************这里是分隔符**************************/ 出错提示: *** Could not run Ogg test program, checking why... *** The test program compiled, but did not run. This usually means *** that the run-time linker is not finding Ogg or finding the wrong *** version of Ogg. If it is not finding Ogg, you'll need to set your *** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point *** to the installed location Also, make sure you have run ldconfig if that *** is required on your system *** *** If you have an old version installed, it is best to remove it, although *** you may also be able to get things to work by modifying LD_LIBRARY_PATH configure: error: must have Ogg installed! 解决: # vi /etc/ld.so.conf

ffmpeg命令详解

ffmpeg命令详解 一、ffmpeg命令详解 ffmpeg非常强大,轻松几条命令就可以完成你的工作。 把darkdoor.[001-100].jpg序列帧和001.mp3音频文件利用mpeg4编码方式合成视频文件darkdoor.avi: $ ffmpeg -i 001.mp3 -i darkdoor.%3d.jpg -s 1024x768 -author skypp -vcodec mpeg4 darkdoor.avi ffmpeg还支持mov格式: $ ffmpeg -i darkdoor.%3d.jpg darkdoor.mov 要查看你的ffmpeg支持哪些格式,可以用如下命令: $ ffmpeg -formats | less 还可以把视频文件导出成jpg序列帧: $ ffmpeg -i bc-cinematic-en.avi example.%d.jpg debian下安装ffmpeg很简单: #apt-get install ffmpeg ###################################### 下面是转来的使用说明,慢慢研究吧,嘿嘿 ###################################### ffmpeg使用语法 ffmpeg使用语法: ffmpeg [[options][`-i' input_file]]... {[options] output_file}... 如果没有输入文件,那么视音频捕捉就会起作用。 作为通用的规则,选项一般用于下一个特定的文件。如果你给–b 64选项,改选会设置下一个视频速率。对于原始输入文件,格式选项可能是需要的。 缺省情况下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。3.选项 a) 通用选项

linux下安装FFMPEG全纪录

怎样安装ffmpeg? 1,cd /usr/local/src 下载最新版本的ffmpeg: svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg 2,cd ffmpeg ./configure make && make install 以上是安装不带任何解码库的ffmpeg。 使用ffmpeg命令进行测试安装是否成功。例如: ffmpeg --help II,要加入则在./configure后面加上选项,前提是已经编译安装了这种编码库。 [root@ip-208-109-221-163 ffmpeg]# ffmpeg --help ffmpeg: error while loading shared libraries: libavdevice.so.52: cannot open shared object file: No such file or directory 找不到libavdevice.so.52库。 解决方案:(成功解决问题的方案) 首先到/usr/local/lib/目录下去查看是否有libavdevice.so.52,然后设置环境变量:export LD_LIBRARY_PA TH=/usr/local/lib/ 注意:这种方案经验证,关闭终端再打开终端,这个环境变量就失效了,也就是说只对当前终端有效

最终解决方案: //********************************************** 因为找不到库文件。编辑/etc/ld.so.conf,加入一行: /usr/local/lib 执行ldconfig命令即可。 //************************************** 然后添加软链接。 ln -s /usr/local/lib/libavdevice.so.52 /usr/lib/libavdevice.so.52 安装成功后,测试: ffmpe g -i /home/admn/public_html/ConvertVedioT est/rjmj.mpeg -ab 56 -ar 22050 -b 500 -r 15 -qscale 4 -s 640*480 rjmj.flv 转换成功。 等等。 ln -s /usr/local/lib/libavformat.so.50 /usr/lib/libavformat.so.50 ln -s /usr/local/lib/libavcodec.so.51 /usr/lib/libavcodec.so.51 ln -s /usr/local/lib/libavutil.so.49 /usr/lib/libavutil.so.49 ln -s /usr/local/lib/libmp3lame.so.0 /usr/lib/libmp3lame.so.0 ln -s /usr/local/lib/libavformat.so.51 /usr/lib/libavformat.so.51

ffmpeg 常用命令汇总

ffmpeg 常用命令汇总 2016-06-15 09:11 17116人阅读评论(0)收藏举报 (经常用到ffmpeg 做一些视频数据的处理转换等,用来做测试,今天总结了一下, 参考了网上部分朋友的经验,一起在这里汇总了一下,有需要的朋友可以收藏测试 一下,有问题欢迎在下面回帖交流,谢谢;by ternence.hsu) 1、ffmpeg使用语法 命令格式: ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件] ffmpeg [[options][`-i' input_file]]... {[options] output_file}... 1、参数选项: (1) -an: 去掉音频 (2) -acodec: 音频选项,一般后面加copy表示拷贝 (3) -vcodec:视频选项,一般后面加copy表示拷贝 2、格式: (1) h264: 表示输出的是h264的视频裸流 (2) mp4: 表示输出的是mp4的视频 (3)mpegts: 表示ts视频流 如果没有输入文件,那么视音频捕捉(只在Linux下有效,因为Linux下把音视频设备当作文件句柄选项一般用于下一个特定的文件。如果你给–b 64选项,改选会设置下一个视频速率。对于原始输入下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。(by ternence.hsu) 2、视频转换 H264视频转ts视频流 ffmpeg -i test.h264 -vcodec copy -f mpegts test.ts H264视频转mp4 ffmpeg -i test.h264 -vcodec copy -f mp4 test.mp4 ts视频转mp4 ffmpeg -i test.ts -acodec copy -vcodec copy -f mp4 test.mp4 mp4视频转flv ffmpeg -i test.mp4 -acodec copy -vcodec copy -f flv test.flv

ffmpeg学习笔记

准备工作: 1.登录https://www.doczj.com/doc/688219546.html,/builds/下载对应的开发版本 如xp32位系统下载FFmpeg 32-bit Dev Versions与FFmpeg 32-bit Shared Versions 中dev版本里有头文件与静态lib库,在开发的时候包含进工程,share版本里有程序运行发布时候需要的dll动态库。 2.在vs2010中配置inclue与lib 工程→属性→配置属性→c/c++→常规→附加包含目录→添加dev版本中的include路径 工程→属性→配置属性→链接器→常规→附加库目录→添加dev版本中的lib 路径 工程→属性→配置属性→链接器→输入→附加依赖项→添加dev版本中的lib 文件,具体包括:avcodec.lib,avformat.lib,avdevice.lib,avfilter.lib,avutil.lib,postproc.lib,swresample.lib,swscale.lib 3.在工程中引用ffmpeg头文件,因为ffmepeg是纯C程序,因此,在C++中包含其头文件需要加上extern “C”标识符,如: extern"C" { #include"libavformat/avformat.h" #include"libavcodec/avcodec.h" } 4.工程调试运行时需要将dll添加至工程目录,具体包括:avcodec-5 5.dll, avdevice-55.dll,avfilter-3.dll,avformat-55.dll,avutil-52.dll, postproc-52.dll,swresample-0.dll,swscale-2.dll 5.程序编译会报无法打开包括文件:“inttypes.h”: No such file or directory 原因是因为VS2010不支持inttypes.h。 解决方法删除,并在之前添加如下代码

ffmpeg开发指南(经典)

ffmpeg开发指南(使用 libavformat 和 libavcodec) Ffmpeg 中的Libavformat和 libavcodec库是访问大多数视频文件格式的一个很好的方法。不幸的是,在开发您自己的程序时,这套库基本上没有提供什么实际的文档可以用来作为参考(至少我没有找到任何文档),并且它的例程也并没有太多的帮助。 这种情况意味着,当我在最近某个项目中需要用到 libavformat/libavcodec 库时,需要作很多试验来搞清楚怎样使用它们。这里是我所学习的--希望我做的这些能够帮助一些人,以免他们重蹈我的覆辙,作同样的试验,遇到同样的错误。你还可以从这里下载一个demo程序。我将要公开的这部分代码需要0.4.8 版本的ffmpeg库中的 libavformat/libavcodec 的支持(我正在写最新版本)。如果您发现以后的版本与我写的程序不能兼容,请告知我。 在这个文档里,我仅仅涉及到如何从文件中读入视频流;音频流使用几乎同样的方法可以工作的很好,不过,我并没有实际使用过它们,所以,我没于办法提供任何示例代码。 或许您会觉得奇怪,为什么需要两个库文件 libavformat 和 libavcodec :许多视频文件格式(AVI就是一个最好的例子)实际上并没有明确指出应该使用哪种编码来解析音频和视频数据;它们只是定义了音频流和视频流(或者,有可能是多个音频视频流)如何被绑定在一个文件里面。这就是为什么有时候,当你打开了一个AVI文件时,你只能听到声音,却不能看到图象--因为你的系统没有安装合适的视频解码器。所以, libavformat 用来处理解析视频文件并将包含在其中的流分离出来,而libavcodec 则处理原始音频和视频流的解码。 1打开视频文件: 首先第一件事情--让我们来看看怎样打开一个视频文件并从中得到流。我们要做的第一件事情就是初始化libavformat/libavcodec: av_register_all(); 这一步注册库中含有的所有可用的文件格式和编码器,这样当打开一个文件时,它们才能够自动选择相应的文件格式和编码器。要注意你只需调用一次 av_register_all(),所以,尽可能的在你的初始代码中使用它。如果你愿意,你可以仅仅注册个人的文件格式和编码,不过,通常你不得不这么做却没有什么原因。 2下一步,打开文件: AVFormatContext *pFormatCtx; const char *filename="myvideo.mpg"; // 打开视频文件 if(av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL)!=0) handle_error(); // 不能打开此文件

ffmpeg快速命令使用

ffmpeg使用语法 ffmpeg [[options][`-i' input_file]]... {[options] output_file}... 如果没有输入文件,那么视音频捕捉(只在Linux下有效,因为Linux下把音视频设备当作文件 句柄来处理)就会起作用。作为通用的规则,选项一般用于下一个特定的文件。如果你给–b 64选项,改选会设置下一个视频速率。对于原始输入文件,格式选项可能是需要的。缺省情况下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。 ffmpeg转换所涉及到的选项较多,可参考ffmpeg选项详解。 ffmpeg支持多种文件格式和多种音频、视频编码器,可参考ffmepg格式详解,(附:常见视频文件格式详解) 视频文件截图 ?截取一张352x240尺寸大小的,格式为jpg的图片 ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg ?把视频的前30帧转换成一个Animated Gif ffmpeg -i test.asf -vframes 30 -y -f gif a.gif ?截取指定时间的缩微图 ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 test.jpg -ss后跟的时间单位为秒 ?转换文件为3GP格式 ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp 或 ffmpeg -y -i test.wmv -ac 1 -acodec libamr_nb -ar 8000 -ab 12200 -s 176x144 -b 128 -r 15 test.3gp 视频格式转换 ?如何使用ffmpeg 编码得到高质量的视频 ffmpeg.exe -i "D:\Video\Fearless\Fearless.avi" -target film-dvd -s 720x352 -padtop 64 -padbottom 64 -maxrate 7350000 -b 3700000 -sc_threshold 1000000000 -trellis -cgop -g 12 -bf 2 -qblur 0.3 -qcomp 0.7 -me full -dc 10 -mbd 2 -aspect 16:9 -pass 2 -passlogfile "D:\Video\ffmpegencode" -an -f mpeg2video "D:\Fearless.m2v" ?转换指定格式文件到FLV格式 ffmpeg.exe -i test.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv ffmpeg.exe -i test.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv ?转码解密的VOB ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp3 -ab 128 snatch.avi

ffmpeg命令使用详解

ffmpeg真得太棒了,刚接触就感受到了它的强大,轻松几条命令就可以完成你的工作。 把darkdoor.[001-100].jpg序列帧和001.mp3音频文件利用mpeg4编码方式合成视频文件darkdoor.avi: $ ffmpeg -i 001.mp3 -i darkdoor.%3d.jpg -s 1024x768 -author skypp -vcodec mpeg4 darkdoor.avi ffmpeg还支持mov格式: $ ffmpeg -i darkdoor.%3d.jpg darkdoor.mov 要查看你的ffmpeg支持哪些格式,可以用如下命令: $ ffmpeg -formats | less 还可以把视频文件导出成jpg序列帧: $ ffmpeg -i bc-cinematic-en.avi example.%d.jpg debian下安装ffmpeg很简单: #apt-get install ffmpeg ###################################### 下面是转来的使用说明,慢慢研究吧,嘿嘿 ###################################### ffmpeg使用语法 ffmpeg使用语法: ffmpeg [[options][`-i' input_file]]... {[options] output_file}... 如果没有输入文件,那么视音频捕捉就会起作用。 作为通用的规则,选项一般用于下一个特定的文件。如果你给–b 64选项,改选会设置下一个视频速率。对于原始输入文件,格式选项可能是需要的。 缺省情况下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。 3.选项 a) 通用选项 -L license -h 帮助 -fromats 显示可用的格式,编解码的,协议的。。。 -f fmt 强迫采用格式fmt -I filename 输入文件 -y 覆盖输出文件 -t duration 设置纪录时间hh:mm:ss[.xxx]格式的记录时间也支持 -ss position 搜索到指定的时间[-]hh:mm:ss[.xxx]的格式也支持 -title string 设置标题 -author string 设置作者 -copyright string 设置版权

FFMpeg参数解释--中文详细

Linux下FFMPEG的参数解释 调用方法 程序如下: Process p = new Process();//建立外部调用线程 p.StartInfo.FileName = Server.MapPath("ffmpeg.exe");//要调用外部程序的绝对路径 p.StartInfo.Arguments = "-i E:\\10425.wmv -ab 56 -ar 22050 -b 150 -r 15 -s 320x240 E:\\11.flv ";//参数(这里就是FFMPEG的参数了) https://www.doczj.com/doc/688219546.html,eShellExecute = false; p.StartInfo.CreateNoWindow = true; p.StartInfo.RedirectStandardOutput = true; p.Start(); p.Close();//关闭进程 p.Dispose();//释放资源 如何判断是否转换完毕然后进行数据库修改! 参数方法 1.视频音频格式转换 Ffmpeg能使用任何支持的格式和协议作为输入: *比如你可以输入YUV文件:ffmpeg -i /tmp/test%d.Y /tmp/out.mpg 它将要使用如下文件: /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V, /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V,等等… *你能输入原始的YUV420P文件:ffmpeg -i /tmp/test.yuv /tmp/out.avi 原始的YUV420P文件包含原始的YUV极性,每帧以Y平面开始,跟随U 和V平面,它们是Y平面水平垂直的一半分辨率 *你能输出原始的YUV420P文件 ffmpeg -i mydivx.avi -o hugefile.yuv *你能设置几个输入文件和输出文件 ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg 上面的命令行转换音频文件a.wav和原始的YUV 视频文件a.yuv到mpeg

ffmpeg绝对编译指南

编译集成ffmpeg指南 ###环境配置(centos/msys2) yum install autoconf automake cmake freetype-devel openssl-devel gcc gcc-c++ git libtool make mercurial nasm pkgconfig zlib-devel ###参考地址 https://www.doczj.com/doc/688219546.html,/uid-23069658-id-4018842.html https://www.doczj.com/doc/688219546.html,/wanglx_/article/details/50786307 ###2.1 Yasm(git clone --depth 1 git://https://www.doczj.com/doc/688219546.html,/yasm/yasm.git) 汇编器,编译x264,ffmpeg会用到 autoreconf -fiv ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" make make install make distclean ###libx264 (git clone --depth 1 git://https://www.doczj.com/doc/688219546.html,/x264) H264编码库,开启需要在FFmpeg的configure中指定:--enable-gpl 和--enable-libx264 ./configure --prefix="$HOME/ffmpeg_build" --enable-static --enable-shared make make install make distclean ###初始pkgconfig(必须) export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ###libx265(hg clone https://https://www.doczj.com/doc/688219546.html,/multicoreware/x265) H265编码库,开启需要在FFmpeg的configure中指定:--enable-gpl 和--enable-libx265 cd 到/x265/build/msys目录下执行对应.sh文件,稍后在cmake弹框中编辑安装目录 make make install ###libfdk_aac(git clone --depth 1 git://https://www.doczj.com/doc/688219546.html,/p/opencore-amr/fdk-aac) AAC编码库,开启需要在FFmpeg的configure中指定:--enable-libfdk-aac autoreconf -fiv ./configure --prefix="$HOME/ffmpeg_build" --enable-shared --enable-static SPEEXDSP_CFLAGS="$HOME/ffmpeg_build/include" SPEEXDSP_LIBS="$HOME/ffmpeg_build/lib" OGG_CFLAGS="$HOME/ffmpeg_build/include" OGG_LIBS="$HOME/ffmpeg_build/lib" make make install make distclean

ffmpeg最全的命令参数

ffmpeg最全的命令参数 Java代码Hyper fast Audio and Video encoder usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}... Getting help: -h -- print basic options -h long -- print more options -h full -- print all options (including all format and codec specific options, very long) See man ffmpeg for detailed description of the options. Print help / information / capabilities: -L show license -h topic show help -? topic show help -help topic show help --help topic show help -version show version -formats show available formats -codecs show available codecs -decoders show available decoders -encoders show available encoders -bsfs show available bit stream filters -protocols show available protocols -filters show available filters -pix_fmts show available pixel formats -layouts show standard channel layouts -sample_fmts show available audio sample formats Global options (affect whole program instead of just one file: -loglevel loglevel set libav* logging level -v loglevel set libav* logging level

ffmpeg开发指南(经典)

ffmpeg开发指南(使用libavformat和libavcodec) Ffmpeg中的Libavformat和libavcodec库是访问大多数视频文件格式的一个很好的方法。不幸的是,在开发您自己的程序时,这套库基本上没有提供什么实际的文档可以用来作为参考(至少我没有找到任何文档),并且它的例程也并没有太多的帮助。 这种情况意味着,当我在最近某个项目中需要用到libavformat/libavcodec 库时,需要作很多试验来搞清楚怎样使用它们。这里是我所学习的--希望我做的这些能够帮助一些人,以免他们重蹈我的覆辙,作同样的试验,遇到同样的错误。 你还可以从这里下载一个demo程序。我将要公开的这部分代码需要0.4.8版本的ffmpeg库中的libavformat/libavcodec的支持(我正在写最新版本)。如果您发现以后的版本与我写的程序不能兼容,请告知我。 在这个文档里,我仅仅涉及到如何从文件中读入视频流;音频流使用几乎同样的方法可以工作的很好,不过,我并没有实际使用过它们,所以,我没于办法提供任何示例代码。 或许您会觉得奇怪,为什么需要两个库文件libavformat和libavcodec:许多视频文件格式(AVI就是一个最好的例子)实际上并没有明确指出应该使用哪种编码来解析音频和视频数据;它们只是定义了音频流和视频流(或者,有可能是多个音频视频流)如何被绑定在一个文件里面。这就是为什么有时候,当你打开了一个AVI文件时,你只能听到声音,却不能看到图象--因为你的系统没有安装合适的视频解码器。所以,libavformat用来处理解析视频文件并将包含在其中的流分离出来,而libavcodec则处理原始音频和视频流的解码。 1打开视频文件: 首先第一件事情--让我们来看看怎样打开一个视频文件并从中得到流。我们要做的第一件事情就是初始化libavformat/libavcodec: av_register_all();

FFMPEG的移植与使用

FFMPEG的移植与使用 前段时间在翻看电脑里面资料时,发现了以前做的在嵌入式硬件上面运行以ffmepg为基础,以嵌入式硬件解码的多媒体播放工作,发现都快忘记完了。今日得闲整理温习了一下ffmpeg在嵌入式上的运用,这里给大家分享一下,顺便做了一下记录以备以后使用时参考。 本文(记录)与目前网上很多关于ffmpeg的文章相比有两个特点: 一、重点不在于ffmpeg的解码部分(这个本来是ffmpeg最大的亮点),为什么?前面说了,这是我以前工作的一个整理。况且关于ffmpeg的解码相关文章非常多了,如果大家感兴趣的话,可以后面第五部分增加吧。 二、本文是不采用其他第三方的开源多媒体框架而在嵌入式硬件上做多媒体播放项目。第三方的多媒体框架软件隐藏了一些扩展数据的关键处理,很多初学者可能不清楚这些细节问题,所以当ffmepg在自己的解码移植上没有问题,真正在用嵌入式硬件进行解码时会遇到这种问题。 下载最新版本的ffmpeg-3.1.1,解压 配置: 配置后会输出以下信息,有几点较为有用,列举如下: 分别是: 库安装的位置 不知道

所用c编译器 所用C库 主机的c编译器 主机的c库 库安装后所支持的平台 是否支持大端 是否支持shared 是否支持static 是否支持network 是否支持threading 是否支持SDL 生成的工具(注意没有生成ffplay,尚未找到解决方案) 支持的解码格式,图片仅截取一小部分) 支持的编码格式(图片仅截取一小部分) 支持的协议,如tcp,udp,ftp,http等 支持的输入设备 支持的输出设备 遵循的协议

然后进行make编译,再make install 在Linux目录下,编译成功,生成我们的动态库: 这样我们生产了我们需要的动态库和头文件。 将bin目录下的工具拷贝到开发板/bin目录下,修改权限,运行./ffmpeg,根据报错逐一复制lib目录下的库到开发板的/lib目录下,注意大部分库是链接,要复制原文件,然后创建链接 这个过程很繁琐,坚持下去 下面介绍ffmpeg的应用 1.录制视频 保存成.asf文件,可以直接在pc机播放(针对V4L2,当然ffmpeg也支持其他设备,如vfwcap,) 命令: ffmpeg -f video4linux2 -s 320*240 -r 10 -i /dev/video4 test.asf -f fmt force format -s size 指明大小,size=宽*高 set frame size (WxH or abbreviation) -r rate set frame rate (Hz value, fraction or abbreviation) -i 视频输入设备 最后接输出文件 由于摄像头分辨率较低,所以大小还是不要设置太大,不然视频很不清晰此,像素点都变成方块显示出来了,亲测 输出参数:包含大小,时间长度,帧数 其他有用选项 -fs limit_size set the limit file size in bytes,设置输出文件的大小 -ss time_off set the start time offset 设置启动录制视频事件 -sseof time_off set the start time offset relative to EOF 设置视频拍摄长度

相关主题
文本预览
相关文档 最新文档