我使用 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