保留子文件夹结构的递归ffmpeg脚本
Recursive ffmpeg script preserving the subfolder structure
我有 +300 个旧格式 (.VOB) 的视频,我想将其转换为 mp4。幸运的是,在一些文档之后,我已经设法转换了其中的几个,但我需要让它自动进行。不知道如何,甚至我应该使用哪种语言 (python, batch...)
问题是我想保留子文件夹结构。例如,如果视频 1 在文件夹 B 中,而文件夹 B 也在文件夹 A 中,则输出必须在名为“output”的文件夹中,并且转换后的视频必须在文件夹 B 和文件夹 A 中
ffmpeg 命令,如有必要:
ffmpeg -i input.vob -vf yadif=1 -c:v h264_nvenc output.mp4
提前致谢
任务可以通过以下方式完成:
@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
BaseSourceFolder
和BaseTargetFolder
的文件夹路径必须在第三行和第四行定义。
BaseSourceFolder
不能包含字符 =
,否则代码将无法运行。
这两个路径可以相同,但在这种情况下,使用仅包含一个命令行的批处理文件会更有效。
可执行文件 ffmpeg.exe
应在批处理文件中指定完整路径以提高效率,因为在这种情况下 Windows 命令处理器 cmd.exe
不需要搜索每个 VOB当前目录中可执行文件的文件,如果在环境变量 PATH
中列出的另一个目录中找不到,直到找到。
为了了解使用的命令及其工作原理,请打开 command prompt window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
echo /?
endlocal /?
for /?
if /?
md /?
set /?
setlocal /?
有关命令 SETLOCAL 和 ENDLOCAL.
的更多详细信息,另请参阅
我有 +300 个旧格式 (.VOB) 的视频,我想将其转换为 mp4。幸运的是,在一些文档之后,我已经设法转换了其中的几个,但我需要让它自动进行。不知道如何,甚至我应该使用哪种语言 (python, batch...)
问题是我想保留子文件夹结构。例如,如果视频 1 在文件夹 B 中,而文件夹 B 也在文件夹 A 中,则输出必须在名为“output”的文件夹中,并且转换后的视频必须在文件夹 B 和文件夹 A 中
ffmpeg 命令,如有必要:
ffmpeg -i input.vob -vf yadif=1 -c:v h264_nvenc output.mp4
提前致谢
任务可以通过以下方式完成:
@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
BaseSourceFolder
和BaseTargetFolder
的文件夹路径必须在第三行和第四行定义。
BaseSourceFolder
不能包含字符 =
,否则代码将无法运行。
这两个路径可以相同,但在这种情况下,使用仅包含一个命令行的批处理文件会更有效。
可执行文件 ffmpeg.exe
应在批处理文件中指定完整路径以提高效率,因为在这种情况下 Windows 命令处理器 cmd.exe
不需要搜索每个 VOB当前目录中可执行文件的文件,如果在环境变量 PATH
中列出的另一个目录中找不到,直到找到。
为了了解使用的命令及其工作原理,请打开 command prompt window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
echo /?
endlocal /?
for /?
if /?
md /?
set /?
setlocal /?
有关命令 SETLOCAL 和 ENDLOCAL.
的更多详细信息,另请参阅