windows - 如何使用 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
解决方案
也值得考虑使用像 SCons 这样的构建系统。
我在这里编写了类似的代码,以便从命令行一次对目录中的视频文件进行转码:
https://github.com/nuket/Shrinkr#shrinkr-batch-transcode-scons-edition
构建系统的好处是它跟踪哪些源文件已更改,因此您可以中断并重新运行批处理转码,它不会重复已经完成的工作。
推荐阅读
- http - chai-http 并不总是看到 ETag 标头,可能是由于 CORS?
- excel - Copy from textbox to cell and maintain all formatting with vba
- javascript - Jquery中的预加载器
- python - Python 的 json 负载仍然占用大量内存?
- java - 为什么我的代码在 for 循环之后没有执行?
- firebase - 注销时取消订阅 Firestore 侦听器
- javascript - Angular:无法读取未定义的属性“id”
- r - R包分析促销自相残杀?
- azure-devops - 使用所有历史记录、标签和拉取请求将 Azure DevOps Git 存储库从一个组织迁移到另一个组织
- c++ - 非阻塞 Poco HTTP 服务器?