我正在尝试制作一个批处理文件,该文件在执行时会创建一个名为 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
预期的结果是只执行一个文件就得到最终的视频,这就是我想要的,请帮忙。
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"
您可以使用 powershell 来执行此操作:
Get-ChildItem "*.mp4","*.mts","*.avi" | %{ $_.Name } | Set-Content VideosToJoin.txt