我正在尝试将文件夹中所有的'.mp4‘文件转换为'.ts’文件,这样我就可以使用FFmpeg.exe将它们组合成一个很长的'.mp4‘视频。
在使用concat时,我必须使用ffmpeg命令来组合.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发布于 2020-10-10 20:20:32
这是一个示例脚本,根据我的理解,它应该按照您的需要来做:
@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 :EOFhttps://stackoverflow.com/questions/64292124
复制相似问题