前言
一直以来都不喜欢Adobe的Media Encoder,渲染的文件贼大,字幕又不好加。最近在开发blender的插件,看能不能将blender改成像pr那样的剪辑方式。无论如何,如果PR能使用FFmpeg作为编码器就好了。这不,还真给我找到了方法。首先,当然有前人的成功才有我的可能。搜索这方面的文章,很快就能看到官方的一篇文章,介绍给PR使用FFmpeg的。其中,我们使用的是FrameServer的方法。
问题是嘛,这个文章是6年前发布的,老到掉牙!很多软件还是32位,而且已经不更新了。这些软件不是不能用,只是,64位系统用32位的软件,性能有点缩水。。。于是又经过了一番搜寻,我终于找到能用的方法了。
准备
本文使用的软件:
-
Adobe Premiere Pro CC 2018 (64bit)
-
DebugMode FrameServer魔改版(64bit) - Advanced FrameServer
-
AviSynth增强版(64bit) - AviSynth+
-
FFmpeg git-2020-05-23(64bit) ffmpeg
配置avs文件
新建一个文件夹,存放渲染的文件。创建一个文件,比如说test.avs
敲入以下代码:
1 | AviSource("test.avi") |
看到上面的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
https://zhuanlan.zhihu.com/p/91852363 在premiere中调用ffmpeg进行压制的经验 ↩
https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new Video Encode and Decode GPU Support Matrix ↩
https://trac.ffmpeg.org/wiki/HWAccelIntro HWAccelIntro ↩