使用 ffmpeg 缩放、裁剪、剪辑视频
缩小视频
$ ffmpeg -i a.mov -vf scale=853:480 -acodec aac -vcodec h264 out.mp4
- -i a.mov 指定待处理视频的文件名
- -vf scale=853:480 vf 参数用于指定视频滤镜,其中 scale 表示缩放,后面的数字表示缩放至 853×480 px,其中的 853px 是计算而得,因为原始视频的宽高比为 16:9,所以为了让目标视频的高度为 480px,则宽度 = 480 x 9 / 16 = 853
- -acodec aac 指定音频使用 aac 编码。注:因为 ffmpeg 的内置 aac 编码目前(写这篇文章时)还是试验阶段,故会提示添加参数 “-strict -2” 才能继续,尽管添加即可。又或者使用外部的 libfaac(需要重新编译 ffmpeg)。
- -vcodec h264 指定视频使用 h264 编码。注:目前手机一般视频拍摄的格式(封装格式、文件格式)为 mov 或者 mp4,这两者的音频编码都是 aac,视频都是 h264。
- out.mp4 指定输出文件名
裁剪视频
$ ffmpeg -i a.mov -strict -2 -vf crop=1080:1080:0:420 out.mp4
$ ffmpeg -i IMG_4940.MOV -strict -2 -vf scale=853:480,crop=480:480:186:0 out.mp4
剪辑视频
$ ffmpeg -i a.mov -ss 00:00:21 -t 00:00:10 -acodec aac -vcodec h264 -strict -2 out.mp4
使用H264编码转换视频
H264(即MPEG4 AVC)是目前比较流行的视频编码格式,相对MPEG2编码而言,在画质大致相同的情况下能将视频大小再压缩到50%~25%,即如果一个MPEG2(如DVD)视频大小是1GB,用H264编码能缩小到250MB左右。另外H264编码的视频还能直接在浏览器(如Chrome)和移动设备(如iPhone、Android手机)上直接播放。
如果你有一堆家庭视频(旧款的家用DV一般是MPEG2格式)想刻录到光盘保存,或者有一堆手机不直接支持的格式的视频想在手机上播放,那么用H264编码转换和压缩它们是一个不错的选择。
mencoder 是一个很方便的视频编码程序,它几乎支持所有的视频格式,而且参数丰富、速度快。
首选你需要安装 mencoder 程序(下面分别是 Archlinux, Fedora, Ubuntu下的安装方式):
$ sudo pacman -S memcoder
$ sudo yum install mencoder
$ sudo apt-get install mencoder
然后就可以查看你当前系统支持哪些视频和音频编码器,以及支持哪些封装格式了:
$ mencoder -ovc help
$ mencoder -oac help
$ mencoder -of help
如果看到有x264视频编码器、有mp3lame音频编码器、以及有mp4封装格式,那么就可以开始下面的编码转换了,否则你可能需要安装相应的音频和视频编码器,一般安装 ffmpeg 组件就会同时附带这些编码器。
压缩一段MPEG2视频:
$ mencoder m001.mpg -o m001.mp4 -oac mp3lame -ovc x264 -of lavf -vf lavcdeint
上面命令中的 m001.mpg 和 m001.mp4 分别是输入和输出文件名,-oac 用于指定音频编码器,-ovc 指定视频编码器, -of
指定输出文件封装方式,lavf表示输出文件封装方式由输出的文件名(的扩展名)决定(比如m001.mp4表示用mp4封装,m001.avi表示用avi封装),最后
-vf lavcdeint 参数用于去除视频中的拉丝条纹(锯齿纹),如果没有的话不要这个参数也可以。
h264的编码过程比较耗时,比如 AMD 四核2.8G的编码速度大概是 30fps,大概是视频正常播放所需的时间。
如果待编码转换的视频文件很多,则最好写一个批量处理的脚本:
#!/bin/bash
find . -type f ( -name "*.mpg" -o -name "*.mpeg" )|while read line;do
echo $line
mencoder $line -o ${line}.mp4 -oac mp3lame -ovc x264 -of lavf -vf lavcdeint
done
执行上面的脚本会将当前目录里所有后缀名为“mpg”和“mpeg”的视频编码为H264格式。
最后,除了mencoder之外,还可以使用ffmpeg来编码.
-----------------
如果你有一堆家庭视频(旧款的家用DV一般是MPEG2格式)想刻录到光盘保存,或者有一堆手机不直接支持的格式的视频想在手机上播放,那么用H264编码转换和压缩它们是一个不错的选择。
转换mp4、x264、h.264
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的预设模式。预设模式的使用可以参考FFmpeg x264 encoding
guide。 你可以手工调整一些选项 (例如窗口大小: -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 倾倒每一个输入包.
ffmpeg site:
http://git.ffmpeg.org/
------------------------------
利用ffmpeg在linux下将mp3文件转换为wma
现在网络朝宽带网发展越来越快了,但服务器托管环境要变化还是要很多的¥,所以能节省一分就是一分。在网络上音频文件通常使用mp3格式存储,mp3格式音质可以压得比较好,但体积稍嫌有些大,而压低了音质的话就比较难听,而且也压得还不够小。wma文件在这点上相比mp3优化很多。经测试,使用24k码率下,5MB的mp3文件可压到1MB左右的wma,在我这样的烂耳朵下虽然分得出音质的胜负,但还尚能听。如果有朋友要做一个翻唱或乱录音的网站,那么把文件压成wma格式就合适不过了。
在网上搜了几十页,都是讲述如何将wma转换为mp3的,零星有几个mp3转wma的例子,可惜都是windows下的版本,有些还需要花钱。
于是干脆祭出ffmpeg,ffmpeg相信很多处理媒体文件的朋友都用过,是非常之强大,不但可以处理流行的flv等格式,我之前一直用来转换视频格式(asf、3gp、rm……)到wmv的,wmv既然能转,那么wma当然也一定能!
在网上搜寻一阵,找到了ffmpeg转wma的执行命令:
ffmpeg -y -ab 24 -ar 22050 -acodec wmav2 -i test.mp3 test.wma
其中-y参数是指直接覆盖存在文件而不用确认;-ab参数是码率;-ar参数采样率;-acodec是指定压缩格式;-i是指输入的文件;最后在敲上输出的文件就可以了。
对文件字节数影响最大的就是码率,wma文件最小的码率就是24k,不能再小了,唉,我还想用12k一试呢。
于是在命令行运行该命令,没有能成功,因为我两年前编译的这个ffmpeg并没有能支持wma。
于是到ffpeg的源码目录下(嘿嘿,这么多年了,这个源码目录居然还存在),忘了怎么编译?执行:
ffmpeg | head
就找回了原先的编译参数,是不是要加一个参数就能支持wma,难道还要装一个lame这样的东东么?敲上
./configure --help | grep wma
没有结果,仔细看了一遍help,也确实没有发现有关的东西。
于是在源码目录敲一下:
ss
请允许我有如此跳跃性的思维,其实我是没思路的时候,习惯性随手敲的,ss在我的机器上配置为svn up的快捷键。
这样一敲结果出现神奇现象,这个目录居然是一个svn拿下来的目录,而且,那么多年了,居然还能从这个svn地址check下东西,svn团队居然能把一个svn地址维护那么多年,一直没中断,实在是一大奇迹。
看一下这个传奇的svn地址:
svn://svn.mplayerhq.hu/ffmpeg/trunk
朋友们可以直接敲:
svn co svn://svn.mplayerhq.hu/ffmpeg/trunk
就可以拿下ffmpeg的所有东西了,我不知道ffmpeg现在有没有出tar.gz的包裹,前些年我就是直接从这个svn地址checkout下来的了。
多年没更新了,svn up的时间还比较长……
拿下最新的源码后,直接编译一下看看,我的编译参数是极简的:
./configure --enable-gpl --disable-debug --prefix=/data/ffmpeg --enable-libmp3lame --enable-pthreads --enable-nonfree
我用的系统是ubuntu,在ubuntu下有ffmpeg的apt,但当时安上去后发现没有声音,于是下载了ffmpeg的svn,并自己装上lame,才创出了声音。lame记得是用apt安装的,不很麻烦:
apt-get install lame liblame-dev
注意要安上liblame-dev的开发包,否则还是会不能支持mp3。
然后就是:
make; make install
无聊的过程。
装完后可以一测,嗯,这回能支持了。
总结(写到后面我总有点不耐烦):
###############################
#系统是ubuntu6
apt-get install lame liblame-dev
svn co svn://svn.mplayerhq.hu/ffmpeg/trunk
cd trunk
./configure --enable-gpl --disable-debug --prefix=/data/ffmpeg --enable-libmp3lame --enable-pthreads --enable-nonfree
make -j10; make install
###
然后就可以用了:
/data/ffmpeg/ffmpeg -y -ab 24 -ar 22050 -acodec wmav2 -i test.mp3 test.wma
附带转wmv的,我怕不支持,也小测一把:
ffmpeg -y -acodec mp3 -vcodec wmv2 -i test.rm test.wmv
ffmpeg -y -acodec wmav2 -vcodec wmv2 -i test.rm test.wmv
都可以。
-----------
------------------------------
利用ffmpeg在linux下将mp3文件转换为wma
现在网络朝宽带网发展越来越快了,但服务器托管环境要变化还是要很多的¥,所以能节省一分就是一分。在网络上音频文件通常使用mp3格式存储,mp3格式音质可以压得比较好,但体积稍嫌有些大,而压低了音质的话就比较难听,而且也压得还不够小。wma文件在这点上相比mp3优化很多。经测试,使用24k码率下,5MB的mp3文件可压到1MB左右的wma,在我这样的烂耳朵下虽然分得出音质的胜负,但还尚能听。如果有朋友要做一个翻唱或乱录音的网站,那么把文件压成wma格式就合适不过了。
在网上搜了几十页,都是讲述如何将wma转换为mp3的,零星有几个mp3转wma的例子,可惜都是windows下的版本,有些还需要花钱。
于是干脆祭出ffmpeg,ffmpeg相信很多处理媒体文件的朋友都用过,是非常之强大,不但可以处理流行的flv等格式,我之前一直用来转换视频格式(asf、3gp、rm……)到wmv的,wmv既然能转,那么wma当然也一定能!
在网上搜寻一阵,找到了ffmpeg转wma的执行命令:
ffmpeg -y -ab 24 -ar 22050 -acodec wmav2 -i test.mp3 test.wma
其中-y参数是指直接覆盖存在文件而不用确认;-ab参数是码率;-ar参数采样率;-acodec是指定压缩格式;-i是指输入的文件;最后在敲上输出的文件就可以了。
对文件字节数影响最大的就是码率,wma文件最小的码率就是24k,不能再小了,唉,我还想用12k一试呢。
于是在命令行运行该命令,没有能成功,因为我两年前编译的这个ffmpeg并没有能支持wma。
于是到ffpeg的源码目录下(嘿嘿,这么多年了,这个源码目录居然还存在),忘了怎么编译?执行:
ffmpeg | head
就找回了原先的编译参数,是不是要加一个参数就能支持wma,难道还要装一个lame这样的东东么?敲上
./configure --help | grep wma
没有结果,仔细看了一遍help,也确实没有发现有关的东西。
于是在源码目录敲一下:
ss
请允许我有如此跳跃性的思维,其实我是没思路的时候,习惯性随手敲的,ss在我的机器上配置为svn up的快捷键。
这样一敲结果出现神奇现象,这个目录居然是一个svn拿下来的目录,而且,那么多年了,居然还能从这个svn地址check下东西,svn团队居然能把一个svn地址维护那么多年,一直没中断,实在是一大奇迹。
看一下这个传奇的svn地址:
svn://svn.mplayerhq.hu/ffmpeg/trunk
朋友们可以直接敲:
svn co svn://svn.mplayerhq.hu/ffmpeg/trunk
就可以拿下ffmpeg的所有东西了,我不知道ffmpeg现在有没有出tar.gz的包裹,前些年我就是直接从这个svn地址checkout下来的了。
多年没更新了,svn up的时间还比较长……
拿下最新的源码后,直接编译一下看看,我的编译参数是极简的:
./configure --enable-gpl --disable-debug --prefix=/data/ffmpeg --enable-libmp3lame --enable-pthreads --enable-nonfree
我用的系统是ubuntu,在ubuntu下有ffmpeg的apt,但当时安上去后发现没有声音,于是下载了ffmpeg的svn,并自己装上lame,才创出了声音。lame记得是用apt安装的,不很麻烦:
apt-get install lame liblame-dev
注意要安上liblame-dev的开发包,否则还是会不能支持mp3。
然后就是:
make; make install
无聊的过程。
装完后可以一测,嗯,这回能支持了。
总结(写到后面我总有点不耐烦):
###############################
#系统是ubuntu6
apt-get install lame liblame-dev
svn co svn://svn.mplayerhq.hu/ffmpeg/trunk
cd trunk
./configure --enable-gpl --disable-debug --prefix=/data/ffmpeg --enable-libmp3lame --enable-pthreads --enable-nonfree
make -j10; make install
###
然后就可以用了:
/data/ffmpeg/ffmpeg -y -ab 24 -ar 22050 -acodec wmav2 -i test.mp3 test.wma
附带转wmv的,我怕不支持,也小测一把:
ffmpeg -y -acodec mp3 -vcodec wmv2 -i test.rm test.wmv
ffmpeg -y -acodec wmav2 -vcodec wmv2 -i test.rm test.wmv
都可以。
-----------
为 Linux 服务器编写的 BDRip 脚本
- ffmpeg
- mencoder
- x264
- mkvtoolnix
# $1 = origin file # $2 = output file # $3 = quality # $4 = threads # The crf option controls encoding quality, and indirectly the final # filesize. The higher the value, the more compression and thus smaller # file size. Reduce the value and file size will go up. A value of 21 # should produce a file of approximately 4GB in size for a typical movie. # Encode the video using x264, ignore the audio for now. mencoder $1.m2ts \ -ovc x264 -x264encopts \ crf=$3:frameref=3:bframes=3:direct_pred=auto:weight_b:partitions=all:8x8dct:me=umh:mixed_refs:trellis=1:nopsnr:nossim:subq=6:level_idc=41:threads=$4 \ -nosound \ -of rawvideo \ -o $2.x264 # Extract first sound track, normally stream 0:1 in BDs. ffmpeg -i $1.m2ts -map 0:1 -acodec flac $2.flac # Convert raw x264 video to MP4 ffmpeg -i $2.x264 -vcodec copy $2.mp4 # Finally, merge everything into a single MKV file mkvmerge -o $2.mkv $2.mp4 --track-name 0:Jpn $2.flac # Uncomment if you want to clean up your working environment. # rm $2.x264 $2.flac $2.mp4 # Tell the user we're done. echo "Rip complete. Output file is $2.mkv" |
transcode.sh
并赋予可执行权限:$ chmod +x transcode.sh
|
$ ./transcode.sh 00004 4 18 20
|
transcode.sh
是当前目录下的脚本文件,00004
代表当前目录下的 00004.m2ts
片源,输出文件将是 4.mkv
,压缩质量为 18
,编码过程使用 20 个线程(服务器一共 12 个核心 24 个线程么我就不客气啦。- FFmpeg - Extract Blu-Ray Audio - Gentoo Wiki
- HowTo: Encode a Blu-ray rip into a smaller format without losing quality
HowTo: Encode a Blu-ray rip into a smaller format without losing quality
- A pre-decoded Blu-ray movie file (.m2ts file).
- Approximately the same amount of free disk space as the size of the movie file. Eg: If you have a 25GB movie file, then you should have another 25GB free space to work with. You can have less, since the final resulting file will be much smaller than the original movie anyway, but since this process can take a number of hours to complete, you don’t exactly want to discover you ran out of disk space and have to start over, do you?
- A nice powerful CPU. I use a Intel quad-core Q9450 CPU at 2.66GHz. It takes my machine roughly 9-12 hours to process just one movie using four threads. A dual-core will take longer.
- Time to let the PC do its work, eg: overnight.
- You
will need some extra software installed if you haven’t already got it.
Open a terminal and type in the following at the $ prompt:
$ sudo apt-get install mencoder mplayer gpac x264 mkvtoolnix
(Don’t worry if you’ve already got some of those apps installed, Ubuntu will skip over them if they already exist on your system) - Create a new text file somewhere using your favourite text editor, eg:
$ gedit ~/encodevideo.sh
…will create a new text file called “encodevideo.sh” in the root of your Home directory using the GEdit text editor. - Now copy and paste the following script into it:
#! /bin/bash # ===================================================================== # Blu-ray encoding script by HyRax February 2009 http://www.serenux.com # ===================================================================== # Make sure the user has specified what to work on. if [ -z "$1" ]; then echo "\nBlu-ray movie encoding script\n-----------------------------" echo "Written by HyRax February 2009\nhttp://www.serenux.com" echo "\nUsage: $0
" echo "\nExample: If your movie file is called TheDarkKnight.m2ts then\nyour usage will be: $0 TheDarkKnight\n" exit fi # The crf=21 option controls encoding quality, and indirectly the final # filesize. The higher the value, the more compression and thus smaller # file size. Reduce the value and file size will go up. A value of 21 # should produce a file of approximately 4GB in size for a typical movie. # Encode the video using x264, ignore the audio for now. mencoder $1.m2ts \ -ovc x264 -x264encopts crf=21:frameref=3:bframes=3:b_pyramid=normal:direct_pred=auto:weight_b:partitions=all:8x8dct:me=umh:mixed_refs:trellis=1:nopsnr:nossim:subq=6:level_idc=41:threads=4 \ -nosound \ -of rawvideo \ -o $1.x264 # Dump the first original audio track (should be the English track) but # don't re-encode it. Ignore the video. mplayer $1.m2ts -dumpaudio -dumpfile $1.ac3 # Copy the raw x264 encoded video into an MP4 container so we can set # the correct framerate (generally 23.976 - adjust it if MPlayer or # MEncoder report something different) MP4Box -add $1.x264 $1.mp4 -fps 23.976 # Finally, merge everything into a single MKV file mkvmerge -o $1.mkv $1.mp4 --track-name 0:Eng $1.ac3 # Remove the hash in front of the next command to have the script delete # your working files when encoding is complete. # rm $1.m2ts $1.x264 $1.ac3 # Tell the user we're done. echo "All done! Your final movie file is called $1.mkv - enjoy!" - Save and exit your text editor.
. - Change directory to where you have your original .m2ts file, eg:
$ cd ~/Videos/BDRips/MyMovie
- Let’s say your movie file is called TheIsland.m2ts. To begin encoding it, you will use the following command:
$ sh ~/encodevideo.sh TheIsland
(Notice that we don’t specify the file extension – the script assumes .m2ts on the end already) - Hit enter and the encoding process will begin. The script does the following in order:
- Extract the video component only and encode it in a single pass to a raw x264 video file called TheIsland.x264 (in this example).
- When that has finished, go back and extract the first audio track only and save it to a file called TheIsland.ac3 without any re-encoding.
- When that has finished, take the raw x264 video data and put it into an MPEG4 container so we can fix the framerate at 23.976 frames per second, typical of most Blu-ray movies. If you don’t do this step, then the video will play faster than the audio in the final product.
- Finally we create a new Matroska container called TheIsland.mkv and in it we place the framerate-adjusted MPEG4 video track and the unmodified audio track, producing our final product.
. - When the script has finished some 9-12 hours later, you will have a file called TheIsland.mkvready
for playback in Totem, MPlayer, VLC, or whatever your favourite player
is. You will notice that the filesize is significantly smaller than the
original but when you play it back, the image quality will look pretty
much 100% identical to the original. About the only compression
artefacts you may notice is around the edges of some text titles such as
opening credits, but you’d really have to look hard to spot them.
. - We’ve
finished with the working files now, so you can delete the .m2ts, .x264
and .ac3 files now to reclaim the disk space and enjoy your new .mkv
file.
.
-------------------------------------
免费开源的视频/音频格式转换和压缩软件FFmpeg-快速转换格式和压缩视频
写在前面
本教程的目的是展示并教学广义上“压制”的工作。这些工作所涉及的工具非常众多且步骤繁琐,所需要的知识点也非常分散,所以教程的章节构成会比较随意,在阅读一些章节时,可能需要同时参考其他章节一并学习。笔者希望尽量以简单易懂的方法来叙述教程的每一部分,但是由于表达水平有限,语句不通等丢人问题还请包涵,希望读者能够多多见谅。
本文受到guide.encode.moe的启发并借鉴了其一定思路,但更多的希望专精于压制方面,更详细的阐述视频处理方面的内容。
由于AVS已经十分古老,使用的必要性也已经极其有限,所以本教程主要使用Vapoursynth作为视频处理工具并且主要在Windows平台下进行示例(你既然都用OS X/Linux了,那……)。
from https://github.com/pwinner/Mystery-Encoding-Guide
-----
使用ffmpeg无损剪切视频
在上传视频时,发现上传提示视频文件过大,这时我们可以使用ffmpeg命令行来直接对视频做无损分割。
ffmpeg -y -ss START -t DURATION -i INPUT -c copy OUTPUT
示例
ffmpeg -y -ss 0:1:20 -t 0:0:30 -i input.avi -c copy output.avi
对上面涉及到的参数进行解释:
-y 覆盖已经存在的文件;
-ss 开始时间,如: 00:1:20,表示从1分20秒开始;
-t 时长,如: 00:00:20,表示截取20秒长的视频;
-i 输入,后面是空格,紧跟着就是输入视频文件;
-c copy,拷贝所有流;
INPUT,输入视频文件;
OUTPUT,输出视频文件;
-------------------
利用ffmpeg将图片和音频拼接成视频
ffmpeg -loop 1 -i 86074442_p0.jpg -i "1.wav" -acodec aac -c:v h264_nvenc -ab 2822k -shortest -s 1280*720 result.mp4
参数解释:
86074442_p0.jpg - 图片文件名
wav - 音频文件名(如果已经aac编码可以直接copy,这里因为是从无损编码过来的)
-c:v h264_nvenc - 视频编码器(开启N卡硬件加速,h265可选hevc_nvenc)
-acodec aac - 音频编码器
-ab 2822k - 音频码率,目前看来好像不能到这么高
-shortest - 截断
-s 1280*720 - 输出分辨率
result.mp4 - 输出文件
使用ffmpeg进行视频格式转换
今天用别人的脚本在bilibili上面下载了个视频,发现时flv格式的,我博客对flv格式支持不是很好,于是就想转换一下视频格式百度了一下,无意中看到了ffmpeg,以前听别人说过这个工具,听说特别强大,于是就了解了一下ffmpeg,发现真的超级好用!
FFmpeg是一个多媒体视频处理工具,有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。我在ffmpeg官网下载了mac版的dmg安装包,直接就安装好了,环境都不用自己添加了,挺方便的。
我只用到了视频转换功能 -i 后面跟你要转换的视频文件,接着后面自定义输出文件名和格式
1 | ffmpeg -i input.flv output.mp4 |
这个工具还有其他很强大的功能,我在网上搜集了一点常用的功能和命令,在此记录,以便以后方便查找使用
主要命令
1 | 主要命令: |
常用功能
1 | 1. 视频文件简单转换成另一个格式的视频文件, 会默认使用H264编码格式输出视频文件. |
-------------------------------
利用FFMPEG进行简单的视频剪辑与转码
安装
Ubuntu
sudo apt install ffmpeg
Windows
下载 FFMPEG 安装包,并将安装目录内 bin 文件夹添加到系统 PATH
转码
简单命令:
ffmpeg -i original.mp4 -c:v h264 output.mp4 # 转码为 h264 编码
ffmpeg -i original.mp4 output.gif # 转换为 gif
ffmpeg -i original.mp4 -s 640x480 -vframes 90 -r 29.97 -c:v h264 -b:v 500k -b:a 48k -ac 2 output.mp4 # 多参数
参数:
-i
参数为输入文件-s
指定分辨率-r
指定帧率-c:v
或-vcodec
参数为输出编码 可以省略,如果插入PPT最好输出为 gif 可选项mpeg4
libxvid
等-c:a
或-acodec
指定音频编码-b:v
指定视频比特率-b:a
或-ab
指定音频比特率-ac
指定声道数
如果对这些指标没有特殊要求,不需要手动指定参数
调整播放速度
加速/减速视频
ffmpeg -i original.mp4 -filter:v "setpts=0.25*PTS" output_v_fast.mp4 # 加速四倍
ffmpeg -i original.mp4 -filter:v "setpts=4*PTS" output_v_slow.mp4 # 减速四倍
参数:
--filter:v
或-vf
指定一个视频过滤器
通过以上方法加速得到的视频,视频时长不变,前面部分为原视频加速后结果,之后画面保持最后一帧直至结束,因为音频还是原来的长度。
通过以上方法减速得到的视频,视频长度相应延长,帧率不变。
视频加速时为了避免丢帧,可以尝试将目标文件的FPS依据源文件的FPS相应提高,以保留原始视频所有帧。比如加速一个60FPS的源文件4倍,则将目标文件的FPS设置为240。不过视频减速则没有什么好的方法 加速后视频后面部分为同一帧画面问题依然存在
ffmpeg -i original.mp4 -filter:v "setpts=0.25*PTS" -r 120 output_fast.mp4 # 加速四倍
加速/减速音频
ffmpeg -i original.mp4 -filter:a "atempo=2.0" output_a_fast.mp4 # 加速2倍
ffmpeg -i original.mp4 -filter:a "atempo=0.5" output_a_slov.mp4 # 减速2倍
ffmpeg -i original.mp4 -filter:a "atempo=2.0" -vn output_a_fast.mp4 # 只保留音频
参数:
vn
video negative 不保留视频an
不保留音频
注意视频加速时参数小于1而音频加速时参数大于1,另外对于音频的加速减速倍数限制在0.5-2.0以内,不过可以通过叠加过滤器的方式突破这一限制。
同时加速/减速视频和音频
单纯加速/减速音视频中的一个会导致视频文件音视频时间戳长度不一产生错误,所以最好将音视频的加减速统一起来。
同时加速视频和音频
ffmpeg -i original.mp4 -r 240 -filter:v "setpts=0.25*PTS" -filter:a "atempo=2.0, atempo=2.0" output_fast.mp4 # 直接叠加过滤器
ffmpeg -i original.mp4 -filter_complex "[0:v]setpts=0.25*PTS[v];[0:a]atempo=2.0,atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4 # 使用复合过滤器
截取视频
初级代码
# 按时间长度截取
ffmpeg -i original.mp4 -ss 00:00:00.0 -t 00:00:10.0 -c copy output_trim.mp4 # 精确时间格式
ffmpeg -i original.mp4 -ss 0 -t 10 -c copy output_trim.mp4 # 只使用秒
ffmpeg -ss 0 -t 10 -i original.mp4 -c copy output_trim.mp4 # 使用关键帧
# 按开始结束截取
ffmpeg -ss 0 -to 10 -i original.mp4 -c copy output_trim.mp4
参数:
-c
编码 同-codec
-c copy
复制原视频编码
ffmpeg 为了加速,会使用关键帧技术, 所以有时剪切出来的结果在起止时间上未必完全准确。 把 -i 放在 -ss 之前,不使用关键帧技术,把 -i 放在 -ss 后,使用关键帧技术。
以上简单的截取方式,如果使用关键帧,则截取出的视频长度无法控制,会多出几秒;如果不适用关键帧,视频会出现一小段时间只显示某一帧画面的情况。
这种方法,不需要重新编码,速度较快。
进阶代码
ffmpeg -ss 5 -t 10 -accurate_seek -i original.mp4 -c copy -avoid_negative_ts 1 output_trim.mp4 # 使用关键帧
ffmpeg -accurate_seek -i original.mp4 -ss 5 -t 10 -c copy -avoid_negative_ts 1 output_trim.mp4 # 不使用关键帧
使用关键帧可以正常截取,但会出现多出一小段视频,不使用关键帧,视频开头存在几秒定格画面。
进进阶代码
FFMPEG 转码时时间是精确的,所以借助转码截取视频。
ffmpeg -ss 5 -t 10 -accurate_seek -i original.mp4 -c:v h264 -c:a copy -avoid_negative_ts 1 -strict experimental output_trim.mp4 # 使用关键帧
ffmpeg -accurate_seek -i original.mp4 -ss 5 -t 10 -c:v h264 -c:a copy -avoid_negative_ts 1 -strict experimental output_trim.mp4 # 不使用关键帧
使用关键帧,视频时长依旧不准确。不使用关键帧效果更好,时长准确,播放完美。
总结
使用转码进行视频截取,不要使用关键帧,亲测效果很好。
ffmpeg -accurate_seek -i original.mp4 -ss 5 -t 10 -c:v h264 -c:a copy -avoid_negative_ts 1 -strict experimental output_trim.mp4 # 不使用关键帧
合并视频
按文件列表合并
先创建一个文本文件filelist.txt:
file '1.mp4'
file '2.mp4'
之后合并
ffmpeg -f concat -i filelist.txt -c copy concat.mp4
转换为中间格式之后合并
ffmpeg -i original.mp4 -qscale:v 1 intermediate1.mpg
ffmpeg -i original.mp4 -qscale:v 1 intermediate2.mpg
ffmpeg -i "concat:intermediate1.mpg|intermediate2.mpg" -c copy concat.mpg
ffmpeg -i concat.mpg -qscale:v 1 concat.mp4
参数:
-qscale:v
视频质量,可省略
Tips
查看视频信息
ffmpeg -i original.mp4
播放视频
ffplay original.mp4
从视频提取图片
ffmpeg -i original.mp4 -r 1 -f image2 image-%2d.png # 每秒 1 张
裁切画面
ffmpeg -i original.mp4 -filter:v "crop=200:200:50:50" croped.mp4
参数:
-filter:v "crop=w:h:x:y"
宽度,高度,画面左上角坐标
参考:
-------------------------
ffmpeg - macOS 平台编译完成版
FFmpeg 是开源的音视频工具,其官网只提供源代码,本文提供已编译的 macOS 平台二进制文件下载。
关于
本文中的文件由 https://evermeet.cx/ffmpeg/ 提供,文件由下面命令编译而成:
configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvmaf --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay
-------------------
Streaming dynamic playlist simply using FFMpeg.
ffplaylist
Streaming dynamic playlist simply using FFMpeg.
For example, you have a directory containing audio files. You want to stream it to some server.
python3 random_files.py 'music/*.m4a' | python3 ffplaylist.py -vv -p -- -vn -c:a copy -content_type audio/aac -password hackme icecast://10.0.0.2:9000/music.aac
usage: ffplaylist.py [-h] [-e FFMPEG] [-v] [-p] ...
FFMpeg dynamic playlist input. Feed stdin with your list of media files.
positional arguments:
args ffmpeg output arguments
optional arguments:
-h, --help show this help message and exit
-e FFMPEG, --ffmpeg FFMPEG
ffmpeg/avconv executable, can be set using FFMPEG
environment variable
-v, --verbose verbosity level. -v prints filename, -vv shows ffmpeg
output.
-p, --progress show progress bar.
from https://github.com/gumblex/ffplaylist
-------------------------
在Mac OS X下,用ffmpeg把mpeg转换成mp3
要将几个mpeg文件转换成mp3,
试了一大轮freeware/shareware/open
source软件之后发现ffmpeg最简单,命令行一行搞定:
ffmpeg -i video1.mpeg video1.mp3
因为是在Mac OS
X下(LD的MacBook)安装ffmpeg有点麻烦,如果没装MacPorts可以采用先安装ffmpegX的“曲线救国”方式,
安装完之后可以在/Applications/ffmpegX.app/Contents/Resources/ffmpeg
找到ffmpeg命令。
windows version下载地址:
https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip
No comments:
Post a Comment