1

Я использую Cyfwin64 сборки ffmpeg (1, 2) для записи субтитров в видео файл следующим образом:

$ ffmpeg -i file.mp4 -vf subtitles=file.srt file.ts
ffmpeg version 1.2.3 Copyright (c) 2000-2013 the FFmpeg developers
  built on Sep 18 2013 01:11:22 with gcc 4.8.1 (GCC)
  configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/bin --incdir=/usr/include --mandir=/usr/share/man --disable-static --enable-shared --enable-gpl --enable-version3 --enable-postproc --enable-swscale --enable-avfilter --enable-pthreads --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-libass --enable-libbluray --enable-libcdio --enable-libcelt --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopencv --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libtwolame --disable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --disable-libxavs --enable-openal --enable-x11grab --enable-zlib --disable-debug --disable-optimizations --enable-yasm --disable-stripping
  libavutil      52. 18.100 / 52. 18.100
  libavcodec     54. 92.100 / 54. 92.100
  libavformat    54. 63.104 / 54. 63.104
  libavdevice    54.  3.103 / 54.  3.103
  libavfilter     3. 42.103 /  3. 42.103
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'file.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 2013-07-18 23:29:41
    encoder         : Lavf51.12.1
  Duration: 00:21:59.66, start: 0.000000, bitrate: 5461 kb/s
    Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 5135 kb/s, 59.94 fps, 59.94 tbr, 60k tbn, 119.88 tbc
    Metadata:
      creation_time   : 2013-07-19 02:21:28
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 319 kb/s
    Metadata:
      creation_time   : 2013-07-19 02:21:28
      handler_name    : SoundHandler
[srt @ 0x600057e80] Estimating duration from bitrate, this may be inaccurate
Output #0, mpegts, to 'file.ts':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf54.63.104
    Stream #0:0(eng): Video: mpeg2video, yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 90k tbn, 59.94 tbc
    Metadata:
      creation_time   : 2013-07-19 02:21:28
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: mp2, 48000 Hz, stereo, s16, 128 kb/s
    Metadata:
      creation_time   : 2013-07-19 02:21:28
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> mpeg2video)
  Stream #0:1 -> #0:1 (aac -> mp2)
Press [q] to stop, [?] for help
[Parsed_subtitles_0 @ 0x6000229c0] Neither PlayResX nor PlayResY defined. Assuming 384x288

Но субтитры не появляются в результирующем видеопотоке вообще.

[Parsed_subtitles_0 @ 0x6000229c0] Neither PlayResX nor PlayResY defined. Assuming 384x288 не является частью проблемы, поскольку преобразование субтитров в .ass помощью ffmpeg -i file.srt file.ass и указание значений PlayResX и Y приводит к тому, что предупреждение исчезает без решения исходной проблемы.

Я знаю, что библиотека libass, которая предоставляет фильтр субтитров для ffmpeg, использует fontconfig, который, как известно, не работает вне коробки под Windows. Тем не менее, отсутствие каких-либо предупреждений fontconfig заставляет меня поверить, что это не проблема здесь. Есть ли какие-либо сведения о том, что может быть причиной проблемы?

РЕДАКТИРОВАТЬ: Я скачал и скомпилировал ffmpeg сам:

$ git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
$ cd ffmpeg
$ ./configure --enable-static --disable-shared --enable-libass
$ make

Результат преобразования ./ffmpeg -i file.mp4 -vf subtitles=file.srt file.ts идентичен, за исключением того факта, что на этот раз предупреждающие сообщения не выводятся . Я смотрю, может ли виновником является конфигурация библиотеки fontconfig .

1 ответ1

9

Как оказалось, пакет cygwin fontconfig по умолчанию не наследует шрифты Windows. Я исправил это, поставив символическую ссылку на папку C:\Windows\Fonts в одну из папок fontconfig и обновив кэш шрифтов следующим образом:

$ ln -s /cygdrive/c/Windows/Fonts /usr/share/fonts/win-fonts
$ fc-cache

В качестве альтернативы, репозиторий портов cygwin содержит множество пакетов font-* X11, которые могут быть установлены аналогичным образом, при этом шрифты cygwin и Windows разделены.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .