把VFR视频转为CFR的高效率方法(用ffmpeg)
1、到https://ffmpeg.zeranoe.com/builds/下载需要的ffmpeg版本
下载static或者shared版本都是可以的,dev是给开发者用的,在这里我们忽略它。

2、打开下载好的文件,进入bin文件夹
把里面的ffmpeg.exe解压到X:/Windows(X指的是系统盘),然后就相当于“安装”好了。当然,如果你会的话,也可以设置环境变量,在这里就不细说这个了。


3、打开CMD
输入ffmpeg并回车
如显示下列第三张图的信息就说明ffmpeg已成功被“安装”



1、在官方文档(可以在上面文件中的doc文件夹查看)中,我们可以看到这段介绍,可以看出cfr是符合我们需求的,如果视频中多帧或者少帧了,它会自动对这些帧进行丢弃或者复制的操作,进而达成固定帧率的目标。

2、那到底怎么把VFR转成CFR?让我们先看一个例子:
假设原视频文件在C盘,名称为input.mp4
于是我们就可以再在步骤一中的CMD中打上
ffmpeg -i "C:/input.mp4" -vsync cfr -c:v libx264 -crf 20 -c:a copy -f matroska "C:/output.mkv"
按回车键运行,
然后你就会发现在C盘多了一个叫output.mkv的文件,这个就是VFR转为CFR后的视频,
对,这样就完了,是不是很高效率?连什么timecode都不用管....真够方便的
至于上面各命令的意思,应该是显而易见的,在这里就不再赘述,不过还是稍微提一下,上面的-crf 20中的数值越低,出来的画质就会越好。


1、不过还是建议再加上一些东西,如果你用的是用上面命令转出的CFR,会发现怎么视频帧率有点奇怪?明明是30帧的给我个30.11帧什么的,虽然说这样的CFR视频好像也够用了,但对于我这个强迫症来说,30.11帧是不可接受的(被B站二压过的视频全是这个样子),于是我会加上句-x264opts force-cfr=1来解决这个问题
ffmpeg -i "C:/input.mp4" -vsync cfr -c:v libx264 -x264opts force-cfr=1 -crf 20 -c:a copy -f matroska "C:/output.mkv"
这样帧率就完美了
2、有时候一些视频会因为音频有问题而导致压制后音画不同步,经我研究过很久发现,ffmpeg中aresample滤镜能解决这个问题:
现在我们的命令变成了这样:ffmpeg -i "C:/input.mp4" -vsync cfr -c:v libx264 -x264opts force-cfr=1 -crf 20 -c:a aac -b:a 320k -af aresample=async=1000 -f matroska "C:/output.mkv"
至于-c:a aac -b:a 320k是什么意思,-af又是什么意思,网上资源应该很多,我就不说了,反正无脑用就行了。
至此,这个CFR视频已“趋于完美”。