网上下载的很多视频都是24fps、25fps或者30fps,能感觉到画面不流畅。而50/60fps的视频就看起来很流畅。如何将低帧率的视频转码为高帧率的视频呢?下面分享一个批处理文件来实现这个功能。
@echo off
setlocal enabledelayedexpansion
REM 遍历当前目录及子目录下所有 .mp4 文件
for /R %%a in ("*.mp4") do (
echo ===========================================
echo 正在处理:%%a
REM 使用 ffprobe 提取帧率(结果为如 30000/1001)
for /f %%F in ('ffprobe -v error -select_streams v:0 -show_entries "stream=r_frame_rate" -of "csv=p=0" "%%a"') do (
set "fps_frac=%%F"
)
REM 用 PowerShell 计算浮点值和帧率翻倍结果
for /f %%F in ('powershell -command "[math]::Round(([double](!fps_frac!))*2, 3)"') do (
set "fps_double=%%F"
)
echo 源帧率: !fps_frac! → 插帧目标: !fps_double! fps
REM 构建输出文件路径
set "outfile=%%~dpna_2xFPS.mkv"
REM 开始转码(可用 start 开启并发处理)
start "" ffmpeg -i "%%a" -vf "minterpolate=fps=!fps_double!" ^
-c:v libaom-av1 -crf 32 -b:v 0 -cpu-used 4 -row-mt 1 -tile-columns 2 -tile-rows 1 -g 240 -lag-in-frames 35 ^
-pix_fmt yuv420p -threads 12 -aq-mode 1 ^
-aom-params enable-keyframe-filtering=0:enable-chroma-deltaq=1:arnr-strength=4:tune=ssim ^
-c:a libopus -b:a 64k "!outfile!"
)
pause
将以上代码另存为“xxx.bat”批处理文件,和需要转码的mp4文件放在一起,双击即可开始转码。
这个批处理文件的工作流程是:
1. 遍历目录下所有mp4文件
2. 使用ffprobe获取视频帧率
3. 调用powershell计算翻倍后的帧率
4. 使用libaom-av1编码器编码AV1视频,并通过“minterpolate”滤镜实现帧率翻倍
可以看到,转码命令的开头有一个start命令,这个命令的作用是在新窗口中进行转码,这样就可以实现多个视频同时转码。这样做的原因是,libaom-av1对多核处理器的使用并不充分,单任务在我的电脑上CPU使用率只有不到30%,所以需要使用多任务形式来提高速度。尽可能高的提高CPU使用率。