使用 ffmpeg -i File1.mkv -map 0 -map -0:s -c copy File1.mp4 将 mkv 批量转换为 mp4

使用 ffmpeg -i File1.mkv -map 0 -map -0:s -c copy File1.mp4 将 mkv 批量转换为 mp4

我想使用以下命令将文件夹中的所有 .mkv 文件批量转换为 .mp4 格式:

ffmpeg -i File1.mkv -map 0 -map -0:s -c copy File1.mp4

但问题是我必须手动对文件夹中的每个文件执行此操作。我浏览过各种帖子,但没有一个指定-map选项。

我使用的是 Windows 操作系统,以下是我迄今为止尝试过的:

for %%A IN (*.mkv) DO ffmpeg -i "%%A" -map 0 -map -0:s -c copy "%%A.mp4"
pause

运行正常,但唯一的问题是现在我正在获取.mkv转换后的.mp4文件。
我该如何摆脱不需要的文件.mkv

答案1

@echo off 

Setlocal EnableDelayedExpansion

for %%i in ("D:\Path\To\Folder\Your\Files\*.mkv"
)do ffmpeg -i "%%~fI" -map 0 -map -0:s -c copy "%%~dpnI.mp4" 

Endlocal & timeout /t -1 

尝试使用扩展变量:

"%%~fI"  - expands %%I to a fully qualified path name ==> input file 
"%%~dI"  - expands %%I to a drive letter only
"%%~pI"  - expands %%I to a path only
"%%~nI"  - expands %%I to a file name only

rem :: Concatenating "%%~dI" + "%%~pI" + "%%~nI" + ".mp4" you can get... 

"%%~dpnI.mp4"  ==> output file

相关内容