ffmpeg не определяет формат субтитров (webvtt) и отказывается копировать его - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь перекодировать звук в некоторых видеофайлах. Я хочу скопировать видео и субтитры, не касаясь их, однако ffmpeg не определяет формат субтитров (который является webvtt) и отказывается что-либо делать.

fmpeg -copy_unknown -analyzeduration 2000M -probesize 2000M -i input.mkv -map_metadata 0 -map 0 -c copy -c:a:0 aac -b:a 384k output.mkv

[matroska,webm @ 0x5597558e4040] Unknown/unsupported AVCodecID S_TEXT/WEBVTT.
[matroska,webm @ 0x5597558e4040] Could not find codec parameters for stream 2 (Subtitle: none): unknown codec
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Guessed Channel Layout for Input Stream #0.1 : 5.1
Input #0, matroska,webm, from 'input.mkv':
  Metadata:
    encoder         : libebml v1.3.9 + libmatroska v1.5.2
    creation_time   : 2020-03-05T09:03:02.000000Z
  Duration: 00:56:33.26, start: 0.000000, bitrate: 3597 kb/s
    Stream #0:0: Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
    Metadata:
      BPS-eng         : 3340067
      DURATION-eng    : 00:56:33.140000000
      NUMBER_OF_FRAMES-eng: 81354
      NUMBER_OF_BYTES-eng: 1416664616
      _STATISTICS_WRITING_APP-eng: mkvmerge v38.0.0 ('The Silent Type') 64-bit
      _STATISTICS_WRITING_DATE_UTC-eng: 2020-03-05 09:03:02
      _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
    Stream #0:1: Audio: eac3, 48000 Hz, 5.1, fltp (default)
    Metadata:
      BPS-eng         : 256000
      DURATION-eng    : 00:56:33.248000000
      NUMBER_OF_FRAMES-eng: 106039
      NUMBER_OF_BYTES-eng: 108583936
      _STATISTICS_WRITING_APP-eng: mkvmerge v38.0.0 ('The Silent Type') 64-bit
      _STATISTICS_WRITING_DATE_UTC-eng: 2020-03-05 09:03:02
      _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
    Stream #0:2(eng): Subtitle: none (default)
    Metadata:
      BPS-eng         : 38
      DURATION-eng    : 00:54:47.388000000
      NUMBER_OF_FRAMES-eng: 514
      NUMBER_OF_BYTES-eng: 15766
      _STATISTICS_WRITING_APP-eng: mkvmerge v38.0.0 ('The Silent Type') 64-bit
      _STATISTICS_WRITING_DATE_UTC-eng: 2020-03-05 09:03:02
      _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES

Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (eac3 (native) -> aac (native))
  Stream #0:2 -> #0:2 (copy)

[aac @ 0x5597b06ae000] Using a PCE to encode channel layout "5.1(side)"
[matroska @ 0x5597b06ab540] Subtitle codec 0 is not supported.
Could not write header for output file #0 (incorrect codec parameters ?): Function not implemented
Error initializing output stream 0:1 -- 
[aac @ 0x5597b06ae000] Qavg: -nan
Conversion failed!

VL C показывает его как WebVTT и правильно отображает субтитры:

VLC shows as WebVTT

MediaInfo также правильно определяет как webvtt:

Text
ID                                       : 3
Format                                   : S_TEXT/WEBVTT
Codec ID                                 : S_TEXT/WEBVTT
Duration                                 : 54 min 47 s
Bit rate                                 : 38 b/s
Count of elements                        : 514
Stream size                              : 15.4 KiB (0%)
Language                                 : English
Default                                  : Yes
Forced                                   : No

Мой ffmpeg был создан с помощью webvtt:

$ ffmpeg -codecs | grep VTT
ffmpeg version n4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.3.0 (Arch Linux 9.3.0-1)
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
 DES... webvtt               WebVTT subtitle

Как мне сказать ffmpeg «это webvtt, просто скопируйте его, пожалуйста!»?

РЕДАКТИРОВАТЬ: РАЗРЕШЕНО (спасибо @Gyan )

Для принудительного декодирования необходимо установить -c:s webvtt перед , на вход: fmpeg -analyzeduration 50M -probesize 50M -c:s webvtt -i input.mkv ...

...