我正在尝试对视频进行硬字幕处理,这是我使用的命令:
ffmpeg -i 文件'c:\Users\user1\Desktop\subtitle\2\pod1.mp4'-filter:v subtitles='c:\Users\user1\Desktop\subtitle\2\done.ass''c:\Users\user1\Desktop\subtitle\2\pod_result.mkv'
但我收到此错误:
'c:\Users\user1\Desktop\subtitle\2\pod1.mp4': Invalid argument
我已经完成了以下修改但仍然出现相同的错误:
使用正斜杠代替反斜杠
转义反斜杠(\)
在地址开头使用 C:\ 或 c:\
附言:我知道我可以将输入视频和字幕放在与 ffmpeg 相同的目录中(或任何具有 ffmpeg 相对路径的目录),并提供相对路径而不是绝对路径。但我需要知道是否可以将输入和输出地址作为绝对路径。
答案1
最后我通过反复试验找到了答案。正如问题中解释的那样,我想将 done.ass(字幕文件)硬字幕到视频中
字幕的绝对路径 = C:/Users/user1/Desktop/subtitle/2/done.ass
视频的绝对路径 = C:\Users\user1\Desktop\subtitle\2\pod1.mp4
结果视频的绝对路径 = C:\Users\sadegh\Desktop\subtitle\2\pod_result.mkv
现在对视频进行硬字幕的命令将是:
ffmpeg -i "C:\Users\sadegh\Desktop\subtitle\2\pod 1.mp4" -filter:v subtitles=\'C:/Users/sadegh/Desktop/subtitle/2/done.ass\' "C:\Users\sadegh\Desktop\subtitle\2\pod_result.mkv"
注意:字幕的绝对路径必须用斜杠分隔
注意:我必须将字幕文件的绝对路径放在单引号中,并且必须转义这些单引号(在 ' 字符前使用 \ 反斜杠)
答案2
在 Windows 上使用双引号字符,并且应该将整个参数包装在一起,而不仅仅是路径:
"subtitles=C:\somefilepath.txt"
您不能使用它'
进行分组,因为它将被解释为参数/路径的一部分。
答案3
我能够在 Windows 11 下使用完整路径通过 ASS 过滤器处理 FFmpeg mp4 视频,方法如下:
ffmpeg -i "E:\2023\202308\20230712 - Bavarian Illuminati-r.mp4" **-vf "ass=\\'E:\\\2023\\\202308\\\20230712 - Bavarian Illuminati-r.ASS\\'"** "E:\2023\202308\20230712 - Bavarian Illuminati-rASS.mp4"
并以此方式将我的 ASS 字幕嵌入原始视频中。
因此,您需要使用'
(反斜杠)转义的\
(单引号)加上每条路径的两倍\
。有点“扭曲”,但它有效!
请注意:仔细检查 *.ASS 字幕文件的文件名/路径中没有“,”(逗号),否则上面显示的转义解决方案将不起作用!