[转载]FFmpeg完美入门[3] - FFmpeg功能及使用说明
1 ffplay对多媒体的支持能力验证
一、视频3gp 177X144 支持播放,在windows下播放正常,但是在linux下面偶有BUG 如果发现画面无法显示而声音可以播放的情况下可以试着切换全屏或者切换分辨率。
AVI 208X176 支持 320X240 支持 720X400 支持 720X576 支持
DAT 352X288 支持
DiVX 720X576 支持
MKV 320X240 支持352X288 支持 704X304 支持 720X576 支持
MP4 320X240 支持 352X288 支持 720X400 支持
MPG 320X240 支持 352X288 支持 480X576 支持 720X576 支持 720X480 支持
VOB 352X288 支持
XVID 720X576 支持
MOV 支持
RMVB 支持
二、音频
AC3 48KHZ 支持
APE 11KHZ 支持 22KHZ 支持 44KHZ 支持 48KHZ 支持
MP3 32KHZ 64Kbps 支持 32KHZ 128KbpS 支持 32KHZ 160Kbps 支持 32KHZ 192Kbps 支持 32KHZ 320Kbps 支持 44KHZ 64Kbps 支持 44KHZ 128Kbps 支持 44KHZ 160Kbps 支持 44KHZ 192Kbps 支持 44KHZ 320Kbps 支持 48KHZ 64Kbps 支持 48KHZ 128Kbps 支持 48KHZ 160Kbps 支持 48KHZ 192Kbps 支持 48KHZ 320Kbps 支持
OGG 32KHZ 128Kbps 支持 32KHZ 192Kbps 支持 44KHZ 64Kbps 支持44KHZ 128Kbps 支持 44KHZ 192Kbps 支持 48KHZ 64Kbps 支持 44KHZ 128Kbps 支持 44KHZ 192Kbps 支持
WAV 11KHZ 支持 22KHZ 16Kbps 支持 44KHZ 16Kbps 支持 48KHZ 16Kbps 支持
WMA 8KHZ 16Kbps 支持 11KHZ 16Kbps 支持 16KHZ 16Kbps 支持 22KHZ 16Kbps 支持 44KHZ 16Kbps 支持 48KHZ 16Kbps 支持
三、图像
PNG 支持
JPG 支持
JPEG 支持
GIF 支持
BMP 支持
2 FFmpeg格式转换
第一步:准备媒体前面已经讲的很清楚了,ffmpeg如何安装不在赘述。准备好相应的文件,如图2-1所示。
第二步:启动ffmpeg 由于做的是格式转换,在ffserver上不能直观的看见结果,故我是在linux下进行的。打开终端,值得一提的是格式转换需要超级用户才能进行,故在 命令行输入:su,<回车>,输入密码进入超级用户,本例中,以FFmpeg将test.avi转换为test.mpg。在命令行中输 入:./ffmpeg –i test.avi –r 25 –s 720x400 test.mpg<回车>。其中原格式分辨率为320x240,将转为720x400,-r前面已经解释其含义,表示设置帧频为25。转换成 功后如图2-2所示,前后两种格式播放效果如图2-3所示。相应的,转换为其他格式做相应的变化即可。同时还可以在转换格式时进行强制的音视频转换,如 –vcodec + 格式,将会强制将视频按指定格式编码,-acodec +格式,将会强制按指定格式编码音频信息。在转换中有很多其他参数可以指定,如码率、分辨率、帧率等,具体按照ffmpeg的参数说明指定参数即可。但有 一条转低不转高的原则需要注意,即品质差的音视频转换不建议转换到品质好的音视频。
再说说如何在转换视频的时候将音频合成到视频中,且覆盖其原来的音频。这个现在摸索出两种方法。
方法一:需要两条命令实现,先在命令行中输入: ./ffmpeg –i test.avi -an –r 25 test.mpg <回车> 此时将生成一个没有声音的test.mpg视频,再在命令行中输入: ./ffmpeg –i test.mpg –i test.mp3 –r 25 test1.mpg<回车> 此时将会生成一个名为test1.mpg的视频。该视频播放时视频为test.avi的视频,但音频变为了test.mp3的音频了。
方法二:只要一条指令即可实现。在命令行中输入: ./ffmpeg –i test.avi –i test.mp3 –vcodec copy –acodec copy –r 25 test2.mpg<回车> 此时将会生成一个名为test2.mpg的视频,播放时其视频为test.avi的视频,音频为test.mp3。–vcodec copy为force video codec(‘copy’ to copy stream)。有一点需要注意,文件命名不能有空格,否则会导致编译时不能通过。另外,-an为不能使音频记录。
第三步:播放媒体播放我们转换的媒体,看看是否满足我们当初的愿望,不出什么差错的话,是完全能够满足我们的要求的。
3 FFmpeg视频截图
截取一张300x200尺寸大小的格式为jpg的一张图片: ./ffmpeg –i test.avi –y –f image2 –t 0.001
–s 300x200 test.jpg 要截取指定时间的图片,如5秒之后的: ./ffmpeg –i test.avi –y –f image2
–ss 5 –t 0.001 –s 300x200 test.jpg 其中,-ss后的单位为秒,也可写成:-ss 00:00:05。
把视频的前30帧转换为一个动态的gif图。需要说明的是,转换成功之后,如果用ffplay播放是看不出效果的,建议换成其他图片播放器播放。其转换命
令为: ./ffmpeg –i test.avi –vframes 30 –pix_fmt rgb24–y –f gif test.gif
也可以从视频中的第10秒开始截取后面的5秒内容转换为一个无限重播的动态gif图。其命令为: ./ffmpeg –i test.avi
–pix_fmt rgb24 –ss 10 –t 5 –y –f gif test.gif
上面两种动态gif都是只播一次,想让其一直播,可再加一个参数:-loop_output
0。
4 FFmpeg屏幕录制
屏幕录制其命令为: ./ffmpeg -f x11grab -r 25 -s wxga -i :0.0 /tmp/outputFile.mpg
其他相关参数可自行添加。需要说明的是,各个版本的ffmpeg对屏幕录制的命令不一。如果你只想录制一个应用程序窗口或者桌面上的一个固定区域,那么可
以指定偏移位置和区域大小。使用xwininfo -frame命令可以完成查找上述参数。
注:ffmpeg的屏幕录制功能只能在Linux环境下有效。并且在配置时需要添加 –enable-x11grub 指令,默认关闭。
5 FFmpeg音视频采集
把摄像头的实时视频录制下来,存储为文件./ffmpeg -f video4linux -s 320x240 -r 10 -i
/dev/video0 test.asf 录音,其命令为: ./ffmpeg –i /dev/dsp -f oss test.mp3