FFmpeg是Ubuntu下强大的视频、音频编解码工具。 x264可以编码出高质量的h.264视频,iPad必须要h.264编码或mpeg-4编码的视频才能正常播放。

由于版权方面尚未确定,虽然全国很多网站都在使用h.264编码,但将来很有可能会被版权问题所困扰,所以Ubuntu官方源默认是不提供h.264编码的,这就需要我们手工编译安装FFmpeg的h.264支持,使之能够编码出mp4文件。

Ubuntu下安装、使用和升级FFmpeg的方法如下:

1、安装支持包

#libmp3lame
sudo apt-get remove libmp3lame-dev
sudo apt-get install nasm
wget http://downloads.sourceforge.net/project/lame/lame/3.98.4/lame-3.98.4.tar.gz
tar xzvf lame-3.98.4.tar.gz
cd lame-3.98.4
./configure --enable-nasm --disable-shared
make
sudo checkinstall --pkgname=lame-ffmpeg --pkgversion="3.98.4" --backup=no --default --deldoc=yes

#卸载现有的 x264、libx264-dev、FFmpeg
sudo apt-get remove ffmpeg x264 libx264-dev

#安装所有的 FFmpeg 和 x264 支持包
sudo apt-get update
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

cd
git clone git://git.videolan.org/x264.git
cd x264
./configure
make
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

cd
svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
./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
make
sudo checkinstall --pkgname=ffmpeg --pkgversion "4:SVN-r`LANG=C svn info | grep Revision | awk '{ print $NF }'`" --backup=no --deldoc=yes --fstrans=no --default
hash x264 ffmpeg ffplay

4、安装qt-faststart(可选)

这是个重要的x264再编码工具, 它的作用是使得视频不必等待下载完成即可开始播放。

使用方法:

qt-faststart input.foo output.foo

安装方法:

cd ~/ffmpeg
make tools/qt-faststart
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

sudo apt-get remove ffmpeg x264 libx264-dev libvpx

cd ~/x264
make distclean
git pull

cd ~/ffmpeg
make distclean
svn update
./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
make
sudo checkinstall --pkgname=ffmpeg --pkgversion "4:SVN-r`LANG=C svn info | grep Revision | awk '{ print $NF }'`" --backup=no --deldoc=yes --fstrans=no --default
hash x264 ffmpeg ffplay

7、使用 FFmpeg and x264
容易的输出高质量视频的方法是使用FFmpeg中libx264的预设模式。你可以手工调整一些选项 (例如窗口大小: -s 640×480) 。 另外你可以参考 libx264 预设模式在线列表或再 /usr/local/share/ffmpeg 目录中查找帮助。

One-pass CRF (Constant Rate Factor) 使用预设模式:slow. One-pass CRF是经常使用的常规编码方式. 调整 -crf 可以改变输出质量. 数字越小输出质量越高同时输出尺寸越大. 可使用的数字范围是:18 ~ 28。

ffmpeg -i input.avi -acodec libfaac -ab 128k -ac 2 -vcodec libx264 -vpre slow -crf 22 -threads 0 output.mp4

Two-Pass encode 使用预设模式: fast. 想要精确设置目标编码率、文件大小的时候会使用到这个编码模式。

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

iPod/iPad 640×480,使用预设值: slow 和 ipod640:

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

flv视频转换为mp4视频:

ffmpeg -i source.flv -f avi -vcodec mpeg4 output.mp4

合并视频文件

ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
或用mencoder合并视频文件:
mencoder -oac copy -ovc copy -idx -o output.avi video1.avi video2.avi video3.avi

截取一张352×240尺寸大小的,格式为jpg的图片:

ffmpeg -i source.avi -y -f image2 -t 0.001 -s 352x240 output.jpg

把视频的前11帧转换成一个动画图片(Animated Gif):

ffmpeg -i source.avi -vframes 11 -y -f gif output.gif

在视频的第8.01秒处截取 352*240 的缩略图:

ffmpeg -i source.avi -y -f image2 -ss 08.010 -t 0.001 -s 352x240 output.jpg

转换 yuv 文件

ffmpeg -s cif -vcodec mpeg4 -i paris.yuv paris.avi
说明:
-s 指定帧大小 cif 为 352x288,qcif 为 176x144,4cif 为 704x576
-vcodec 指定采用的编码器
-i 指定输入文件

输出 raw YUV420P 文件:

ffmpeg -i paris.avi paris0.yuv

将一段视频输出为图片序列

ffmpeg -i 1.avi cat%d.png -vcodec png
说明:
-vcodec mjpeg
-vcodec ppm
ffmpeg -i 1.avi cat%04d.jpg -vcodec mjpeg -ss 0:1:2 -t 0:0:1
说明:将1.avi视频 1分02秒 处开始,持续1秒长的视频输出为jpg的序列
ffmpeg -vcodec mjpeg -i 1.flv test%02d.jpg -ss 0:0:2 -t 0.001
说明: -t 表示持续时间为0.001秒,这个命令相当于截取开始2秒处的一幅jpeg的图片

