2

Если я извлечу видеофайл с разрешением 320х240, текст на нем выглядит хорошо и читабельно. В случае, если я даю входное видео с разрешением 1280x720 или более большими значениями, текст на нем не читается. Он изменяет размеры или масштабируется, но текст выглядит плохо.

Можно ли применить текстовый фильтр после преобразования изображения или любым другим доступным методом.
Вы можете найти изображение (внизу вопроса) и вывод ffmpeg ниже.

$ ffmpeg.exe -ss 30 -i 1.mp4 -f image2 -vframes 1 -s 320x240 -vf \
  "drawtext=fontfile=/WINDOWS/Fonts/arial.ttf: timecode='00\:00\:00\:00': \
  r=25: x=(w-tw)/2: y=h-(2*lh): fontcolor=white: box=1: boxcolor=0x00000000@1" \
  ram.jpg

ffmpeg version 2.0.1 Copyright (c) 2000-2013 the FFmpeg developers
  built on Sep 26 2013 01:50:16 with gcc 4.8.1 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 38.100 / 52. 38.100
  libavcodec     55. 18.102 / 55. 18.102
  libavformat    55. 12.100 / 55. 12.100
  libavdevice    55.  3.100 / 55.  3.100
  libavfilter     3. 79.101 /  3. 79.101
  libswscale      2.  3.100 /  2.  3.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.12.100
  Duration: 00:19:57.82, start: 2.242000, bitrate: 1345 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x544, 1343 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc
    Metadata:
      handler_name    : VideoHandler
Output #0, image2, to 'ram.jpg':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.12.100
    Stream #0:0(und): Video: mjpeg, yuvj420p, 320x240, q=2-31, 200 kb/s, 90k tbn, 23.98 tbc
    Metadata:
      handler_name    : VideoHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> mjpeg)
Press [q] to stop, [?] for help
frame=    1 fps=0.0 q=0.0 Lsize=N/A time=00:00:00.04 bitrate=N/A dup=0 drop=21    
video:9kB audio:0kB subtitle:0 global headers:0kB muxing overhead -100.244499%

Обе картинки с размером и без оперативная память без указания размера
баран после указания размера

1 ответ1

4

Вы должны масштабировать изображение с помощью видеофильтра scale перед использованием drawtext:

$ ffmpeg.exe -ss 30 -i 1.mp4 -vframes 1 -q:v 2 -vf "scale=320:-1, \
  drawtext=fontfile=/WINDOWS/Fonts/arial.ttf: timecode='00\:00\:00\:00': \
  r=25: x=(w-tw)/2: y=h-(2*lh): fontcolor=white: box=1: boxcolor=0x00000000@1" \
  ram.jpg
  • Используйте видеофильтр масштаба вместо -s потому что вы можете контролировать, когда происходит масштабирование: до или после любого другого фильтра (фильтров).

  • Объявление только одного измерения с последующим использованием -1 для другого позволит ffmpeg автоматически выбрать правильное значение для сохранения аспекта.

  • Я добавил -q:v 2 для качества вывода, так как я полагаю, что в этом случае значения по умолчанию недостаточны. Если вы хотите, чтобы он был более сжатым, используйте более высокое значение. Эффективный диапазон составляет 2-31 для JPG.

  • Я удалил -f image2 потому что он здесь не нужен.

Также см:

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