Obtenir les infos d’une video avec ffmpeg 3


Des fois il arrive qu’on ai besoin de savoir à quel type de vidéo on a affaire, ses codec videos, audio, sa résolution ou encore sa durée.

Avec ffmpeg on peut obtenir tout ça très simplement à l’aide de l’option “i”:

ffmpeg -i 1.mp4
ffmpeg version N-39738-g8274b21 Copyright (c) 2000-2012 the FFmpeg developers
  built on Apr 13 2012 13:46:48 with gcc 4.1.2 20080704 (Red Hat 4.1.2-51)
  configuration: --enable-gpl --enable-postproc 
--enable-swscale --enable-avfilter 
--enable-libmp3lame --enable-libvorbis 
--enable-libdirac --enable-libfaac 
--enable-libx264 --enable-nonfree 
--mandir=/opt/local/share/man --enable-shared --enable-pthreads
  libavutil      51. 46.100 / 51. 46.100
  libavcodec     54. 14.101 / 54. 14.101
  libavformat    54.  3.100 / 54.  3.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 67.101 /  2. 67.101
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 11.100 /  0. 11.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 2011-10-30 14:03:08
    encoder         : Lavf54.3.100
  Duration: 00:03:02.50, start: 0.000000, bitrate: 617 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360, 481 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc
    Metadata:
      creation_time   : 2011-10-30 14:03:08
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 127 kb/s
    Metadata:
      creation_time   : 2011-10-30 14:03:08
      handler_name    : SoundHandler

Si l’on veut récupérer juste une partie des infos comme la durée on peut faire comme ceci:

ffmpeg -i 1.mp4 2>&1 | gawk 'match($0, /Duration: (.[^,]*)/, matches) {print matches[1]}' 
00:03:02.50

3 thoughts on “Obtenir les infos d’une video avec ffmpeg

  • hdsdi3g

    Encore plus fort : avec ffprobe, livré avec ffmpeg, on peut récupérer ces infos plus facilement :
    ffprobe -show_format -show_streams -print_format xml -i 1.mp4
    Et on obtient un beau fichier XML. ffprobe resserve d’autres surprises, il faut visiter l’aide.

    En ce moment, je travaille beaucoup sur l’analyse et la gestion de médias, où j’ai notamment développé un wrapper Java (libre) pour ffprobe.

    • Sam

      Ca c’est très intéressant. Néanmoins sur lubuntu 12.04 l’option -print_format n’est pas dispo. Par contre l’output en .ini est très pratique à parser en Python.

      A noter qu’il faut qu’ffmpeg soit compilé avec ffprobe sans quoi ça foirera. Y a tellement de versions de la lib dans la nature que c’est risqué de parier sur une feature optionnelle.

    • hdsdi3g

      Oui.
      J’ai fini par en avoir assez des versions antiques des binaires fournis par les distribs. Je le compile maintenant, et avec la dernière version, c’est noel.
      Quant a essayer de gérer les différentes versions de ffmpeg, c’est quasi impossible : les retours sont trop différents. Même entre certains containers il y a des différences.
      Je pense que dans quelques versions, ffprobe se stabilisera, et cela deviendra enfin agréable de passer tout ça en prod.

Leave a comment

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.