上图实例是将一个bus.avi中视频分离出来,利用三个运用程序中的ffmpeg.exe。

ffmpeg –y –i input –vcodeccopy –an output.avi

个中-y表示覆盖同名文件,-i表示输入文件即bus.avi,-vcodec表示编码办法,后面的copy表示用原来的编码办法,即不重新编码,-an表示去除音频,后面的busv.avi表示分离出的视频文件。

phpffmpegaviflvFFmpeg详解及常用敕令应用 Bootstrap

同理将视频中的音频文件分离出来的命令行为:

ffmpeg -ibus.avi -acodec copy -vn busa.wav。

上面举例解释了运用程序的用法,运用程序的命令行相对代码要大略很多,也能实现例如音视频分离、转码、播放等各种功能,如视频转码的命令行为:

ffmpeg -y -i input.mp4 -vcodec libx264 -acodec copy output.mp4

个中libx264为指定的视频编码器。

ffmpeg –s 352x288 -iinput -r 25 original/%04d.bmp

-s用来指定导出帧序列的大小(可缺省),-i表示输入的视频,-r表示提取的帧率(可缺省),original/%04d.bmp中的original/表示用于存放帧图片的文件夹(要提前创建),%04d表示自动按照序列命名,为4位数(0001~9999),个中图片格式可以改为jpg等等。

ffmpeg -f image2 -i original \%04d.jpg -vcodec libx264 -r 10 -b 200k test.mp4

-f用来指定封装格式;-i original \%04d.jpg表示存放在original文件夹下的帧图片,这里的%04d.jpg要和将视频分解为帧时候的格式一样,把稳这里帧图像的命名要为自然数;-vcodec libx264指定了天生的视频的编码格式;-r指定了帧率大小(可缺省);-b指定了码率大小为多少bit/s(可缺省)

ffmpeg -ss 0:0:5 -t 0:0:10 -i input.avi -vcodec copy -acodec copy output.avi

这个命令用于剪切视频,-ss表示从第几秒开始,如上实例为从第5秒开始,-t代表剪持续几秒长度的视频,如上实例便是剪10秒长度的视频,copy表示视频编码格式和音频编码格式与原视频统一。

2.FFmpeg其它常用命令

1.分离视频音频流

ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流ffmpeg -i input_file -acodec copy -vn output_file_audio //分离音频流

2.视频解复用

ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264ffmpeg –i test.avi –vcodec copy –an –f m4v test.264

3.视频转码

ffmpeg –i test.mp4 –vcodec h264 –s 352278 –an –f m4v test.264 //转码为码流原始文件ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352278 –an –f m4v test.264 //转码为码流原始文件ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi //转码为封装文件//-bf B帧数目掌握,-g 关键帧间隔掌握,-s 分辨率掌握

4.视频封装

ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file

5.视频剪切

ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg //提取图片ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi //剪切视频//-r 提取图像的频率,-ss 开始韶光,-t 持续韶光

6.视频录制

ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec copy out.avi

7.YUV序列播放

ffplay -f rawvideo -video_size 1920x1080 input.yuv

8.YUV序列转AVI

ffmpeg –s wh –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi

常用参数解释:

紧张参数: -i 设定输入流 -f 设定输出格式 -ss 开始韶光 视频参数: -b 设定视频流量,默认为200Kbit/s -r 设定帧速率,默认为25 -s 设定画面的宽与高 -aspect 设定画面的比例 -vn 不处理视频 -vcodec 设定视频编解码器,未设定时则利用与输入流相同的编解码器 音频参数: -ar 设定采样率 -ac 设定声音的Channel数 -acodec 设定声音编解码器,未设定时则利用与输入流相同的编解码器 -an 不处理音频

------------------------------------------------------------------------

0、压缩转码mp4文件

ffmpeg -i input.avi -s 640x480 output.aviffmpeg -i input.avi -strict -2 -s vga output.avi

1、将文件当做直播送至live

ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName

2、将直播媒体保存至本地文件

ffmpeg -i rtmp://server/live/streamName -c copy dump.flv

3、将个中一个直播流,视频改用h264压缩,音频不变,送至其余一个直播做事流

ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream

4、将个中一个直播流,视频改用h264压缩,音频改用faac压缩,送至其余一个直播做事流

ffmpeg -i rtmp://server/live/originalStream -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://server/live/h264Stream

5、将个中一个直播流,视频不变,音频改用faac压缩,送至其余一个直播做事流

ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream

6、将一个高清流,复制为几个不同视频清晰度的流重新发布,个中音频不变

ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k

7、功能一样,只是采取-x264opts选项

ffmpeg -re -i rtmp://server/live/high_FMLE_stream -c:a copy -c:v x264lib -s 640×360 -x264opts bitrate=500:profile=baseline:preset=slow rtmp://server/live/baseline_500k -c:a copy -c:v x264lib -s 480×272 -x264opts bitrate=300:profile=baseline:preset=slow rtmp://server/live/baseline_300k -c:a copy -c:v x264lib -s 320×200 -x264opts bitrate=150:profile=baseline:preset=slow rtmp://server/live/baseline_150k -c:a libfaac -vn -b:a 48k rtmp://server/live/audio_only_AAC_48k

