Как заставить пакет cygwin fontconfig наследовать шрифты Windows?

1565
Witiko

Я использую 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, который, как известно, не работает вне коробки под окнами . Тем не менее, отсутствие каких-либо предупреждений 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
И ваш вопрос программирования ........ KevinDTimm 9 лет назад 0
Вопрос в том, почему это так. Я предполагаю, что это не ошибка, а результат неправильной настройки / отсутствия параметров командной строки. Я бы сказал, что это квалифицируется как вопрос программирования? Если нет, где вы предлагаете разместить этот запрос? Witiko 9 лет назад 0
работает Zeranoe? https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo - это все, что я знаю об этом ... rogerdpack 9 лет назад 0
Сборки Zeranoe страдают от неправильной конфигурации fontconfig, плюс они не являются встроенными исполняемыми файлами Cygwin. Вот почему вместо ручной настройки fontconfig (http://ffmpeg.zeranoe.com/forum/viewtopic.php?f=10&t=318&start=10) я попробовал эту сборку, которая утверждает, что она статически связана с библиотекой `libass` , Я попробую сборки Zeranoe и опубликую результаты. Witiko 9 лет назад 0
Я опубликовал решение, изменил название, чтобы отразить более общую проблему, которую он решает, и пометил вопрос для перехода на http://unix.stackexchange.com. Witiko 9 лет назад 0

1 ответ на вопрос

9
Witiko

As it turns out, the cygwin fontconfig package does not, by default, inherit the Windows fonts. I have fixed this by symlinking the C:\Windows\Fonts folder to one of the fontconfig folders and updating the font cache as follows:

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

Alternatively, the cygwin ports repository contains numerous font-* X11 packages, which can be installed to a similar end, while keeping the cygwin and Windows fonts separate.