FFmpeg基础

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

FFmpegFFmpeg基本用法zhanweichun@126.com本课要解决的问题•1.FFmpeg的转码流程是什么?•2.常见的视频格式包含哪些内容吗?•3.如何把这些内容从视频文件中抽取出来?•4.如何从一种格式转换为另一种格式?•5.如何放大和缩小视频?•6.如何旋转,翻转,填充,裁剪,模糊,锐化视频?•7.如何给视频加logo,删除logo?•8.如何给视频加文本,动态文本?•9.如何处理图片?•10.如何录像,添加动态logo,截图,马赛克视频?第一部分基础术语•容器(Container)o容器就是一种文件格式,比如flv,mkv等。包含下面5种流以及文件头信息。•流(Stream)o是一种视频数据信息的传输方式,5种流:音频,视频,字幕,附件,数据。•帧(Frame)o帧代表一幅静止的图像,分为I帧,P帧,B帧。•编解码器(Codec)o是对视频进行压缩或者解压缩,CODEC=COde(编码)+DECode(解码)•复用/解复用(mux/demux)o把不同的流按照某种容器的规则放入容器,这种行为叫做复用(mux)o把不同的流从某种容器中解析出来,这种行为叫做解复用(demux)简介•FFmpeg的名称来自MPEG视频编码标准,前面的“FF”代表“FastForward”,FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。可以轻易地实现多种视频格式之间的相互转换。•FFmpeg的用户有Google,Facebook,Youtube,优酷,爱奇艺,土豆等。组成•1、libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能,包含demuxers和muxer库;•2、libavcodec:用于各种类型声音/图像编解码;•3、libavutil:包含一些公共的工具函数;•4、libswscale:用于视频场景比例缩放、色彩映射转换;•5、libpostproc:用于后期效果处理;•6、ffmpeg:是一个命令行工具,用来对视频文件转换格式,也支持对电视卡实时编码;•7、ffsever:是一个HTTP多媒体实时广播流服务器,支持时光平移;•8、ffplay:是一个简单的播放器,使用ffmpeg库解析和解码,通过SDL显示;FFmpeg处理流程过滤器(Filter)•在多媒体处理中,filter的意思是被编码到输出文件之前用来修改输入文件内容的一个软件工具。如:视频翻转,旋转,缩放等。•语法:[input_link_label1][input_link_label2]…filter_name=parameters[output_link_label1][output_link_label2]…•过滤器图linklabel:是标记过滤器的输入或输出的名称•1.视频过滤器-vfo如testsrc视频按顺时针方向旋转90度offplay-flavfi-itestsrc-vftranspose=1o如testsrc视频水平翻转(左右翻转)offplay-flavfi-itestsrc-vfhflip•2.音频过滤器-afo实现慢速播放,声音速度是原始速度的50%offplayp629100.mp3-afatempo=0.5如何实现顺时针旋转90度并水平翻转?过滤器链(Filterchain)•基本语法•Filterchain=逗号分隔的一组filter•语法:“filter1,filter2,filter3,…filterN-2,filterN-1,filterN”•顺时针旋转90度并水平翻转•ffplay-flavfi-itestsrc-vftranspose=1,hflip•如何实现水平翻转视频和源视频进行比较?看过滤器链是如何实现的。过滤器链(Filterchain)•第一步:源视频宽度扩大两倍。•ffmpeg-ijidu.mp4-t10-vfpad=2*iwoutput.mp4•第二步:源视频水平翻转•ffmpeg-ijidu.mp4-t10-vfhflipoutput2.mp4•第三步:水平翻转视频覆盖output.mp4•ffmpeg-ioutput.mp4-ioutput2.mp4-filter_complexoverlay=wcompare.mp4•是不是很复杂?•用带有链接标记的过滤器图(Filtergraph)只需一条命令。过滤器图(Filtergraph)•基本语法•Filtergraph=分号分隔的一组filterchain•“filterchain1;filterchain2;…filterchainN-1;filterchainN”•Filtergraph的分类1、简单(simple)一对一2、复杂(complex)多对一,多对多过滤器图(Filtergraph)•简单过滤器图处理流程:•复杂过滤器图处理流程:•从图中可以发现复杂过滤器图比简单过滤器图少2个步骤,效率比简单高,ffmpeg建议尽量使用复杂过滤器图。•回答上面提的问题,实现水平翻转视频和源视频进行比较过滤器图(Filtergraph)用ffplay直接观看结果:ffplay-flavfi-itestsrc-vfsplit[a][b];[a]pad=2*iw[1];[b]hflip[2];[1][2]overlay=wF1:split过滤器创建两个输入文件的拷贝并标记为[a],[b]F2:[a]作为pad过滤器的输入,pad过滤器产生2倍宽度并输出到[1].F3:[b]作为hflip过滤器的输入,vflip过滤器水平翻转视频并输出到[2].F4:用overlay过滤器把[2]覆盖到[1]的旁边.选择媒体流•一些多媒体容器比如AVI,mkv,mp4等,可以包含不同种类的多个流,如何从容器中抽取各种流呢?•语法:•-mapfile_number:stream_type[:stream_number]•这有一些特别流符号的说明:•1、-map0选择第一个文件的所有流•2、-mapi:v从文件序号i(index)中获取所有视频流,-mapi:a获取所有音频流,-mapi:s获取所有字幕流等等。•3、特殊参数-an,-vn,-sn分别排除所有的音频,视频,字幕流。•注意:文件序号和流序号从0开始计数。选择媒体流第二部分查看帮助帮助•FFmpeg工具有一个巨大的控制台帮助。下表描述了可用的一些选项,斜体字表示要被替换的项,ffplay和ffprobe也有一些类似的选项。帮助•可用的bit流:ffmpeg–bsfs•可用的编解码器:ffmpeg–codecs•可用的解码器:ffmpeg–decoders•可用的编码器:ffmpeg–encoders•可用的过滤器:ffmpeg–filters•可用的视频格式:ffmpeg–formats•可用的声道布局:ffmpeg–layouts•可用的license:ffmpeg–L•可用的像素格式:ffmpeg–pix_fmts•可用的协议:ffmpeg-protocals第三部分码率、帧率和文件大小概述•码率和帧率是视频文件的最重要的基本特征,对于他们的特有设置会决定视频质量。如果我们知道码率和时长那么可以很容易计算出输出文件的大小。•帧率:帧率也叫帧频率,帧率是视频文件中每一秒的帧数,肉眼想看到连续移动图像至少需要15帧。•码率:比特率(也叫码率,数据率)是一个确定整体视频/音频质量的参数,秒为单位处理的字节数,码率和视频质量成正比,在视频文件中中比特率用bps来表达。帧率•1、用-r参数设置帧率•ffmpeg–iinput–rfpsoutput•2、用fpsfilter设置帧率•ffmpeg-iclip.mpg-vffps=fps=25clip.webm•帧率的预定义值:•例如设置码率为29.97fps,下面三种方式具有相同的结果:•ffmpeg-iinput.avi-r29.97output.mpg•ffmpeg-iinput.avi-r30000/1001output.mpg•ffmpeg-iinput.avi-rnetscoutput.mpg码率、文件大小•设置码率–b参数o-boffmpeg-ifilm.avi-b1.5Mfilm.mp4o音频:-b:a视频:-b:vo设置视频码率为1500kbpsoffmpeg-iinput.avi-b:v1500koutput.mp4•控制输出文件大小o-fs(filesize首字母缩写)offmpeg-iinput.avi-fs1024Koutput.mp4•计算输出文件大小o(视频码率+音频码率)*时长/8=文件大小K第四部分调整视频分辨率调整视频分辨率•1、用-s参数设置视频分辨率,参数值wxh,w宽度单位是像素,h高度单位是像素•ffmpeg-iinput_file-s320x240output_file•2、预定义的视频尺寸o下面两条命令有相同效果offmpeg-iinput.avi-s640x480output.avioffmpeg-iinput.avi-svgaoutput.avio下表列出了所有的预定义尺寸Scalefilter调整分辨率•Scalefilter的优点是可以使用一些额外的参数•语法:•Scale=width:height[:interl={1|-1}]•下表列出了常用的额外参数Scale可用的参数iworin_w输入宽度ihorin_h输入高度oworout_w输出宽度ohorout_h输出高度举例•下面两条命令有相同效果•ffmpeg-iinput.mpg-s320x240output.mp4•ffmpeg-iinput.mpg-vfscale=320:240output.mp4•对输入视频成比例缩放•改变为源视频一半大小•ffmpeg-iinput.mpg-vfscale=iw/2:ih/2output.mp4•改变为原视频的90%大小:•ffmpeg-iinput.mpg-vfscale=iw*0.9:ih*0.9output.mp4举例•在未知视频的分辨率时,保证调整的分辨率与源视频有相同的横纵比。•宽度固定400,高度成比例:•ffmpeg-iinput.avi-vfscale=400:400/a•ffmpeg-iinput.avi-vfscale=400:-1•相反地,高度固定300,宽度成比例:•ffmpeg-iinput.avi-vfscale=-1:300•ffmpeg-iinput.avi-vfscale=300*a:300第五部分裁剪/填充视频裁剪视频cropfilter•从输入文件中选取你想要的矩形区域到输出文件中,常见用来去视频黑边。•语法:crop:ow[:oh[:x[:y:[:keep_aspect]]]]举例•裁剪输入视频的左三分之一,中间三分之一,右三分之一:•ffmpeg-iinput-vfcrop=iw/3:ih:0:0output•ffmpeg-iinput-vfcrop=iw/3:ih:iw/3:0output•ffmpeg-iinput-vfcrop=iw/3:ih:iw/3*2:0output•裁剪帧的中心•当我们想裁剪区域在帧的中间时,裁剪filter可以跳过输入x和y值,他们的默认值是•Xdefault=(inputwidth-outputwidth)/2•Ydefault=(inputheight-outputheight)/2•ffmpeg-iinput_file-vcrop=w:houtput_file•裁剪中间一半区域:•ffmpeg-iinput.avi-vfcrop=iw/2:ih/2output.avi举例•比较裁剪后的视频和源视频比较•ffplay-ijidu.mp4-vfsplit[a][b];[a]drawbox=x=(iw-300)/2:(ih-300)/2:w=300:h=300:c=yellow[A];[A]pad=2*iw[C];[b]cr

1 / 72
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功