文件名包含特殊字符和空格,无法执行

文件名包含特殊字符和空格,无法执行

我使用 ffmpeg 库开发了一个小批量脚本,可以在文件夹中包含的所有视频的开头添加视频唇形

这是我的脚本:

@echo off
mkdir append

(for %%i in (*.mp4) do @echo %%i) > append/mymp4list.txt

ffmpeg -i main.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y append/main.ts

for /F "tokens=*" %%A in (append/mymp4list.txt) do (
    echo %%A
    ffmpeg -i %%A -c copy -bsf:v h264_mp4toannexb -f mpegts -y append/%%A.ts
    ffmpeg -i "concat:append/main.ts|append/%%A.ts" -c copy -bsf:a aac_adtstoasc -y append/%%A_output.mp4
)

对于名称中仅包含数字或字符(如 sample.mp4 和 video123.mp4)的视频,它可以正常工作,
但是当视频文件的名称包含特殊字符或空格(如 2016-17 video - English - gateway (1).mp4 )时,它会在此行显示错误:

ffmpeg -i "concat:append/main.ts|append/%%A.ts" -c copy -bsf:a aac_adtstoasc -y append/%%A_output.mp4

其中 main.ts 是视频的起始剪辑,%%A 是来自文本文件的视频名称。

有人能告诉我当视频文件名包含特殊字符或空格时,如何执行视频文件的连接操作?

答案1

首先,免责声明,它一直是长的自从我完成任何 CMD 脚本以来已经过去了很多年,并且我没有可用的 Windows 主机来测试这个。

也就是说,大多数命令行工具都使用空格来分隔参数。您可以在脚本中对每个未加引号的 %%A 进行双引号处理,以避免出现这种情况,例如:

ffmpeg -i "concat:append/main.ts|append/%%A.ts" -c copy -bsf:a aac_adtstoasc -y append/%%A_output.mp4

会成为:

ffmpeg -i "concat:append/main.ts|append/%%A.ts" -c copy -bsf:a aac_adtstoasc -y "append/%%A_output.mp4"

祝你好运,我希望这确实有帮助。

鲍勃

答案2

最好的选择是将字符串括起来。它适用于所有其他特殊字符和空格。我附上了快照,下面是我找到的一些示例ffmpeg 文档页面。我附加了屏幕截图,以防将来无法使用。

引用特殊字符

相关内容