如何解决批处理脚本+ FFmpeg-使用FOR循环管道传输并连接找到的所有文件最后一个文件除外
我正在尝试将文件夹中的所有“ .mp4”文件转换为“ .ts”文件,因此我可以使用FFmpeg.exe将它们全部组合成一个长的“ .mp4”视频。
使用ffmpeg时,我必须使用concat
命令来组合.ts文件。
下面是一段很长的代码,可以很长时间地执行此操作...。我想使用for循环,以防我要合并的文件不止3个。
ffmpeg.exe -hide_banner -y -i concat:"a.ts|b.ts|c.ts" -c copy -bsf:a aac_adtstoasc "COMBINED.mp4"
我可以使用下面的for command
来使此循环生效,但是找到的最后一个文件|
之后不能有管道,就像上面的c.ts"
一样。
FOR /F "USEBACKQ TOKENS=* DELIMS=,|" %%I IN ('%%~dpnG.ts') DO (
SET FNAME=%%~dpnI
ECHO.
ECHO !FNAME!
PAUSE>NUL
EXIT
)
有人知道甚至有可能在批处理文件中执行此操作吗?如果没有任何建议? PowerShell?
在回答Compo的问题时,这是我的工作脚本:
@ECHO OFF
SETLOCAL
COLOR 0A
TITLE CONCAT MULTIPLE MP4 FILES
PUSHD "%~dp0"
SET FF="C:\MAB\local64\bin-video\ffmpeg.exe"
:: SET VIDEO NAME WITHOUT EXTENSION (.MP4)
SET IN01=a
SET IN02=b
SET IN03=c
SET COMBINED=FULL
:: CREATE TEMP .TS VIDEOS OF THE FILES YOU WANT TO COMBINE
%FF% -hide_banner -y -i "%IN01%.mp4" -c copy -bsf:v h264_mp4toannexb -f mpegts "%IN01%.ts"
%FF% -hide_banner -y -i "%IN02%.mp4" -c copy -bsf:v h264_mp4toannexb -f mpegts "%IN02%.ts"
%FF% -hide_banner -y -i "%IN03%.mp4" -c copy -bsf:v h264_mp4toannexb -f mpegts "%IN03%.ts"
:: COMBINE TEMP .TS FILES INTO COMBINED .MP4
%FF% -hide_banner -y -i concat:"%IN01%.ts|%IN02%.ts|%IN03%.ts" -c copy -bsf:a aac_adtstoasc "%COMBINED%.mp4"
ECHO.
PAUSE
EXIT
解决方法
这是一个示例脚本,根据我的理解,该脚本应根据您的需要执行:
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION
COLOR 0A
TITLE CONCAT MULTIPLE MP4 FILES
SET "FF=C:\MAB\local64\bin-video\ffmpeg.exe"
SET "COMBINEDBASENAME=FULL"
SET "CONCATLIST="
PUSHD "%~dp0"
FOR %%G IN (*.mp4) DO (
REM CREATE TEMP .TS VIDEOS OF THE FILES YOU WANT TO COMBINE
"%FF%" -hide_banner -y -i "%%~G" -c copy -bsf:v h264_mp4toannexb -f mpegts "%%~nG.ts"
IF NOT ERRORLEVEL 1 IF EXIST "%%~nG.ts" (
IF NOT DEFINED CONCATLIST (SET "CONCATLIST=%%~nG.ts") ELSE (
SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%H In ("!CONCATLIST!|%%~nG.ts") DO ENDLOCAL & SET "CONCATLIST=%%~H"
)
)
)
IF NOT DEFINED CONCATLIST GOTO :EOF
REM COMBINE TEMP .TS FILES INTO COMBINED .MP4
"%FF%" -hide_banner -y -i concat:"%CONCATLIST%" -c copy -bsf:a aac_adtstoasc "%COMBINEDBASENAME%.mp4"
REM REMOVE :: FROM THE NEXT LINE TO DELETE THE .TS FILES
::DEL "%CONCATLIST:|=" "%"
ECHO=
PAUSE
GOTO :EOF
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。