递归ffmpeg脚本,保留子文件夹结构

时间:2020-06-29 00:26:59

标签: python batch-file recursion ffmpeg video-conversion

我有+300个旧格式(.VOB)的视频,我想将其转换为mp4。幸运的是,在整理了一些文档之后,我设法转换了其中的几个,但是我需要使其自动运行。不知道怎么办,甚至我都应该使用哪种语言(python,批处理...)

问题是我想保留子文件夹结构。例如,如果视频1位于文件夹B内,而文件夹B也位于文件夹A内,则输出必须位于名为“ output”的文件夹中,而转换后的视频内部必须位于文件夹B和文件夹A中

ffmpeg命令,如有必要:

ffmpeg -i input.vob -vf yadif=1 -c:v h264_nvenc output.mp4

预先感谢

1 个答案:

答案 0 :(得分:0)

任务可以通过以下方式完成:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "BaseSourceFolder=C:\Temp\Source"
set "BaseTargetFolder=C:\Temp\Target"
for /R "%BaseSourceFolder%" %%I in (*.vob) do (
    set "FullSourceFileName=%%I"
    set "TargetFolder=%%~dpI"
    set "TargetFileName=%%~nI"
    setlocal EnableDelayedExpansion
    set "TargetFolder=!TargetFolder:%BaseSourceFolder%=%BaseTargetFolder%!"
    if not exist "!TargetFolder!" md "!TargetFolder!"
    if exist "!TargetFolder!" "ffmpeg.exe" -i "!FullSourceFileName!" -vf yadif=1 -c:v h264_nvenc "!TargetFolder!!TargetFileName!.mp4"
    endlocal
)
endlocal

BaseSourceFolderBaseTargetFolder的文件夹路径必须在第三和第四行中定义。

BaseSourceFolder不能包含字符=,否则代码将无法正常工作。

这两个路径可以相同,尽管在这种情况下,仅使用一个命令行使用批处理文件会更有效。

应在具有完整路径的批处理文件中指定可执行文件ffmpeg.exe,以提高效率,因为在这种情况下,Windows命令处理器cmd.exe不需要在每个VOB文件中搜索当前的可执行文件。目录,如果没有在环境变量PATH中列出的目录中找到另一个目录,则找不到该目录。

要了解所使用的命令及其工作方式,请打开command prompt窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。

  • echo /?
  • endlocal /?
  • for /?
  • if /?
  • md /?
  • set /?
  • setlocal /?

有关命令 SETLOCAL ENDLOCAL 的更多详细信息,另请参见this answer