有一个cmd代码(见下面的代码)。你不能在 Powershell 中执行此操作,因为我需要在 cmd 中执行此操作。此代码使用 ffmpeg 软件将视频切成碎片。关键是,在 ffmpeg 工作之前,我创建命令 MD 文件夹 result_%%i 并将每个处理的文件放在那里 ffmpeg 处理的所有结果(视频文件): result_%%i/%%i%03d.mp4
问题:如何在文件夹中为10个输出切片分别创建一个子文件夹并将它们放在那里?分别如此,result_%%i文件夹下就会有几个子文件夹。
例如,子文件夹应编号为result_1_%%i 。因此,任何文件的完整路径将如下所示:result_%%i/result_1_%%i/%%i%03d.mp4
@echo off
for %%i in (*.mov) do (
MD result_%%i
ffmpeg -i "%%i" -filter_complex "[0:v]boxblur=40,scale=1080x1920,setsar=1[bg];[0:v]scale=1080:1920:force_original_aspect_ratio=decrease[fg];[bg][fg]overlay=y=(H-h)/2" -c:v libx264 -profile:v main -level:v 3.0 -x264-params scenecut=0:open_gop=0:min-keyint=72:keyint=72 -c:a aac -preset slow -crf 23 -r 30 -sn -force_key_frames "expr: gte(t, n_forced * 0.5)" -f segment -segment_time 14.5 -reset_timestamps 1 result_%%i/%%i%%03d.mp4
)
pause
@echo off
setlocal EnableExtensions DisableDelayedExpansion
(for %%i in (*.mov) do (
md "result_%%~ni"
ffmpeg.exe -i "%%i" -filter_complex "[0:v]boxblur=40,scale=1080x1920,setsar=1[bg];[0:v]scale=1080:1920:force_original_aspect_ratio=decrease[fg];[bg][fg]overlay=y=(H-h)/2" -c:v libx264 -profile:v main -level:v 3.0 -x264-params scenecut=0:open_gop=0:min-keyint=72:keyint=72 -c:a aac -preset slow -crf 23 -r 30 -sn -force_key_frames "expr: gte(t, n_forced * 0.5)" -f segment -segment_time 14.5 -reset_timestamps 1 "result_%%~ni\%%~ni%%03d.mp4"
if not errorlevel 1 set "FolderName=result_%%~ni" & call :MoveFiles
)) & exit /B
:MoveFiles
set "FolderCount=0"
:FolderLoop
set /A FolderCount+=1
set "SlicesFolder=%FolderName%\Slices_%FolderCount%"
md "%SlicesFolder%"
set "FileCount=0"
for %%j in ("%FolderName%\*.mp4") do (
setlocal EnableDelayedExpansion
if !FileCount! == 10 endlocal & goto FolderLoop
endlocal
move "%%j" "%SlicesFolder%\" >nul
set /A FileCount+=1
)
goto :EOF
让我们假设启动批处理文件时的当前目录包含电影文件Development & Test(!) 100%.mov
。批处理文件会在当前目录中创建子目录
result_Development & Test(!) 100%
。然后批处理文件运行
ffmpeg.exe
,它会在此目录中创建文件:
Development & Test(!) 100%_001.mp4
Development & Test(!) 100%_002.mp4
Development & Test(!) 100%_003.mp4
Development & Test(!) 100%_004.mp4
Development & Test(!) 100%_005.mp4
Development & Test(!) 100%_006.mp4
Development & Test(!) 100%_007.mp4
Development & Test(!) 100%_008.mp4
Development & Test(!) 100%_009.mp4
Development & Test(!) 100%_010.mp4
Development & Test(!) 100%_011.mp4
Development & Test(!) 100%_012.mp4
子例程 MoveFiles
在
result_Development & Test(!) 100%
中创建另外两个子目录并将文件移入其中。所以最终的目录结构是:
exit /B
可以替换为
goto SliceDone
,在发布的代码下方带有标签
:SliceDone
,以及更多命令行,其中
endlocal
作为最后一个命令行。要了解所使用的命令及其工作原理,请打开
命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。
call /?
echo /?
endlocal /?
exit /?
for /?
goto /?
if /?
md /?
move /?
set /?
setlocal /?
>nul
的说明。
&
。