多输入单输出

ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg

单输入多输出

ffmpeg -i /tmp/a.wav -ab 64 /tmp/a.mp2 -ab 128 /tmp/b.mp2 -map 0:0 -map 0:0
说明:-map file:stream_index 指定哪一个输入流用于输出流,顺序对应

DVD 转 mpeg4

ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp2 -ab 128 snatch.avi
说明:
压制高品质mp4的参考参数:
'-mbd rd -flags +4mv+trell+aic -cmp 2 -subcmp 2 -g 300 -pass 1/2'
可以试试: '-bf 2', '-flags qprd', '-flags mv0', '-flags skiprd'

编码 mpeg1/mpeg2

ffmpeg -i 1.avi -vcodec mpeg2video 2.mpg
说明:
注意mpeg2的codec为 mpeg2video
其他codec可以使用 ffmpeg -formats 查看
压制高品质mp1/mp2的参考参数:
'-mbd rd -flags +trell -cmp 2 -subcmp 2 -g 100 -pass 1/2'
注意,加 '-g 100' 可能会使某些解码器没法解码
可以试试: '-bf 2', '-flags qprd', '-flags mv0', '-flags skiprd'

编码为 flv

ffmpeg -i 1.avi -ab 56 -ar 22050 -b 500 -r 15 1.flv

X 屏幕录像
FFmpeg 捕获 X11 的显示内容:

ffmpeg -f x11grab -i :0.0 /tmp/out.mpg
说明:
0.0 是 X11 服务器 display.screen 格式的编号 , 可从环境变量的设置中获取。
ffmpeg -f x11grab -i :0.0+10,20 /tmp/out.mpg
说明:
0.0 是 X11 服务器 display.screen 格式的编号 , 可从环境变量的设置中获取。
10 、 20 分别是捕获窗口的x、y偏移量。

音视频采集

ffmpeg -f audio_device -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg
说明:使用FFmpeg捕获前视频源必须有效激活 。

FFmpeg截图参数

ffmpeg -i xxx.xxx -y -f image2 -ss 8 -t 0.001 -s 350x240 xxx.jpg

FFmpeg 加水印 参数:

ffmpeg -i inputfile.xxx -tagpict ":220:210" -ab 56 -ar 22050 -qmin 2 -qmax 16 -b 320k -r 15 -s 320x240 outputfile.flv
水印参数说明:
-tagpict ":220:210"
(在ffmpeg所在目录中寻找0002.mjpg、mask.mjpg两个用作水印处理的图片文件,然后在指定的坐标,比如此处的:220:210,把水印在转码过程中添加到视频文件的每一桢上)

ffmpeg -i input.wmv -vhook 'vhook_path/watermark.so -f logo.png -x -10 -y -10 -w 4 -h 4' output.mpg
ffmpeg -i input.flv -vhook '/usr/lib/vhook/watermark.so -f
logo.gif -m 0 -t ffffff' -ab 96 -b 8000k output.flv

AviSynth加水印:
首先ffmpeg/Mencoder编译时需要–enable-avisynth;

转换参数:ffmpeg -y -i 1.avs -b 320k rmvb-avs.flv

avs编写格式:

video = DirectShowSource("rmvb.rmvb",15).BilinearResize(320,240)
logo = ImageSource("logo2.jpg")
logomask = ImageSource("mask2.jpg")
overlay(video,logo,mask=logomask)

常用选项

-i filename 输入文件
-f fmt 强迫采用格式fmt
-y 覆盖输出文件
-ss position 搜索到指定的时间处开始 [-]hh:mm:ss[.xxx]的格式也支持
-b bitrate 设置比特率,缺省200kb/s
-r fps 设置帧频 缺省25
-s size 设置帧大小 格式为WXH 缺省160X128.下面的简写也可以直接使用:
sqcif 128X96 qcif 176X144 cif 352X288 4cif 704X576
-vcodec codec 强制使用codec编解码方式。 如果用copy表示原始编解码数据必须被拷贝。
-sameq 使用同样视频质量作为源(VBR)
-g gop_size 设置图像组大小
-intra 仅适用帧内编码
-bf frames 使用frames B 帧,支持mpeg1,mpeg2,mpeg4
-ab bitrate 设置音频码率
-ar freq 设置音频采样率
-ac channels 设置通道 缺省为1
-an 不使能音频纪录
-acodec codec 使用codec编解码
-benchmark 为基准测试加入时间
-hex 倾倒每一个输入包

