首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批处理脚本+ FFmpeg --使用FOR循环通过管道连接找到的除最后一个文件之外的所有文件

批处理脚本+ FFmpeg --使用FOR循环通过管道连接找到的除最后一个文件之外的所有文件
EN

Stack Overflow用户
提问于 2020-10-10 17:53:35
回答 1查看 354关注 0票数 0

我正在尝试将文件夹中所有的'.mp4‘文件转换为'.ts’文件,这样我就可以使用FFmpeg.exe将它们组合成一个很长的'.mp4‘视频。

在使用concat时,我必须使用ffmpeg命令来组合.ts文件。

下面是一行有效的代码来完成这项工作...我想使用for循环,以防我要合并的文件远不止3个。

代码语言:javascript
复制
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"那样在它后面有一个管道|

代码语言:javascript
复制
    FOR /F "USEBACKQ TOKENS=* DELIMS= ,|" %%I IN ('%%~dpnG.ts') DO (
    SET FNAME=%%~dpnI
    ECHO.
    ECHO !FNAME!
    PAUSE>NUL
    EXIT
)

有没有人知道在批处理文件中是否有可能(可能使用令牌)做到这一点?如果没有任何建议?PowerShell?

为了回答Compo的问题,下面是我的工作脚本:

代码语言:javascript
复制
@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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-10 20:20:32

这是一个示例脚本,根据我的理解,它应该按照您的需要来做:

代码语言:javascript
复制
@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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64292124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档