IceSandwich

PR使用FFmpeg作为编码器

Premiere也能使用FFmpeg?

字数统计: 1.1k阅读时长: 4 min
2021/02/15 Share

前言

一直以来都不喜欢Adobe的Media Encoder,渲染的文件贼大,字幕又不好加。最近在开发blender的插件,看能不能将blender改成像pr那样的剪辑方式。无论如何,如果PR能使用FFmpeg作为编码器就好了。这不,还真给我找到了方法。首先,当然有前人的成功才有我的可能。搜索这方面的文章,很快就能看到官方的一篇文章,介绍给PR使用FFmpeg的。其中,我们使用的是FrameServer的方法。

问题是嘛,这个文章是6年前发布的,老到掉牙!很多软件还是32位,而且已经不更新了。这些软件不是不能用,只是,64位系统用32位的软件,性能有点缩水。。。于是又经过了一番搜寻,我终于找到能用的方法了。

准备

本文使用的软件:

配置avs文件

新建一个文件夹,存放渲染的文件。创建一个文件,比如说test.avs敲入以下代码:

1
2
AviSource("test.avi")
ConvertToYV24(matrix="rec709")

看到上面的test.avi了吗?记住,后面要考的。

渲染视频

打开PR,选择文件->导出->媒体,导出格式选择Advanced FrameServer,导出名称为上面的test.avi,**一定要路径和名称一样!!**然后在视频栏,选择RGB24,在音频栏,切记勾上输出PCM,不然FFmpeg无法识别音频的编码导致假死。在FrameServer栏,可以勾选"Stop serving when idle",主要设置超时退出。其他留默认,就可以点击导出啦。

出现下图说明就成功启动frameserver了,此时进度条表示正在尝试连接Avisynth。

此时程序正在等待连接。那么,赶紧启动FFmpeg,通过AviSynth连接它吧。

1
ffmpeg -i test.avs -c:v libx264 -preset medium -crf 23 -pix_fmt yuv420p -c:a aac -vbr 4 output.mp4

上述命令中,test.avs是我们刚刚创建的文件,其他就是一些压制参数,没什么好讲的。output.mp4就是我们压制好的片子存放的地方,可以自行更改。

下面是从网上找的压制命令,其中我发现我的ffmpeg不支持libfdk_aac,我改成aac就行了。不管怎么样,下面的要测试过才能用哦。

For YouTube

Gameplay for YouTube (Standard Quality for upload 420)
ffmpeg -i -c:v libx264 -preset medium -crf 16 -maxrate 18000k -bufsize 18000k -profile:v high -pix_fmt yuv420p -x264opts colorprim=bt709:transfer=bt709:colormatrix=bt709:keyint=30:min-keyint=15 -c:a libfdk_aac -b:a 576k -cutoff 18000 C:/youtoutputfile.mp4

Tutorial or Featured Video for YouTube (High Quality 444)
ffmpeg -i -c:v libx264 -preset slow -crf 14 -maxrate 30000k -bufsize 30000k -profile:v high444 -pix_fmt yuv444p -x264opts colorprim=bt709:transfer=bt709:colormatrix=bt709:keyint=30:min-keyint=15 -c:a libfdk_aac -b:a 576k -cutoff 18000 C:/youtoutputfile.mp4

30fps (same as above, but hard set to 30 FPS)
ffmpeg -i -c:v libx264 -preset slow -crf 14 -maxrate 30000k -bufsize 30000k -profile:v high444 -pix_fmt yuv444p -x264opts colorprim=bt709:transfer=bt709:colormatrix=bt709:keyint=30:min-keyint=15 -r 30 -c:a libfdk_aac -b:a 576k -cutoff 18000 C:/youtoutputfile.mp4

Screencap for Web (low movement, small file, good for web site or self hosted website)
ffmpeg -i -c:v libx264 -preset slow -crf 20 -maxrate 8000k -bufsize 8000k -profile:v high -pix_fmt yuv420p -x264opts colorprim=bt709:transfer=bt709:colormatrix=bt709:keyint=240:min-keyint=20 -c:a libfdk_aac -b:a 192k -cutoff 18000 -movflags +faststart C:/youtoutputfile.mp4

High Quality Intros for Psynaps and Clients (The best for my clients)
ffmpeg -i -c:v libx264 -pix_fmt yuv420p -preset slow -crf 12 -profile:v high -x264opts colorprim=bt709:transfer=bt709:colormatrix=bt709:keyint=30:min-keyint=15 -c:a libfdk_aac -b:a 576k -cutoff 18000 C:/youtoutputfile.mp4

更简单的:

ffmpeg -i encode/frameserver.avs -c:v libx264 -preset medium -crf 23 -pix_fmt yuv420p -c:a libfdk_aac -vbr 4 output.mp4

输出的文件:

FFmpeg输出6.73MB,Pr输出H.264估计大小16MB,小多了。

骚操作

刚刚说道,pr不擅长处理字幕,那么,可以用其他软件加上字幕(比如Aegisub),然后用ass文件为视频加上字幕。但是呢,这样会二次压制片子导致清晰度下降,那么,既然用了FFmpeg,我们又知道FFmpeg可以为我们加上字幕,于是有人想[1],渲染视频的时候顺便让FFmpeg给加上字幕呗。

1
ffmpeg -i test.avs -vf subtitles=subtitle.srt output.mp4

另外,如果显卡支持[2],在ffmpeg启用显卡加速[3],可以加快编码过程。

Refences


  1. https://zhuanlan.zhihu.com/p/91852363 在premiere中调用ffmpeg进行压制的经验

  2. https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new Video Encode and Decode GPU Support Matrix

  3. https://trac.ffmpeg.org/wiki/HWAccelIntro HWAccelIntro

CATALOG
  1. 1. 前言
  2. 2. 准备
  3. 3. 配置avs文件
  4. 4. 渲染视频
  5. 5. 骚操作
  6. 6. Refences