首页 > 解决方案 > 如何使用 Batch For Loop 执行 ffmpeg

问题描述

FOR %%A IN (%*) DO ffmpeg -y -i %%A -c:v prores_ks -profile:v 3 -c:a pcm_s16le "%%~dpA%%~nA.mov"

该批处理文件旨在获取多个拖放到其上的文件,并使用 ffmpeg 对其进行转码。该命令导致一大堆与该命令相似的打印输出,但它不执行。我也尝试过使用 start cmd.exe /c,但这会导致打开许多窗口,需要重新启动计算机。

编辑:壁球手已经明确表示,这个解决方案无论如何都行不通(谢谢!)。但是,我已经编辑了脚本以一次仅对单个文件执行操作,但它仍然无法按预期执行并导致循环打印输出。

ffmpeg -y -i %%1 -c:v prores_ks -profile:v 3 -c:a pcm_s16le "%%~dp1%%~n1.mov"

如何修改此脚本以正确执行 ffmpeg?

编辑2:通过将文件夹拖放到批处理脚本上来解决。

cd /d %1
md output
FOR /F %%A IN ('dir /B %1') do ffmpeg -y -i %%A -c:v prores_ks -profile:v 3 -c:a pcm_s16le "output/%%~nA.mov"
pause

标签: windowsfor-loopbatch-fileffmpegscripting

解决方案


也值得考虑使用像 SCons 这样的构建系统。

我在这里编写了类似的代码,以便从命令行一次对目录中的视频文件进行转码:

https://github.com/nuket/Shrinkr#shrinkr-batch-transcode-scons-edition

构建系统的好处是它跟踪哪些源文件已更改,因此您可以中断并重新运行批处理转码,它不会重复已经完成的工作。


推荐阅读