FFmpeg

 FFmpeg的名称来自MPEG视频编码标准,前面的“FF”表明“Fast Forward”,FFmpeg是一套能够用来音视频采集、音视频格式转换,编码解码,视频截图,加水印等的开源计算机程序。能够轻易地实现多种视频格式之间的相互转换。json

FFmpeg一共包含四个主要程序:服务器

  • ffmpeg:是一个命令行工具,用来对视音频文件转换格式,也支持对电视卡实时编码;
 ffmpeg -i input.flv -c:v libx264 -c:a libfaac -b:v 800k -b:a 100k -r 25 -ar 48000 -s 1280x720 -f flv out.flv
  • ffsever:是一个HTTP多媒体实时广播流服务器,支持时光平移
  • ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,经过SDL显示;
  • ffprobe:探测分析视音频文件
ffprobe -i input -print_format json -show_format -show_streams -show_frames

这里咱们主要说一说ffmpegide

ffmpeg的使用方式: 工具

ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

经常使用参数说明:
主要参数: 测试

  -i 设定输入流 编码

  -f 设定输出格式,指定输出格式为flv,这里的flv能够替换为mp4,ts,hls等,后面接着输出文件名spa

  -ss 指定截取的开始时间命令行

       -t 指定截取的结束时间,能够用两种方式指定时间,一种是用时分秒指定、中间用冒号分离HH:MM:SS,另外一种是直接用秒数指定code

       -y 即若是文件存在,直接覆盖写orm

       -n 永远不会覆盖输出文件

视频参数:

 

  -b:v 指定视频码率,默认为200Kbit/s  码率:是一个肯定总体视频/音频质量的参数,秒为单位处理的字节数  。 

  -r 设定帧速率,默认为25      帧率:帧率也叫帧频率,帧率是视频文件中每一秒的帧数,肉眼想看到连续移动图像至少须要15帧。  帧:表明一幅静止的图像

  -s  改变视频的分辨率 ,设定画面的宽与高   

  -aspect 设定画面的比例

  -vn 不处理视频

  -vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器

       -c:v 指定视频编码格式

       -c:v copy 指定音频不转码 

       -vframes number设置要输出的视频帧数

       -vf  filter_graph 设置视频过滤器

音频参数:

  -ar 设定采样率

  -ac 设定声音的Channel数

  -acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器

  -an 不处理音频

       -b:a 指定音频码率 

       -c:a 指定音频编码格式      

       -c:a copy 指定音频不转码     

       -frames number设置要输出的音频帧数

       -af filter_graph 设置音频过滤器

视频格式转换

(其实格式转换说法不太准确,但你们都这么叫,准确的说,应该是视频容器转换) 好比一个avi文件,想转为mp4,或者一个mp4想转为ts。 ffmpeg -i input.avi output.mp4

ffmpeg -i input.mp4 output.ts 

视频剪切

常常要测试视频,可是只须要测几秒钟,但是视频却有几个G,咋办?切啊!
下面的命令,就能够从时间为00:00:15开始,截取5秒钟的视频。

ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4 

-ss表示开始切割的时间,-t表示要切多少。上面就是从开始,切5秒钟出来。

码率控制

码率控制对于在线视频比较重要。由于在线视频须要考虑其能提供的带宽。

那么,什么是码率?很简单:
bitrate = file size / duration
好比一个文件20.8M,时长1分钟,那么,码率就是:
biterate = 20.8M bit/60s = 20.8*1024*1024*8 bit/60s= 2831Kbps
通常音频的码率只有固定几种,好比是128Kbps,
那么,video的就是
video biterate = 2831Kbps -128Kbps = 2703Kbps。

说完背景了。好了,来讲ffmpeg如何控制码率。
ffmpg控制码率有3种选择,-minrate -b:v -maxrate
-b:v主要是控制平均码率。
好比一个视频源的码率过高了,有10Mbps,文件太大,想把文件弄小一点,可是又不破坏分辨率。
ffmpeg -i input.mp4 -b:v 2000k output.mp4
上面把码率从原码率转成2Mbps码率,这样其实也间接让文件变小了。目测接近一半。
不过,ffmpeg官方wiki比较建议,设置b:v时,同时加上 -bufsize
-bufsize 用于设置码率控制缓冲器的大小,设置的好处是,让总体的码率更趋近于但愿的值,减小波动。(简单来讲,好比1 2的平均值是1.5, 1.49 1.51 也是1.5, 固然是第二种比较好)
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4

-minrate -maxrate就简单了,在线视频有时候,但愿码率波动,不要超过一个阈值,能够设置maxrate。
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

只提取视频ES数据

ffmpeg –i input.mp4 –vcodec copy –an –f m4v output.h264

将输入的1920x1080缩小到960x540输出

ffmpeg -i input.mp4 -vf scale=960:540 output.mp4 

//ps: 若是540不写,写成-1,即scale=960:-1, 那也是能够的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。

相关文章
相关标签/搜索