ffmpeg
2016年05月13日

概述

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

常用命令

提取mp3

ffmpeg -i source.flv target.mp3

截取mp3片段 从1分5秒截取2:10的长度

ffmpeg -i source.mp3 -ss 00:01:05 -t 00:02:10 target.mp3

指定区域屏幕录像

ffmpeg -f x11grab -s 1024x768 -r 25 -i :0.0+412,55 -sameq /tmp/out.mpg

高清,录制的时候占资源也高,也跟录制的窗口大小有关

ffmpeg -f x11grab -r 25 -s 524x293 -i :0.0+458,128 -vcodec libx264 -threads 0 video.mkv

合并多个视频

  1. 把要合并的诺干个视频文件格式转换成AVI(测试过mpeg格式,但是在第二步合成后放在后面的视频花屏)
ffmpeg -i aaa.avi -f avi -qscale 51 -y -r 29.97 ffff.avi
  1. 使用concat合并这两个文件
ffmpeg -i concat:"part1.avi|part2.avi" -vcodec copy -acodec copy output.avi

PS:

  1. 经过测试,如果合成时part1.avi不带有声音的话,不论part2.avi有没有声音,合成后的视频是没有声音的,所以要想合成后的视频保留声音,part1.avi必须带有有声音。
  2. 这个合成指令似乎对part1.avi|part2.avi的格式有比较严格的要求,不单单是文件的后缀名相同(废话),我用狸窝全能视频转换器转换后的part1.avi无法与使用ffmpeg转换后的part2.avi合成能够正常播放的视频(会花屏),所以像我一样对视频格式不熟悉的话还是都先用ffmpeg进行格式转换再合成。

获取视频的信息

ffmpeg -i video.avi

将图片序列合成视频

ffmpeg -f image2 -i image%d.jpg video.mpg

上面的命令会把当前目录下的图片(名字如:image1.jpg, image2.jpg, 等…)合并成video.mpg

将视频分解成图片序列

ffmpeg -i video.mpg image%d.jpg

上面的命令会生成image1.jpg, image2.jpg, …
支持的图片格式有:PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF, SGI

为视频重新编码以适合在iPod/iPhone上播放

ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4

说明:

  • 源视频:source_video.avi
  • 音频编码:aac
  • 音频位率:128kb/s
  • 视频编码:mpeg4
  • 视频位率:1200kb/s
  • 视频尺寸:320 X 180
  • 生成的视频:final_video.mp4

为视频重新编码以适合在PSP上播放

ffmpeg -i source_video.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4

说明:

  • 源视频:source_video.avi
  • 音频编码:aac
  • 音频位率:32kb/s
  • 视频编码:xvid
  • 视频位率:1200kb/s
  • 视频尺寸:320 X 180
  • 生成的视频:final_video.mp4

从视频抽出声音,并存为Mp3

ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3

说明:

  • 源视频:source_video.avi
  • 音频位率:192kb/s
  • 输出格式:mp3
  • 生成的声音:sound.mp3

将wav文件转成Mp3

ffmpeg -i son_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3

将.avi视频转成.mpg

ffmpeg -i video_origine.avi video_finale.mpg

将.mpg转成.avi

ffmpeg -i video_origine.mpg video_finale.avi

将.avi转成gif动画(未压缩)

ffmpeg -i video_origine.avi gif_anime.gif

合成视频和音频

ffmpeg -i son.wav -i video_origine.avi video_finale.mpg

将.avi转成.flv

ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv

将.avi转成dv

ffmpeg -i video_origine.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv

或者:

ffmpeg -i video_origine.avi -target pal-dv video_finale.dv

将.avi压缩成divx

ffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi

将Ogg Theora压缩成Mpeg dvd

ffmpeg -i film_sortie_cinelerra.ogm -s 720x576 -vcodec mpeg2video -acodec mp3 film_terminate.mpg

将.avi压缩成SVCD mpeg2
NTSC格式:

ffmpeg -i video_origine.avi -target ntsc-svcd video_finale.mpg

PAL格式:

ffmpeg -i video_origine.avi -target pal-svcd video_finale.mpg

将.avi压缩成VCD mpeg2
NTSC格式:

ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg

PAL格式:

ffmpeg -i video_origine.avi -target pal-vcd video_finale.mpg

多通道编码

ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2

从flv提取mp3

ffmpeg -i source.flv -ab 128k dest.mp3

录制视频

ffmpeg -f x11grab -s 1024x811 -r 25 -i :0.0+412,71 -sameq /tmp/out.mpg
  • -s widthxheight 视频尺寸
  • -i :position+x,y position+x position+y 为视频左上角的位置

录制视频的命令 ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg
很多用户都需要的工具就是录制视频,这条命令就很不错
ffmpeg -f x11grab -s wxga -r 25 -i :0.0+1366,0 -qscale 0 /tmp/out.mpg
这个可以设置x,y轴偏移

ffmpeg -y -i "1.avi" -title "Test" -vcodec xvid -s 368x208 -r 29.97 -b 1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol 200 -f psp -muxvb 768 "1.***"

解释:以上命令可以在Dos命令行中输入,也可以创建到批处理文件中运行。不过,前提是:要在ffmpeg所在的目录中执行(转换君所在目录下面的
cores子目录)。
参数:

参数 含义
-y 覆盖输出文件,即如果1.***文件已经存在的话,不经提示就覆盖掉了
-i “1.avi” 输入文件是和ffmpeg在同一目录下的1.avi文件,可以自己加路径,改名字
-title “Test” 在PSP中显示的影片的标题
-vcodec xvid 使用XVID编码压缩视频,不能改的
-s 368x208 输出的分辨率为368x208,注意片源一定要是16:9的不然会变形
-r 29.97 帧数,一般就用这个吧
-b 1500 视频数据流量,用-b xxxx的指令则使用固定码率,数字随便改,1500以上没效果;还可以用动态码率如:-qscale 4和-qscale 6,4的质量比6高
-acodec aac 音频编码用AAC
-ac 2 声道数1或2
-ar 24000 声音的采样频率,好像PSP只能支持24000Hz
-ab 128 音频数据流量,一般选择32、64、96、128
-vol 200 200%的音量,自己改
-f psp 输出psp专用格式
-muxvb 768 好像是给PSP机器识别的码率,一般选择384、512和768,我改成1500,PSP就说文件损坏了
“1.***” 输出文件名,也可以加路径改文件名