使用 ffmpeg 添加字幕时出错

使用 ffmpeg 添加字幕时出错

我想将 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:

更新:

subtitlesOP 报告说,他通过在路径中加倍反斜杠并在冒号前添加一个来使其工作:

-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

相关内容