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 |
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.
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.
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.