如何使用批处理脚本转换特定目录中的所有文件

时间:2017-03-30 10:39:23

标签: batch-file video ffmpeg

我在.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 个答案:

答案 0 :(得分: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之类的东西。

将此作为Task-Scheduler-Task定期运行应保持文件夹更新。为了实际监控文件夹,我发现this impressive code可以与Task-Scheduler结合使用,以便在启动时运行它。如果监视触发,您可以执行上面的批处理文件,并且每次添加文件时都应该运行它。您可以使用文件过滤器调整powershell文件,以使其符合您的需求。