【问题标题】:Error when trying to convert mp3 (and image) to mp4 using ffmpeg SPACES IN NAME尝试使用 ffmpeg SPACES IN NAME 将 mp3(和图像)转换为 mp4 时出错
【发布时间】:2016-08-03 13:52:07
【问题描述】:

我发现了如何使用批处理文件中的以下代码将 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 给出错误“没有这样的文件或目录。”

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

谢谢。

【问题讨论】:

  • 在文件名两边加上引号

标签: loops batch-file ffmpeg spaces


【解决方案1】:
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 表示“基本形式”(仅限名称),/a-d 表示“无目录”。

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

【讨论】:

  • 考虑添加-pix_fmt yuv420p 作为输出选项。否则输出可能会使用愚蠢的玩家无法处理的色度子采样方案。
【解决方案2】:

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

我改变了这个:

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

【讨论】:

    猜你喜欢
    • 2013-08-12
    • 2014-11-04
    • 1970-01-01
    • 2017-12-16
    • 2022-09-27
    • 2013-03-27
    • 2015-09-03
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多