无法使用ffmpeg将字幕提取到txt文件中

Yar*_*ros 3 ffmpeg

尝试将字幕提取到txt文件

ffmpeg.exe -i video.mkv -c copy -map 0:s:0 subs.txt
Run Code Online (Sandbox Code Playgroud)

但出现以下错误

Unable to find a suitable output format for 'subs.txt' 
subs.txt: Invalid argument
Run Code Online (Sandbox Code Playgroud)

完整控制台输出:

ffmpeg version N-81872-gbe1d324 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.4.0 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-libebur128 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib
  libavutil      55. 32.100 / 55. 32.100
  libavcodec     57. 60.101 / 57. 60.101
  libavformat    57. 51.102 / 57. 51.102
  libavdevice    57.  0.102 / 57.  0.102
  libavfilter     6. 63.100 /  6. 63.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  2.100 /  2.  2.100
  libpostproc    54.  0.100 / 54.  0.100
Input #0, matroska,webm, from 'video.mkv':
  Metadata:
    CREATION_TIME   : 2018-10-28T02:41:51Z
    ENCODER         : Lavf57.7.2
  Duration: 00:11:45.39, start: 0.000000, bitrate: 2774 kb/s
    Stream #0:0: Video: h264 (Main), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 180k tbc (default)
    Stream #0:1(eng): Audio: aac (LC), 48000 Hz, stereo, fltp (default)
    Metadata:
      title           : Stereo
    Stream #0:2(eng): Subtitle: ass
[NULL @ 00000000038c9540] Unable to find a suitable output format for 'subs.txt'
subs.txt: Invalid argument
Run Code Online (Sandbox Code Playgroud)

仅当我指定输出文件的扩展名时它才有效ass,如下所示:

ffmpeg.exe -i video.mkv -c copy -map 0:s:0 subs.ass
Run Code Online (Sandbox Code Playgroud)

它正确提取并创建带有字幕的 subs.ass 文件
ffmpeg 如何解释输出文件的扩展名?为什么我必须指定输出文件的确切扩展名?

类似的问题,但这里有不同的错误: ffmpeg无法找到适合'subs.srt'的输出格式

slh*_*hck 5

.txt当在输出路径中提供文件扩展名时,ffmpeg 不知道您想要什么样的输出。除非被该-f选项覆盖,否则它将尝试从文件结尾找出必要的格式,因此.ass将调用正确的 SSA 格式、.srtSubRip 格式等。同样适用.mp4.mov、 等

\n\n

要查看支持哪些格式,请运行ffmpeg -formats. 格式名称和文件扩展名\xe2\x80\x94之间没有完美的映射,有时可能有多个扩展名触发格式\xe2\x80\x94,但大多数情况下它们是相同的。例如,该格式mp4以文件结尾 调用.mp4,该格式matroska.mkv.

\n\n

至于你的字幕,你可以强制 ffmpeg 使用给定的格式-f <format>。例如:

\n\n
ffmpeg -i <input> -map 0:s:0 -c copy -f srt output.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

假设您的输入有 SRT 字幕。如果不这样做,-c copy将无法工作。省略该-c copy部分,例如,如果您打算输出-f ass.

\n