![使用 ffmpeg -i File1.mkv -map 0 -map -0:s -c copy File1.mp4 将 mkv 批量转换为 mp4](https://linux22.com/image/1631745/%E4%BD%BF%E7%94%A8%20ffmpeg%20-i%20File1.mkv%20-map%200%20-map%20-0%3As%20-c%20copy%20File1.mp4%20%E5%B0%86%20mkv%20%E6%89%B9%E9%87%8F%E8%BD%AC%E6%8D%A2%E4%B8%BA%20mp4.png)
我想使用以下命令将文件夹中的所有 .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
进一步阅读:
[√]启用延迟扩展