是否可以使用批处理脚本编写 FFmpeg 以并行编码多个文件?

是否可以使用批处理脚本编写 FFmpeg 以并行编码多个文件?

我使用 shell:sendto 文件夹中的批处理脚本来进行视频压缩,该脚本当前如下所示:

for %%a in (%*) do (
    ffmpeg -i %%a -c:v libx265 -c:a copy "%%~na_x265.mp4"
)
pause

但是,我注意到 FFmpeg 无法充分利用我机器上的所有核心。与运行单个视频压缩相比,我可以并行运行大约 3-4 个视频压缩,同时保持相同的 FPS

假设我想转换 100 个视频,我该如何修改此脚本以在前三个视频上并行运行三个 FFmpeg 实例,并在每次完成时启动一个新实例?

答案1

您可以尝试start执行后台进程/b),但是这种多重性会导致处理 / 性能的损失。

开始 /?如果更多选项更适合您。

@echo off & title <nul

setlocal && cd /d "%~dp0"
for %%a in (%*)do call :^) "%%~dpnxa" "%%~dpna_x265.mp4"
    
endlocal && "%__AppDir__%timeout.exe" /t -1 & goto %:EOF

%:^)
for /f %%G in ('%__AppDir__%tasklist.exe ^|find/i /c "ffmpeg.exe"
')do if not %%G leq 4 2>&1 "%__AppDir__%timeout.exe" 10 & goto %:^)

start "%~nx1" /b /min ffmpeg.exe -i "%~1" -c:v libx265 -c:a copy "%~2" 
<con: title <nul & title Encoding: "%~nx1" ^| Target: "%~nx2" & exit /b  

相关内容