2 votes

ffmpeg video to image conversion. sur la spécification de la taille de l'image, le texte du filtre n'est pas clair.

Si j'extrais un fichier vidéo d'une résolution de 320x240, le texte est bon et lisible. Dans le cas où je donne une vidéo d'entrée de résolution 1280x720 ou toute autre valeur supérieure, le texte n'est pas lisible. Il est redimensionné ou mis à l'échelle, mais le texte est de mauvaise qualité.

Est-il possible d'appliquer un filtre texte après la conversion de l'image ou une méthode disponible ?
Vous pouvez trouver l'image (au bas de la question) et la sortie ffmpeg ci-dessous.

$ 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%

Les deux photos avec et sans taille ram without specifying size
ram after specifying size

4voto

llogan Points 50040

Vous devez mettre l'image à l'échelle avec la fonction scale filtre vidéo avant d'utiliser 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
  • Utilisez le filtre vidéo à l'échelle au lieu de -s car vous pouvez contrôler le moment où la balance se produit : avant ou après un ou plusieurs autres filtres.

  • Déclarer une seule dimension et utiliser ensuite -1 de l'autre permettra à ffmpeg de choisir automatiquement la valeur correcte pour préserver l'aspect.

  • J'ai ajouté -q:v 2 pour la qualité de sortie, car je suppose que les valeurs par défaut ne sont pas suffisantes dans ce cas. Si vous voulez qu'il soit plus compressé, utilisez une valeur plus élevée. La plage effective est de 2-31 pour les jpg.

  • J'ai retiré -f image2 car il n'est pas nécessaire ici.

Voir aussi :

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X