【问题标题】:Escape special characters in FFmpeg subtitle filename转义 FFmpeg 字幕文件名中的特殊字符
【发布时间】:2021-03-10 13:39:56
【问题描述】:

如果你的字幕文件名为“Hi, y'all.srt”,你如何为 FFmpeg 正确转义?逗号用反斜杠转义,但无论我尝试什么技巧,我都无法让引号起作用!

$ ffmpeg -vf subtitles="Hi\, y\\\'all.srt" -t 1 -f null -

ffmpeg version 3.3.3 Copyright (c) 2000-2017 the FFmpeg developers
  built with Apple LLVM version 8.1.0 (clang-802.0.42)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-libass --enable-libmp3lame --enable-libx264 --enable-libx265 --enable-libxvid --enable-opencl --enable-videotoolbox --disable-lzma --enable-vda
  libavutil      55. 58.100 / 55. 58.100
  libavcodec     57. 89.100 / 57. 89.100
  libavformat    57. 71.100 / 57. 71.100
  libavdevice    57.  6.100 / 57.  6.100
  libavfilter     6. 82.100 /  6. 82.100
  libavresample   3.  5.  0 /  3.  5.  0
  libswscale      4.  6.100 /  4.  6.100
  libswresample   2.  7.100 /  2.  7.100
  libpostproc    54.  5.100 / 54.  5.100
[Parsed_subtitles_0 @ 0x7fba7af36080] Shaper: FriBidi 0.19.7 (SIMPLE) HarfBuzz-ng 1.4.8 (COMPLEX)
[Parsed_subtitles_0 @ 0x7fba7af36080] Unable to open Hi, yall.srt
[AVFilterGraph @ 0x7fba7ad05d60] Error initializing filter 'subtitles' with args 'Hi, y\all.srt'
Error reinitializing filters!
Failed to inject frame into filter network: No such file or directory
Error while processing the decoded data for stream #0:0
Conversion failed!

【问题讨论】:

    标签: ffmpeg escaping


    【解决方案1】:

    在 Windows 7 上,这有效:

    subtitles="Hi\, y\\\'all.srt"
    

    【讨论】:

    • 不适用于带有 1-4 个反斜杠的 macOS。我尝试了所有其他可以想到的变体,例如'subtitles=a\,'"\'"'b.srt',它稍微改变了错误消息:Unable to open a,b.srtError initialising filter subtitles with args 'a,'b.srt'。 (请注意第一条错误消息中缺少的引号。)所以这对我来说似乎是一个错误。你怎么看?
    • 尝试,但不要将过滤器字符串括在引号中,就像我的回答一样。我猜你是在 MacOS 上,所以 bash。
    • 您的某些答案似乎丢失了。无论如何,我尝试不使用引号。不适用于任何数量的反斜杠。
    • 你能分享这个命令的完整日志吗:ffmpeg -vf subtitles="Hi\, y\\\'all.srt" -t 1 -f null -
    • 查看更新。即使在错误消息中,文件名也打印错误。
    【解决方案2】:

    我知道这是一个老问题,但我想在这里发布一个答案,因为我遇到了一个类似的问题并想出了一个解决方法。这是在 Windows 8.1 中测试的。

    解决方法是首先使用 ffmpeg 喜欢的名称创建指向文件的符号链接,然后改用它。

    例如。

    mklink input.mkv "my file with [strange] characters.mkv"
    

    然后你可以像这样将它与 ffmpeg 一起使用:

    ffmpeg -i input.mkv -vf subtitles=input.mkv -y output.mp4
    

    这也适用于 .srt 文件。


    ffmpeg 似乎存在一个错误,如果您在字幕过滤器中使用包含特殊字符的文件,ffmpeg 将找不到该文件。我有一组我想在其中刻录字幕的文件,但它们的文件名中都有特殊字符(方括号)。我可以重命名我的所有文件,并删除特殊字符,但这似乎很痛苦,我宁愿找到一种不关心源文件如何命名的方法。我能找到的最好的解决方法是只创建一个指向文件本身的符号链接并在符号链接上调用 ffmpeg。如果我要遍历许多文件,我需要做的就是将符号链接更改为下一个文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2011-05-11
      相关资源
      最近更新 更多