如何在批处理文件中执行此CMD脚本?

问题描述 投票:0回答:2

我正在尝试制作一个批处理文件,该文件在执行时会创建一个名为 VideosToJoin.txt 的文件列表,其中包含文件夹中扩展名为 .mp4、.mts 和 .avi 的文件,然后继续将这些相同文件连接起来,创建一个最后一个名为 FinalVideo.mp4 我在这里需要一些帮助,因为我想自动化特定的过程......

(for %i in (*.mp4,*.mts,*.avi) do @echo file '%i') > VideosToJoin.txt   
  
ffmpeg -f concat -i VideosToJoin.txt -c copy FinalVideo.mp4

预期的结果是只执行一个文件就得到最终的视频,这就是我想要的,请帮忙。

for-loop batch-file ffmpeg
2个回答
1
投票

CMD 脚本要求您将 FOR 循环中的百分号加倍。

此外,您需要指定希望脚本检查的目录,因为否则它只会检查当前目录,通常是用户的主目录,但实际上可以是任何任意目录,具体取决于其他因素。

我猜测您希望将文件输出到脚本将检查的同一文件夹,这样就很容易,我们将使用 %~dp0 变量将临时视频文件存储到脚本所在的目录中。

%0
指的是脚本本身,
~dp
告诉它返回脚本的驱动器和路径。

还要确保 FFMpeg 在您的路径中,或在脚本中指定它的完整路径。

SET "_SrcPath=C:\Some\Folder\Path"
DEL /F /Q "%~dp0VideosToJoin.txt" 2>NUL

For %%i in (
  "%_SrcPath%\*.mp4"
  "%_SrcPath%\*.mts"
  "%_SrcPath%\*.avi"
) do (
  echo file '%%i'
)>>"%~dp0VideosToJoin.txt"

ffmpeg -f concat -i "%~dp0VideosToJoin.txt" -c copy "%_SrcPath%\FinalVideo.mp4"

1
投票

您可以使用 powershell 来执行此操作:

Get-ChildItem "*.mp4","*.mts","*.avi" | %{ $_.Name } | Set-Content VideosToJoin.txt
© www.soinside.com 2019 - 2024. All rights reserved.