FFmpeg_logo.png
FFmpeg的介绍网上还是很多的。官网的wiki上面也有很多内容。围绕目标,主要是有两套实现的思路。早期,其实是想通过自己编写C代码,来完成整个流程的。但是无奈目前的水平有限,而且时间不够充裕。故最后的思路是通过学习现有的命令行参数,来快速完成FFmpeg的使用。但是这样的弊端也极大的,在此暂时不诉。
ffmepg [global options] [input file options] -i input_file [output file options] output_file
[ ]中的内容是可选的参数,其他则是必填的参数。
一图比千言—CommanLine.png
转码流程.png
看了这个图,可能会问 什么是 packets ,什么是frames ,在这里暂且不表
[input_link_label1]...
filter_name=parameters
[output_link_label1]...
#####Filterchain
"filter1,filter2,...."
#####Filtergraph
"filterchain1;filterchain2;..."
#####使用filtergraph能够有效的简化命令行。将两行变成一行
#使用前
ffmpeg -i input.mpg -vf hqdn3d,pad=2*iw outpt.mp4
ffmpeg -i output.mp4 -i input.mpg -filter_complex overlay=w compare.mp4
#使用后
ffplay -i i.mpg -vf split[a][b];[a]pad=2*iw[A];[b]hqdn3d[B];[A][B]overlay=w
# 将输入的i.mpg 分成[a]和[b] ;将[a]左右一个filterchains的输入,输出为[A];将[b]作为输入,输出为[B],最后再将[A][B] 通过overLay filter产生一个对比。
加上Filter之后的总体流程
- 除此之外,还有其他的可以定义流的信息
#-b 可以设置音频和视频的bit rate
ffmpeg -i input.mpg -b:a 128k -b:v 1500k outpu.mp4
![map steam 示意图.png](http://upload-images.jianshu.io/upload_images/1877190-954ea618c5f03ccc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
4. **有用的命令。**
将输出输出到文件当中。
ffmpeg -help > help.txt
ffmpeg -filters >> data.txt #续写
5. **概念的介绍**
比特率、帧率和文件大小之间的关系
#####帧率。
每秒被编码到视频文件中的帧数。人眼至少需要15fps,才能举得是一个连续的滑动。它也进程被较为一个帧的频繁度 。它的单位是Hz.LCD显示器通常是60Hz的。
```shell
# 直接使用- r 能够制定帧率
ffmepg -i input -r fps output
#使用fpsfilter来指定帧率
ffmpeg -i clip.mpg -vf fps=fps=25 clip.webm
确定的是音频和视频总体的质量。它定义的是 每个时间单元携带的数据量。
Type | Abbreviation | |
---|---|---|
Average bit rate | ABR | 每秒平均的比特率。在VBR编码模式下也需要。通常用于确定的输出大小 |
Constant bit rate | CBR | 每秒处理的比特率是相同的。这并不实际。因为在运动的处理过程中,需要更多的比特率。CBR通常用于在混合多媒体流的时候使用。 |
Variable bit rate | VBR | 可变的比特率。简言之就是需要多的时候多,反之亦然。但是同样需要更多的cpu来处理这些判断 |
之前说过,通过-b就可以设定比特率。-b:v 就 可以设定视频
# 在视频通话中,因为传输的数据不能被缓存。所有需要设定
#一个固定的比特率来输出。通常需要设定三个参数。 -b -minrate -maxrate .设置maxrate的同时,还得设置一个 -bufsize来缓存。
ffmpeg -i in.avi -b 0.5M -minirate 0.5M -maxrate 0.5M -bufsize 1M out.mkv
#为了控制文件的大小,可以使用 -fs
ffmpeg -i -input.avi -fs 10MB output.mp4
未完待续。。。