FFmpeg是Ubuntu下强大的视频、音频编解码工具。 x264可以编码出高质量的h.264视频,iPad必须要h.264编码或mpeg-4编码的视频才能正常播放。
由于版权方面尚未确定,虽然全国很多网站都在使用h.264编码,但将来很有可能会被版权问题所困扰,所以Ubuntu官方源默认是不提供h.264编码的,这就需要我们手工编译安装FFmpeg的h.264支持,使之能够编码出mp4文件。
Ubuntu下安装、使用和升级FFmpeg的方法如下
使用方法:
安装方法:
由于版权方面尚未确定,虽然全国很多网站都在使用h.264编码,但将来很有可能会被版权问题所困扰,所以Ubuntu官方源默认是不提供h.264编码的,这就需要我们手工编译安装FFmpeg的h.264支持,使之能够编码出mp4文件。
Ubuntu下安装、使用和升级FFmpeg的方法如下
1、安装支持包
01 | #libmp3lame |
02 | sudo apt-get remove libmp3lame-dev |
03 | sudo apt-get install nasm |
04 | wget http: //downloads.sourceforge.net/project/lame/lame/3.98.4/lame-3.98.4.tar.gz |
05 | tar xzvf lame-3.98.4.tar.gz |
06 | cd lame-3.98.4 |
07 | ./configure --enable-nasm --disable-shared |
08 | make |
09 | sudo checkinstall --pkgname=lame-ffmpeg --pkgversion= "3.98.4" --backup=no -- default --deldoc=yes |
10 |
11 | #卸载现有的 x264、libx264-dev、FFmpeg |
12 | sudo apt-get remove ffmpeg x264 libx264-dev |
13 |
14 | #安装所有的 FFmpeg 和 x264 支持包 |
15 | sudo apt-get update |
16 | sudo
apt-get install build-essential subversion git-core checkinstall yasm
texi2html libfaac-dev libmp3lame-dev libopencore-amrnb-dev
libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libvorbis-dev
libvpx-dev libx11-dev libxfixes-dev libxvidcore-dev zlib1g-dev |
2、安装x264
1 | cd |
2 | git clone git: //git.videolan.org/x264.git |
3 | cd x264 |
4 | ./configure |
5 | make |
6 | sudo checkinstall --pkgname=x264 --pkgversion "2:0.`grep X264_BUILD x264.h -m1 | cut -d\' \' -f3`.`git rev-list HEAD | wc -l`+git`git rev-list HEAD -n 1 | head -c 7`" --backup=no --deldoc=yes --fstrans=no -- default |
3、安装FFmpeg
1 | cd |
2 | svn checkout svn: //svn.ffmpeg.org/ffmpeg/trunk ffmpeg |
3 | cd ffmpeg |
4 | ./configure
--enable-gpl --enable-version3 --enable-nonfree --enable-postproc
--enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb
--enable-libopencore-amrwb --enable-libtheora --enable-libvorbis
--enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab |
5 | make |
6 | sudo checkinstall --pkgname=ffmpeg --pkgversion "4:SVN-r`LANG=C svn info | grep Revision | awk \'{ print $NF }\'`" --backup=no --deldoc=yes --fstrans=no -- default |
7 | hash x264 ffmpeg ffplay |
4、安装qt-faststart(可选)
这是个重要的x264再编码工具, 它的作用是使得视频不必等待下载完成即可开始播放。使用方法:
1 | qt-faststart input.foo output.foo |
1 | cd ~/ffmpeg |
2 | make tools/qt-faststart |
3 | sudo checkinstall --pkgname=qt-faststart --pkgversion "4:SVN-r`LANG=C svn info | grep Revision | awk \'{ print $NF }\'`" --backup=no --deldoc=yes --fstrans=no -- default install -D -m755 tools/qt-faststart /usr/local/bin/qt-faststart |
5、基本安装完成,你可以保留 ~/x264、~/ffmpeg目录以便将来升级时使用。
6、升级 FFmpeg 和 x264
01 | sudo apt-get remove ffmpeg x264 libx264-dev libvpx |
02 |
03 | cd ~/x264 |
04 | make distclean |
05 | git pull |
06 |
07 | cd ~/ffmpeg |
08 | make distclean |
09 | svn update |
10 | ./configure
--enable-gpl --enable-version3 --enable-nonfree --enable-postproc
--enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb
--enable-libopencore-amrwb --enable-libtheora --enable-libvorbis
--enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab |
11 | make |
12 | sudo checkinstall --pkgname=ffmpeg --pkgversion "4:SVN-r`LANG=C svn info | grep Revision | awk \'{ print $NF }\'`" --backup=no --deldoc=yes --fstrans=no -- default |
13 | hash x264 ffmpeg ffplay |
7、使用 FFmpeg and x264
容易的输出高质量视频的方法是使用FFmpeg中libx264的预设模式。预设模式的使用可以参考FFmpeg x264 encoding guide。 你可以手工调整一些选项 (例如窗口大小: -s 640x480) 。 另外你可以参考 libx264 预设模式在线列表或再 /usr/local/share/ffmpeg 目录中查找帮助。- One-pass CRF (Constant Rate Factor) 使用预设模式:slow. One-pass CRF是经常使用的常规编码方式. 调整 -crf 可以改变输出质量. 数字越小输出质量越高同时输出尺寸越大. 可使用的数字范围是:18 ~ 28。
- Two-Pass encode 使用预设模式: fast. 想要精确设置目标编码率、文件大小的时候会使用到这个编码模式。
- iPod/iPad 640x480,使用预设值: slow 和 ipod640:
- flv视频转换为mp4视频:
- 合并视频文件
- 截取一张352x240尺寸大小的,格式为jpg的图片:
- 把视频的前11帧转换成一个动画图片(Animated Gif):
- 在视频的第8.01秒处截取 352*240 的缩略图:
- 转换 yuv 文件
- 输出 raw YUV420P 文件:
- 将一段视频输出为图片序列
- 多输入单输出
- 单输入多输出
- DVD 转 mpeg4
- 编码 mpeg1/mpeg2
- 编码为 flv
- X 屏幕录像 FFmpeg 捕获 X11 的显示内容:
- 音视频采集
- FFmpeg截图参数
- FFmpeg 加水印 参数:
- AviSynth加水印: 首先ffmpeg/Mencoder编译时需要--enable-avisynth;
- 常用选项
1 | ffmpeg -i input.avi -acodec libfaac -ab 128k -ac 2 -vcodec libx264 -vpre slow -crf 22 -threads 0 output.mp4 |
1 | ffmpeg
-i input.avi -pass 1 -vcodec libx264 -vpre fast_firstpass -b 512k -bt
512k -threads 0 -f rawvideo -an -y /dev/null && ffmpeg
-i input.avi -pass 2 -acodec libfaac -ab 128k -ac 2 -vcodec libx264
-vpre fast -b 512k -bt 512k -threads 0 output.mp4 |
1 | ffmpeg
-i input.avi -acodec libfaac -aq 100 -ac 2 -vcodec libx264 -vpre slow
-vpre ipod640 -crf 26 -map_meta_data 0:0 -vf scale=640:-1 -threads 0
output.mp4 |
1 | ffmpeg -i source.flv -f avi -vcodec mpeg4 output.mp4 |
1 | ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg |
2 | 或用mencoder合并视频文件: |
3 | mencoder -oac copy -ovc copy -idx -o output.avi video1.avi video2.avi video3.avi |
1 | ffmpeg -i source.avi -y -f image2 -t 0.001 -s 352x240 output.jpg |
1 | ffmpeg -i source.avi -vframes 11 -y -f gif output.gif |
1 | ffmpeg -i source.avi -y -f image2 -ss 08.010 -t 0.001 -s 352x240 output.jpg |
1 | ffmpeg -s cif -vcodec mpeg4 -i paris.yuv paris.avi |
2 | 说明: |
3 | -s 指定帧大小 cif 为 352x288,qcif 为 176x144,4cif 为 704x576 |
4 | -vcodec 指定采用的编码器 |
5 | -i 指定输入文件 |
1 | ffmpeg -i paris.avi paris0.yuv |
1 | ffmpeg -i 1.avi cat%d.png -vcodec png |
2 | 说明: |
3 | -vcodec mjpeg |
4 | -vcodec ppm |
5 | ffmpeg -i 1.avi cat%04d.jpg -vcodec mjpeg -ss 0:1:2 -t 0:0:1 |
6 | 说明:将1.avi视频 1分02秒 处开始,持续1秒长的视频输出为jpg的序列 |
7 | ffmpeg -vcodec mjpeg -i 1.flv test%02d.jpg -ss 0:0:2 -t 0.001 |
8 | 说明: -t 表示持续时间为0.001秒,这个命令相当于截取开始2秒处的一幅jpeg的图片 |
1 | ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg |
1 | ffmpeg -i /tmp/a.wav -ab 64 /tmp/a.mp2 -ab 128 /tmp/b.mp2 -map 0:0 -map 0:0 |
2 | 说明:-map file:stream_index 指定哪一个输入流用于输出流,顺序对应 |
1 | ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp2 -ab 128 snatch.avi |
2 | 说明: |
3 | 压制高品质mp4的参考参数: |
4 | \'-mbd rd -flags +4mv+trell+aic -cmp 2 -subcmp 2 -g 300 -pass 1/2\' |
5 | 可以试试: \'-bf 2\', \'-flags qprd\', \'-flags mv0\', \'-flags skiprd\' |
1 | ffmpeg -i 1.avi -vcodec mpeg2video 2.mpg |
2 | 说明: |
3 | 注意mpeg2的codec为 mpeg2video |
4 | 其他codec可以使用 ffmpeg -formats 查看 |
5 | 压制高品质mp1/mp2的参考参数: |
6 | \'-mbd rd -flags +trell -cmp 2 -subcmp 2 -g 100 -pass 1/2\' |
7 | 注意,加 \'-g 100\' 可能会使某些解码器没法解码 |
8 | 可以试试: \'-bf 2\', \'-flags qprd\', \'-flags mv0\', \'-flags skiprd\' |
1 | ffmpeg -i 1.avi -ab 56 -ar 22050 -b 500 -r 15 1.flv |
1 | ffmpeg -f x11grab -i :0.0 /tmp/out.mpg |
2 | 说明: |
3 | 0.0 是 X11 服务器 display.screen 格式的编号 , 可从环境变量的设置中获取。 |
4 | ffmpeg -f x11grab -i :0.0+10,20 /tmp/out.mpg |
5 | 说明: |
6 | 0.0 是 X11 服务器 display.screen 格式的编号 , 可从环境变量的设置中获取。 |
7 | 10 、 20 分别是捕获窗口的x、y偏移量。 |
1 | ffmpeg -f audio_device -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg |
2 | 说明:使用FFmpeg捕获前视频源必须有效激活 。 |
1 | ffmpeg -i xxx.xxx -y -f image2 -ss 8 -t 0.001 -s 350x240 xxx.jpg |
1 | ffmpeg -i inputfile.xxx -tagpict ":220:210" -ab 56 -ar 22050 -qmin 2 -qmax 16 -b 320k -r 15 -s 320x240 outputfile.flv |
2 | 水印参数说明: |
3 | -tagpict ":220:210" |
4 | (在ffmpeg所在目录中寻找0002.mjpg、mask.mjpg两个用作水印处理的图片文件,然后在指定的坐标,比如此处的:220:210,把水印在转码过程中添加到视频文件的每一桢上) |
5 |
6 | ffmpeg -i input.wmv -vhook \'vhook_path/watermark.so -f logo.png -x -10 -y -10 -w 4 -h 4\' output.mpg |
7 | ffmpeg -i input.flv -vhook \'/usr/lib/vhook/watermark.so -f |
8 | logo.gif -m 0 -t ffffff\' -ab 96 -b 8000k output.flv |
1 | 转换参数:ffmpeg -y -i 1.avs -b 320k rmvb-avs.flv |
1 | video = DirectShowSource( "rmvb.rmvb" ,15).BilinearResize(320,240) |
2 | logo = ImageSource( "logo2.jpg" ) |
3 | logomask = ImageSource( "mask2.jpg" ) |
4 | overlay(video,logo,mask=logomask) |
01 | -i filename 输入文件 |
02 | -f fmt 强迫采用格式fmt |
03 | -y 覆盖输出文件 |
04 | -ss position 搜索到指定的时间处开始 [-]hh:mm:ss[.xxx]的格式也支持 |
05 | -b bitrate 设置比特率,缺省200kb/s |
06 | -r fps 设置帧频 缺省25 |
07 | -s size 设置帧大小 格式为WXH 缺省160X128.下面的简写也可以直接使用: |
08 | sqcif 128X96 qcif 176X144 cif 352X288 4cif 704X576 |
09 | -vcodec codec 强制使用codec编解码方式。 如果用 copy 表示原始编解码数据必须被拷贝。 |
10 | -sameq 使用同样视频质量作为源(VBR) |
11 | -g gop_size 设置图像组大小 |
12 | -intra 仅适用帧内编码 |
13 | -bf frames 使用frames B 帧,支持mpeg1,mpeg2,mpeg4 |
14 | -ab bitrate 设置音频码率 |
15 | -ar freq 设置音频采样率 |
16 | -ac channels 设置通道 缺省为1 |
17 | -an 不使能音频纪录 |
18 | -acodec codec 使用codec编解码 |
19 | -benchmark 为基准测试加入时间 |
20 | -hex 倾倒每一个输入包 |
No comments:
Post a Comment