我在批处理文件中有这个 FFmepg 脚本:
for %%a in ("*.mp4*") do ffmpeg -i "%%a" -y -c:v prores_ks -profile:v proxy -pix_fmt yuv422p10le -vendor ap10 -bits_per_mb 8000 -vf "scale=1920:1080" -c:a pcm_s16le -ar 48K "..\%%~na.mov"
它将把.mp4
所在文件夹中的所有文件渲染.mov
到上一个文件夹中。
问题是我想优化这个过程并更多地利用硬件,同时渲染 4 个视频,但我没有找到编写脚本的方法,以便分析.mp4
文件夹中有多少个文件并将这些文件分成 4 个 ffmpeg 实例。
知道怎样做吗?
答案1
为了优化流程并通过一次渲染多个文件来充分利用硬件,您可以使用 Windows 中的 start 命令同时运行 ffmpeg 命令的多个实例。以下是您可以如何修改脚本来执行此操作的示例:
@echo off
setlocal enabledelayedexpansion
set counter=0
set max_instances=4
for %%a in ("*.mp4*") do (
set /a counter+=1
set /a counter_mod=!counter! %% !max_instances!
if !counter_mod! equ 0 (
start "" "ffmpeg" -i "%%a" -y -c:v prores_ks -profile:v proxy -pix_fmt yuv422p10le -vendor ap10 -bits_per_mb 8000 -vf "scale=1920:1080" -c:a pcm_s16le -ar 48K "..\%%~na.mov"
) else (
ffmpeg -i "%%a" -y -c:v prores_ks -profile:v proxy -pix_fmt yuv422p10le -vendor ap10 -bits_per_mb 8000 -vf "scale=1920:1080" -c:a pcm_s16le -ar 48K "..\%%~na.mov"
)
)
此脚本将同时启动最多 4 个 ffmpeg 实例,每个实例处理一个文件。当一个实例处理完一个文件后,它将开始处理下一个文件,直到处理完所有文件。
cmd /v:on /c "your_script.bat"