Ubuntu转换H264,X264,MP4相关推荐

  1. Java视频格式转换---avi转MP4(h264编码格式)

    Java视频格式转换---avi转MP4(h264编码格式的MP4视频在网页播放兼容性更好--试过其它的编码格式,没找到能在网页上直接播放的) 资源借鉴处 需要添加到pom.xml的包 java代码 ...

  2. mp4格式转换专家-魔法mp4格式转换器轻松应对mp4电影格式转换

    原文: mp4转换专家-魔法软件轻松应对mp4电影格式转换  链接: http://www.mofavideo.com/mp4/ 关键词:mp4电影格式转换, mp4格式转换器.mp4转换专家 MP4 ...

  3. h264转mp4 linux,mp4格式的视频,编码方式mpeg4,转化为h264

    知识点:在使用vcastr3.swf播放器播放flv视频,(同时在html5页面,使用<video>标签时),发现某些MP4格式的代码不能播放html 缘由:vcastr3.swf和vid ...

  4. avi怎么转换成视频mp4

    avi怎么转换成视频mp4?最近,avi怎么转换成视频mp4被问到爆炸,小编已经猜测到有很多小伙伴着急转换所以已经迫不及待的着手找具体的转换方法了,但是当打开电脑的时候却又不知道从哪里下手,我要怎么找 ...

  5. wmv怎么转换成视频mp4格式?

    那么wmv怎么转换成视频mp4格式?其实无论是在工作还是生活亦或是在学习中,都是在不断的遇见问题,不断解决问题的过程.每当解决一个问题,就前进了一小步.就像前几天有个小伙伴遇到了wmv格式的视频文件, ...

  6. wmv 转 html5 mp4,转换WMV到MP4得到黑色屏幕

    当转换一个.wmv文件到.MP4我用这个命令:转换WMV到MP4得到黑色屏幕 EXEC("FFMPEG -i file.wmv -vcodec MPEG4 -acodec libfaac - ...

  7. ffpmeg相对无损转换mkv到mp4,保留标签、封面等元数据

    其实这个无损是相对无损,不是绝对无损 因为mkv封装支持的格式.标签等是比mp4封装要多的 比如mkv可以封装wav音频,mp4不能封装wav音频 所以这里的无损的前提是该mkv的媒体流.标签(TAG ...

  8. 关于H264,X264,DivX,Xvid的小知识 fr net

    关于H264,X264,DivX,Xvid的小知识 HDTV的概念 HDTV即High-Definition TV ,高清晰数字电视.这个概念其实可以非常简单地表达出来.所谓"数字" ...

  9. php ffmpeg 转码mp4,PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件

    配置php.ini文件 file_uploads = on ;//是否允许通过HTTP上传文件的开关.默认为ON即是开 upload_tmp_dir ;//文件上传至服务器上存储临时文件的地方,如果没 ...

最新文章

  1. Spring-data-jpa和mybatis的比较及两者的优缺点?
  2. 腾讯年度性爱报告被曝,最后一条数据我羞愧了!
  3. java继承层次结构,在状态模式中实现继承层次结构 - java
  4. 实战sqlmap绕过WAF
  5. STL之string类型
  6. Data Lake Analytics-数据分析时代迎来新变革
  7. CTFHUB 《请求方式》 http请求,curl命令总结
  8. 查看mysql是否归档的命令_查看oracle数据库是否为归档模式
  9. linux加入微软,微软正式加入Linux基金会
  10. java 中 Integer 比较 问题
  11. java安装没有jdk文件_java文件在没有安装jdk的windows下运行。
  12. itunes显示无法更新服务器失败怎么办啊,iTunes更新时出错怎么办?iTunes更新时出错的解决方法...
  13. maven的pom文件引入依赖报错:提示无法处理 Cannot resolve...
  14. RFT API初涉——之解决RFT无法识别windows对话框的问题
  15. 软件首次亮相前超级账本技术升温
  16. 10G Ethernet PCS/PMA IP 核
  17. 顶风作案:谈一谈债务危机
  18. Databricks 第5篇:Databricks文件系统(DBFS)
  19. 黑群晖二合一安装不了套件_玩PT还是得安装transmission,星际蜗牛安装黑群晖制作家用NAS...
  20. 2021度小满9.20编程笔试

热门文章

  1. php织梦二次开发的功能例子,织梦dedecms二次开发php使用json讲解
  2. 德龙X5000导航升级包下载
  3. 刀片服务器与机架式服务器的选择
  4. WBTCITRIX上实现安装打印机的几种方法
  5. python抢购爬虫_python爬虫,抢小米抢购,
  6. 解决git clone只有master分支的问题
  7. 十大真实的谎言之:一流企业做标准
  8. 三星a5009Android6.0,三星A5009 (Galaxy A5 电信版)一键救砖教程,轻松刷回官方系统
  9. C语言数字图像处理---1.4直方图拉伸和直方图均衡化
  10. Java中List集合的遍历