尝试使用 ffmpeg SPACES IN NAME 将 mp3(和图像)转换为 mp4 时出错

Error when trying to convert mp3 (and image) to mp4 using ffmpeg SPACES IN NAME

我找到了如何在批处理文件中使用以下代码将 MP3 批量转换为 MP4:

for %%f in (*.mp3) do ffmpeg -i %%f -loop 1 -i image.jpg -c:a copy -c:v libx264 -shortest %%~nf.mp4

它工作正常,除非 FILENAME 中有空格:FILENAME.mp3 工作正常但 FILE NAME.mp3 给出错误 "No such file or directory."

我尝试在 %%f 前后插入 "delims=",但它一直说这是意外的。有什么想法吗?

谢谢。

for %%f in (*.mp3) do ffmpeg -i "%%f" -loop 1 -i image.jpg -c:a copy -c:v libx264 -shortest "%%~nf.mp4"

一般"quote filenames that may contain spaces"

"delims=" 只能与 for /f 一起使用,如

for /f "delims=" %%f in (...

for 的目的主要是从文件中读取行。

使用 'dir /b /a-d filemask' - 包括引号以向 for /f 提供要处理的文件名列表。 /b 表示 "basic form"(仅限名称),/a-d 表示 "no directories".

如果您的文件名包含空格等分隔符,请使用 `"delims=" 否则隐式 "tokens=1" 将截断第一个分隔符处应用的值。

谢谢大家的帮助,引号就是诀窍。

我改变了这个:

for %%f in (*.mp3) do ffmpeg -i %%f -loop 1 -i image.jpg -c:a copy -c:v libx264 -shortest %%~nf.mp4

为此:

for %%f in ("*.mp3") do ffmpeg -i "%%f" -loop 1 -i image.jpg -c:a copy -c:v libx264 -flags global_header -pix_fmt yuv420p -shortest "%%~nf.mp4"

仅供参考:添加了额外的开关,但与引起问题的空格无关:

-flags global_header -pix_fmt yuv420p