我想将 SubRip 添加到 mp4 视频中,但出现错误。这是我的命令:
ffmpeg -i "C:\Users\wwy12\Downloads\RaymondChen20_high.mp4" -s 1920x1080 -b:v 3842k -ac 2 -r 29.97 -c:v libx264 -ar 44100 -b:a 140k -c:a aac -aspect 16:9 -vf "subtitles='C:\Users\wwy12\Downloads\subtitle.srt':charenc=cp936:force_style='PrimaryColour=&H0000FFFF,OutlineColour=&H00FFFFFF'" "c:\ffoutput\out.mp4" -y
输出如下:
ffmpeg version N-82759-g1f5630a-Sherpya Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 6.2.1 (GCC) 20161118
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\Users\wwy12\Downloads\RaymondChen20_high.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
title : One Dev Question with Raymond Chen - How do program settings work in virtual desktops
album : One Dev Question with Raymond Chen - How do program settings work in virtual desktops
encoder : Lavf57.10.101
comment : Application Development, C#, C++, developer center, Developer Tools, Developer Resources, Developers, Development, Windows 10
copyright : 2017 Microsoft Corporation
Duration: 00:01:04.56, start: 0.000000, bitrate: 3985 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 3842 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 140 kb/s (default)
Metadata:
handler_name : SoundHandler
[subtitles @ 00000000030af220] Unable to parse option value "Userswwy12Downloadssubtitle.srt" as image size
Last message repeated 1 times
[subtitles @ 00000000030af220] Error setting option original_size to value Userswwy12Downloadssubtitle.srt.
[Parsed_subtitles_0 @ 00000000030af160] Error applying options to the filter.
以下是上面的屏幕截图 (有些人可能会发现它更容易阅读)。
答案1
这
Unable to parse option value "Userswwy12Downloadssubtitle.srt" …
错误消息显示 FFmpeg 正在丢弃文件名中的反斜杠。
这个超级用户问题建议你可以将反斜杠 ( \
) 替换为普通的正斜杠 ( /
);例如
-vf "subtitles='C:/Users/wwy12/Downloads/subtitle.srt'…
如果您在驱动器上运行C:
,请尝试省略C:
文件名。
看到这个时,我的第一个想法是 FFmpeg 使用反斜杠作为转义字符。这种情况的正常解决方法是将反斜杠加倍:
-vf "subtitles='C:\\Users\\wwy12\\Downloads\\subtitle.srt'…
但这张 FFmpeg 故障单建议你可能需要四倍他们。(这并非完全不合理;我有时需要在 Unix 中使用大量反斜杠。)因此,您可能需要执行类似
-vf "subtitles='C\\:\\\\Users\\\\wwy12\\\\Downloads\\\\subtitle.srt'…
我不明白为什么他们建议在冒号 ( :
) 前加上反斜杠。正如我所说,省略 可能会让事情变得更简单C:
。
更新:
subtitles
OP 报告说,他通过在路径中加倍反斜杠并在冒号前添加一个来使其工作:
-vf "subtitles='C\:\\Users\\wwy12\\Downloads\\subtitle.srt'…
答案2
将 -vf 替换为 -filter_complex。对于无法解析的错误,将黑色斜杠[]替换为正斜杠[/],最重要的是在 (C:/Users) 后面加上反斜杠。
ffmpeg -i C:\Users\USER\Downloads\output.mp4 -filter_complex "subtitles='C\:/Users/USER/Downloads/subtitle.srt'" C:\Users\USER\Downloads\foutput.mp4