FFmpeg 抽取视频中的一段(视频转换)

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

ffmpeg.exe -i IMG_1137.MOV  -f mpegts -ar 48000 -ab 64k -s 1280x720 -vcodec libx264 -x264opts keyint=15:min-keyint=10 -r 25 demo1.mp4

在网上找了个视频,其中有部分内容是需要的,能不能从整个文件中抽取一部分呢?或抽取一部分内容的音频列?在查阅了资料后发现 FFmpeg 很容易实现这些功能。

ffmpeg -ss 00:46:28 -i "Morning_News.asf" -acodec copy -vcodec copy -t 00:03:25 output.asf
这行命令解释为:从文件 Morning_News.asf 第 46:28 分秒开始,截取 03: 25 的时间,其中视频和音频解码不变,输出文件名为 output.asf 。

那如果视频文件太大,该如何保存为的 mp3 文件呢?

ffmpeg -ss 00:46:28 -i "Morning_News.asf" -t 00:03:25 output.mp3
这两条命令顺序一定要注意。不然运行会有问题。切记切记!

参考:
1、http://wuyuans.com/2012/04/ffmpeg-split/
2、http://ffmpeg.org/ffmpeg.html

视频合并
1. 首先将各个视频全部转换为mpeg格式:
ffmpeg  -i INPUT -f mpeg  OUTPUT

例如:
ffmpeg  -i 1.flv -f mpeg -r 29.97 result1.mpg
ffmpeg  -i 2.flv -f mpeg  result2.mpg

2. 通过copy或者cat命令合并视频
copy -b INPUT+INPUT OUTPUT

例如:
copy /b "result1.mpg"+"result2.mpg" "result.mpge"

3. 将合并的视频进行编码生成最终的结果视频
ffmpeg -i INPUT -f FORMAT OUTPUT

例如:
ffmpeg -i "D:/result.mpge" -f mp4 "D:/result.mp4"


========================================================================

录音在windows 下也是可以的, 不过选择音频设备的时候要输入全部设备名
DirectShow

 ffmpeg -list_devices true -f dshow -i dummy
可以查看设备,以便设置参数

如果从mic 里录音,大概命令是这样

 ffmpeg -f dshow -i audio="linein (USB Audio Device)" out.mp3
audio="xxx" (xxx) 是自己的录音设备,全部设备名, 设备名可以从 list device 里看到

========================================================================

sudo apt-get build-dep ffmpeg
到http://ffmpeg.mplayerhq.hu下载最新的ffmpeg源代码
解压,安装:
[wheer]$ ./configure --prefix=/usr --enable-gpl --enable-shared --enable-libmp3lame --enable-libamr_nb --enable-libogg --enable-libvorbis --enable-libxvid --enable-liba52 --enable-liba52bin --enable-pp --enable-libfaad --enable-libfaadbin --enable-libfaac --enable-pthreads --disable-ffserver --enable-x11grab
[wheer]$ make
[wheer]$ sudo make instal
./configure的参数很多,可以用./configure --help来看,很多选项默认是不打开的,得加上,本来我还加上--enable-libx264的,但编译出错,去掉才好了-_-
ok了,既然费劲装了这么个怪物,当然要好好利用了,ffmpeg最强大的自然是音、视频录制和转换了,它的格式支持也许比不上mencoder,但似乎更好理解点,举些例子吊吊胃口,更多变态功能自己摸索吧,反正本人连摄像头都没有,也没有那么多需求:
录音(mp3或amr):
ffmpeg -f oss -i /dev/dsp wheer.mp3
ffmpeg -f oss -i /dev/dsp -ar 8000 -ab 10200 wheer.amr
当然你还可以设一堆参数,如调节音量-vol 1024(256是默认值), 设定采样率-ar 8000,设定比特率-ab 122000等等。。。至于你想在麦克和声卡之间切换当然就可以求助于aumix了
另外,我还在~/.bashrc中定义alias amrec='ffmpeg -f oss -vol 1024 -i /dev/dsp -ar 8000 -ab 10200',以后就用amrec file.amr录音了,压缩率极高,一小时音频才5M多:)

屏幕录像:
ffmpeg -f x11grab -s xga -r 10 -i :0.0+0+0 wheer.avi
其中-f指定x11grab表示屏幕录像(*编译时必须加上--enable-x11grab选项*),-s设定尺寸,写成缩写或1024x768格式均可,-f设定fps,-i中的:0.0表示你的x11屏幕,+0,0表示偏移,如果你想录制某个小窗口,可以用xwininfo -frame来找到具体坐标。
另外还有一堆参数可设,如比特率-b 200000,-vcodec为视频编码,还可加上-f oss -i /dev/dsp同时录音,用aumix将录音源调成麦克风就可以配音了,声音太小了用-vol改~~

mp3->amr, amr->mp3
ffmpeg -i wheer.mp3 -ab 122000 wheer.amr
ffmpeg -i wheer.amr wheer.mp3

从视频中抓取音频
ffmpeg -i movie.rmvb -ss 40 -vn wheer.mp3
ffmpeg -i movie.rmvb -ss 40 -vn -ab 12200 -ar 8000 -ac 1 wheer.amr
均表示从第40s开始抓取,-vn表示不要视频

截图或gif动画
ffmpeg -i wheer.avi -t 0.001 -f image2 cap.jpg
ffmpeg -i wheer.avi -ss 10 -t 5 -pix_fmt rgb24 -loop_output 0 -f gif cap.gif
其中第二行表示从第10秒开始截5秒视频为gif动画,并将gif设为无限次重复播放

转换为3gp格式(手机上常用)
ffmpeg -i wheer.avi -s 176x144 -b 20000 -acodec amr -ab 12200 out.3gp
另外,我发现新版的ffmpeg和老版的用法还不太一样,如新版就没有-vd(video device)选项,屏幕录制就只能用-f x11grab,另外比特率单位在新版是b/s,在老版是kb/s,等等。。。