0. 前言

最近在MAC上使用QuickTime Player录了几个苹果手机应用的运行视频,苹果官方的解决方案算是最轻量级也最容易使用的了。到这里都还算靠谱,但接下来就有点麻烦了,录制下来的视频是MOV格式,这玩意儿实在是大的可怕,即便是自己存起来看也实在是太占空间了,更不用说上传视频网站了。于是就有了视频文件转码的需求,这里就想起了FFMPEG这个软件,众所周知的视频处理第一。撰此文仅用来记录一些经验。

1. 经验文章

这部分实在是有太多的经验文章,我这里主要参考了:

2. 安装

MAC下安装:

brew install ffmpeg –with-faac –with-fdk-aac –with-ffplay –with-fontconfig –with-freetype –with-libass –with-libbluray –with-libcaca –with-libsoxr –with-libquvi –with-frei0r –with-libvidstab –with-libvorbis –with-libvpx –with-opencore-amr –with-openjpeg –with-openssl –with-opus –with-rtmpdump –with-schroedinger –with-speex –with-theroa –with-tools –with-x265

3. 概念

只提几个最关键的,更详细的可以看上面的文章。

  • 比特率:比特率,英文为 bit rate,描述每秒钟输出多少 KB 的参数,单位是 Kbps,也就是 kbit/s,8Kbit/s = 1KB/s。也就是说800Kbps意思就是每秒视频就要占用100KB磁盘空间。核心质量概念,一般这个数值越高质量越好,而且是立竿见影的质量变化,压缩主要调整的参数也是这个。
  • 帧数:每秒钟播放的图片数,单位 fps(英文:Frames Per Second),每秒的帧数或者帧率表示视频文件或者图形处理器场景时每秒钟能够更新的次数。一般30即可,不用追求过高。
  • 分辨率:1080P:1920 * 1080,720P:1280 * 720,反正就这二选一。
  • 采样率:每秒钟对音频信号的采样次数,采样频率越高声音还原度越高,声音更加自然。单位是赫兹 Hz。音频文件一般使用的采样率是 44100 Hz ,也就是一秒钟采样 44100 次。

4. 使用

一个命令简单使用:

ffmpeg -i $1 -vcodec libx264 -b:v 5000k -minrate 5000k -maxrate 5000k -bufsize 4200k -preset fast -crf 20 -y -vf “scale=-1:720” -acodec libmp3lame -ab 128k ~/Downloads/a1.mp4

简单解释下:

  • -i:输入文件指定
  • -vcodec:视频解码,x264,基本上没别的选择
  • -b:v:指定导出视频的码率,不会100%和指定的数值一样,但肯定会尽量靠近。这个指标是视频质量/体积的核心指标,一般质量不符合预期就调高,文件过大就调低。e.g 5000k
  • -maxrate:最高码率,和-b:v一致就好了
  • -minrate:最低码率,和-b:v一致就好了
  • -bufsize:缓冲区大小,看情况设定,不关键
  • -preset:指定编码的配置。x264编码算法有很多可供配置的参数,不同的参数值会导致编码的速度大相径庭,甚至可能影响质量。为了免去用户了解算法,然后手工配置参数的麻烦。x264提供了一些预设值,而这些预设值可以通过preset指定。fast即可。
  • -crf:这是最重要的一个选项,用于指定输出视频的质量,取值范围是0-51,默认值为23,数字越小输出视频的质量越高。这个选项会直接影响到输出视频的码率。一般20减一点点就很好了。
  • -y:强制覆盖输出文件,即便该文件已存在
  • -vf:scale=-1:720,意思就是把原视频的横向限死到720P,然后纵向自适应
  • -acodec:libmp3lame,音频解码使用MP3
  • -ab:音频码率:128 kb/s

基本上上面的命令就够用了,我自己选的码率是5000k,视频文件体积是有点大,但质量还是上乘的,自己收藏用算是可以了。

一些简单的历史数据:

6分钟左右的视频quicktime从ios录屏下来是1.3g
720p视频5000k码率压缩是240m
60fps和30fps体积没差别
2400k码率体积是90m,质量比较差
2900k码率基本能看
3300k码率可以蒙混一下了

视频的合并使用以下方法:

创建一个文本文件,内容如下:

# this is a comment
file ‘/path/to/file1’
file ‘/path/to/file2’
file ‘/path/to/file3’

然后使用命令进行合并:

ffmpeg -f concat -i ~/Downloads/mylist.txt -c copy ~/Downloads/noname.mov

EOF