【问题标题】:How to convert all files in a specific directory using batch script如何使用批处理脚本转换特定目录中的所有文件
【发布时间】:2017-03-30 22:10:10
【问题描述】:

我有一个 .h264 格式的文件夹中的视频,我想将它们转换为 mp4。现在默认情况下我可以使用 ffmpeg 来做到这一点: 这是命令:

ffmpeg -i youtube.flv -c:v libx264 filename.mp4

但是,正在添加新的 h264 文件,我想继续转换视频以便将其用于我的 python 脚本。

我知道我可以用它来初始化变量

SET /A num=1

但是,即使添加了新视频,我如何编写一个批处理脚本来一个一个地从目录中获取所有视频?

我写了这个,但这不起作用:

@echo off
SET /A num=1

for file in E:\Records\1\*.h264
do
    ffmpeg -i "$file" -c:v libx264 E:\Recods\1\converted\%num%.mp4
    move E:\Records\1\"$file" E:\Records\1\done\
    set /A num=%num%+1
done
PAUSE

我正在制作一个完成的文件夹并将已转换的视频移动到那里,并在转换后的文件夹中放置转换后的视频。现在我只需每小时运行一个任务计划程序,这样如果有新条目,它应该转换它并将其移动到适当的文件夹。

【问题讨论】:

  • 是否可以选择使用任务调度程序来运行脚本?
  • 对不起,我不知道任务调度程序是做什么的。我是批处理脚本的初学者..
  • 任务调度器可用于在某些触发器下运行脚本或其他任务。这包括例如每小时、每天或每周。因此,您可以在特定时间间隔内每次执行一个脚本来刷新您的文件列表。除此之外,我认为还有一些关于文件夹主题收听的问题。
  • 是的,我做了一些研究.. 我认为任务调度程序在这里会很好.. 我可以将已经转换的数据移动到同一目录中的不同文件夹并每 1 小时运行一次任务调度程序,所以如果是新的文件存在那里然后它会被转换..
  • 接下来尝试阅读您尝试使用的命令的帮助。您用于FOR 命令的语法甚至与帮助文件显示的语法不符。打开 cmd 提示符并输入:for /?

标签: batch-file video ffmpeg


【解决方案1】:

您可以像这样使用 for 循环批量遍历文件夹中的所有文件(即使应用了过滤器):

@echo off
setlocal EnableDelayedExpansion
set /a vid=0
cd /d "your_Folder\Goes here"
for %%f in (*.h264) do (
  ffmpeg -i "%%~f" -c:v libx264 "!vid!.mp4"
  set /a vid=!vid!+1
)

那么这里发生了什么?
第一行用于让程序在正确的目录中运行。
之后,使用您的命令处理该目录中所有以 .h264 结尾的文件(在您的情况下可能是不同的结尾;只是从问题中取出)。为此,将文件路径放置在输入文件的位置,并将计数器与.mp4 一起放置为输出文件。
计数器有点棘手,因为括号集是如何批量评估的,它是一个完整的块。作为解决方案,有很多关于 SO 的问题和答案。查找“延迟扩展批次”,您会发现类似 this answer 的内容。

将其放置为定期运行的任务-调度程序-任务应该可以使您的文件夹保持更新。为了实际监视我发现的文件夹this impressive code,它可以与任务调度程序结合使用以在启动时运行它。如果监控触发,您可以执行上面的批处理文件,每次添加文件时都应该运行它。您也可以使用文件过滤器调整 powershell 文件以使其适合您的需求。

【讨论】:

  • 虽然正斜杠确实适用于某些命令,但它们不适用于 80% 的其他 Windows 控制台命令。我建议您始终在文件路径中使用反斜杠。
  • 它可以工作,但我想将转换后的文件命名为:1.mp4、2.mp4 等,以便我更容易在 python 脚本中处理。现在如何增加一个计数器for循环..上面要增加的代码没有增加..谢谢
  • 哦,我不知道这是对它们进行编号的要求。我为此编辑了我的答案:)
  • 很高兴我能帮上忙 :)
猜你喜欢
  • 2012-03-12
  • 2011-01-24
  • 2021-12-07
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 2023-01-20
相关资源
最近更新 更多