8、将当前摄像头及音频通过DSSHOW采集,视频h264、音频faac压缩后发布

ffmpeg -r 25 -f dshow -s 640×480 -i video=”video source name”:audio=”audio source name” -vcodec libx264 -b 600k -vpre slow -acodec libfaac -ab 128k -f flv rtmp://server/application/stream_name

9、将一个JPG图片经由h264压缩循环输出为mp4视频

ffmpeg.exe -i INPUT.jpg -an -vcodec libx264 -coder 1 -flags +loop -cmp +chroma -subq 10 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -flags2 +dct8x8 -trellis 2 -partitions +parti8x8+parti4x4 -crf 24 -threads 0 -r 25 -g 25 -y OUTPUT.mp4

10、将普通流视频改用h264压缩,音频不变,送至高清流做事(新版本FMS live=1)

ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv “rtmp://server/live/h264Stream live=1〃

------------------------------------------------------------------------

1.采集usb摄像头视频命令:

ffmpeg -t 20 -f vfwcap -i 0 -r 8 -f mp4 cap1111.mp4 ./ffmpeg -t 10 -f vfwcap -i 0 -r 8 -f mp4 cap.mp4

详细解释如下:我们采集10秒,采集设备为vfwcap类型设备,第0个vfwcap采集设备(如果系统有多个vfw的视频采集设备,可以通过-i num来选择),每秒8帧,输出办法为文件,格式为mp4。

2.最大略的抓屏:

ffmpeg -f gdigrab -i desktop out.mpg

3.从屏幕的(10,20)点处开始,抓取640x480的屏幕,设定帧率为5 :

ffmpeg -f gdigrab -framerate 5 -offset_x 10 -offset_y 20 -video_size 640x480 -i desktop out.mpg

4.ffmpeg从视频中天生gif图片:

ffmpeg -i capx.mp4 -t 10 -s 320x240 -pix_fmt rgb24 jidu1.gif

5.ffmpeg将图片转换为视频:

http://blog.sina.com.cn/s/blog_40d73279010113c2.html3.播放器基本事理

ffmpeg播放器基本上由五个模块组成,它们分别是源文件模块、解复用模块、解码模块、颜色空间转换摸块和渲染模块。
其基本模块如下图:

个中,源文件模块是这个播放器的起始,紧张是为下面的各个模块以数据包的办法供应数据流。
详细而言便是从本地视频文件中读取出数据包,然后将其按照一定的顺序排列,源源不断得发送到下面的解复用模块中。

解复用模块根据源文件的容器格式来分离出视频流、音频流和字幕流,在加入韶光同步等信息后传送给下面的解码模块。
为识别出不同的文件类型和媒体类型,常规的做法是读取一部分数据,然后遍历解复用播放器支持的文件格式和媒体数据格式,做匹配来确定是哪种文件类型,哪种媒体类型,有些媒体类型的原始数据表面还有其他的信息,比如韶光,包大小,是否完全包等等。
这里要把稳的是,时钟信息的打算事情也是在这个模块完成,用于各媒体之间的同步。

解码模块浸染便是解码数据包,并且把同步时钟信息通报下去。
对视频媒体而言,常日是解码成YUV 数据,然后利用显卡硬件直接支持YUV 格式数据Overlay 快速显示的特性让显卡极速显示。
YUV格式是一个统称,常见的有YV12,YUY2,UYVY 等等。
有些非常古老的显卡和嵌入式系统不支持YUV 数据显示,那就要转换成RGB 格式的数据,每一帧的每一个像素点都要转换,分别打算RGB 分量,并且由于转换是浮点运算,虽然有定点算法,还是要耗掉相称一部分CPU,总体上效率底下;对音频媒体而言,常日是解码成PCM 数据,然后送给声卡直接输出。

颜色空间转换模块的浸染是把视频解码器解码出来的数据转换成当前显示系统支持的颜色格式。
常日视频解码器解码出来的是YUV 数据,PC 系统是直接支持YUV 格式的,也支持RGB 格式,有些嵌入式系统只支持RGB 格式的。

渲染模块对视频来说便是显示视频图像,对音频来说便是播放声音,对字幕来说便是显示字幕,并保持视频、音频和字幕的同步播放。

4.ffmpeg转码基本事理

转码器在视音频编解码处理的程序中,属于一个比较繁芜的东西。
由于它结合了视频的解码和编码。
一个视频播放器,一样平常只包含解码功能;一个视频编码工具,一样平常只包含编码功能;而一个视频转码器,则须要先对视频进行解码,然后再对视频进行编码,因而相称于解码器和编码器的结合。
下图例举了一个视频的转码流程。
输入视频的封装格式是FLV,视频编码标准是H.264,音频编码标准是AAC;输出视频的封装格式是AVI,视频编码标准是MPEG2,音频编码标准是MP3。
从流程中可以看出,首先从输入视频等分离出视频码流和音频压缩码流,然后分别将视频码流和音频码流进行解码,获取到非压缩的像素数据/音频采样数据,接着将非压缩的像素数据/音频采样数据重新进行编码,得到重新编码后的视频码流和音频码流,末了将视频码流和音频码流重新封装成一个文件。

须要更多关于ffmpeg学习资料的可以私信“资料”,免费分享