分类
技术

在Mac上用FFMpeg做youtube上传视频的预处理

大家知道我有好几个 Youtube 频道,目前主频道是Tinyfool的胡说八道。

我现在有几种视频拍摄方式,其中一种主要的是用 Mac 的 QuickTime player 来录制,录制高品质的版本生成的 .mov 文件,文件非常大。

我最近录制的一个视频有48分钟,1080p的,文件尺寸足有51G。直接上传到 Youtube 也可以,但是实际上 Youtube 也会把你上传的视频进行压缩,所以,事先先压缩可以节约大量的翻墙流量。

于是我研究了一下 FFMpeg 的命令,用下面的命令来做压缩:

ffmpeg -i input.mov -vcodec h264 -acodec mp2 -vf scale=-1:1080 output.mp4
  • -vcodec h264 是因为 Youtube 内置的视频格式是 .h264
  • -acodec mp2 是因为 Youtube 内置的音频格式是 mp2
  • 原视频是 1080p 的,用 -vf scale=-1:1080 是为了保护分辨率不被篡改。这些参数的结果是上传到 FFMpeg 以后不会有更近一步的压缩,节省了上传后的处理时间。

用了一些日子,效果非常不错。

但是这个转换速度很慢,耗时很长,我今天又研究了一下。在压缩的时候,CPU 可以跑满,这说明这完全是一个软压缩。于是我寻找了一下, FFMpeg 如何在Mac下加速,原来加入 -c:v h264_videotoolbox 就可以了。于是命令变为:

ffmpeg -i input.mov -vcodec h264 -acodec mp2 -vf scale=-1:1080 -c:v h264_videotoolbox output.mp4

在我的 Mac M1Max 笔记本上用新命令之前压缩 48 分钟的 51 G Mov文件需要 22分15秒,用了新命令,只需要12分钟1秒,省了大概一半的时间。

但是我发现用新命令的结果非常模糊,用 FFMpeg 检查文件发现,原来的 bitrate 是 2868 kb/s,新命令的结果 bitrate 是 716 kb/s。默认的压缩率太高了,所以看起来很模糊,于是我加入了一个新的参数,-b:v 2800k 限制 bitrate,然后压缩的结果就看起来没有任何问题了。而压缩速度几乎没变。所以,最后的命令如下:

ffmpeg -i input.mov -vcodec h264 -acodec mp2 -vf scale=-1:1080 -c:v h264_videotoolbox -b:v 2800k output.mp4