Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extract Video Frames In Python

Tags:

I want to extract video frames and save them as image.

import os, sys from PIL import Image  a, b, c = os.popen3("ffmpeg -i test.avi") out = c.read() dp = out.index("Duration: ") duration = out[dp+10:dp+out[dp:].index(",")] hh, mm, ss = map(float, duration.split(":")) total = (hh*60 + mm)*60 + ss for i in xrange(9):     t = (i + 1) * total / 10     os.system("ffmpeg -i test.avi -ss %0.3fs frame%i.png" % (t, i)) 

But I have this error:

FFmpeg version CVS, Copyright (c) 2000-2004 Fabrice Bellard Mac OSX universal build for ffmpegX   configuration:  --enable-memalign-hack --enable-mp3lame --enable-gpl --disable-vhook --disable-ffplay --disable-ffserver --enable-a52 --enable-xvid --enable-faac --enable-faad --enable-amr_nb --enable-amr_wb --enable-pthreads --enable-x264    libavutil version: 49.0.0   libavcodec version: 51.9.0   libavformat version: 50.4.0   built on Apr 15 2006 04:58:19, gcc: 4.0.1 (Apple Computer, Inc. build 5250) Input #0, avi, from 'test.avi':   Duration: 00:00:30.5, start: 0.000000, bitrate: 465 kb/s   Stream #0.0, 25.00 fps(r): Video: mpeg4, yuv420p, 640x480   Stream #0.1: Audio: mp3, 32000 Hz, mono, 32 kb/s Unable for find a suitable output format for 'frame0.png' 

Edit: ffmpeg -formats

FFmpeg version CVS, Copyright (c) 2000-2004 Fabrice Bellard Mac OSX universal build for ffmpegX   configuration:  --enable-memalign-hack --enable-mp3lame --enable-gpl --disable-vhook --disable-ffplay --disable-ffserver --enable-a52 --enable-xvid --enable-faac --enable-faad --enable-amr_nb --enable-amr_wb --enable-pthreads --enable-x264    libavutil version: 49.0.0   libavcodec version: 51.9.0   libavformat version: 50.4.0   built on Apr 15 2006 04:58:19, gcc: 4.0.1 (Apple Computer, Inc. build 5250) File formats:   E 3g2             3gp2 format   E 3gp             3gp format  D  4xm             4X Technologies format  D  RoQ             Id RoQ format  D  aac             ADTS AAC  DE ac3             raw ac3   E adts            ADTS AAC  DE aiff            Audio IFF  DE alaw            pcm A law format  DE amr             3gpp amr file format  DE asf             asf format   E asf_stream      asf format  DE au              SUN AU Format  DE avi             avi format  D  avs             avs format   E crc             crc testing format  D  daud            D-Cinema audio format  D  dts             raw dts  DE dv              DV video format   E dvd             MPEG2 PS format (DVD VOB)  D  ea              Electronic Arts Multimedia Format  DE ffm             ffm format  D  film_cpk        Sega FILM/CPK format  D  flic            FLI/FLC/FLX animation format  DE flv             flv format   E framecrc        framecrc testing format  DE gif             GIF Animation  DE h261            raw h261  DE h263            raw h263  DE h264            raw H264 video format  D  idcin           Id CIN format  DE image           image sequence  DE image2          image2 sequence  DE image2pipe      piped image2 sequence  DE imagepipe       piped image sequence  D  ingenient       Ingenient MJPEG  D  ipmovie         Interplay MVE format  DE m4v             raw MPEG4 video format  D  matroska        Matroska file format  DE mjpeg           MJPEG video  D  mm              American Laser Games MM format  DE mmf             mmf format   E mov             mov format  D  mov,mp4,m4a,3gp,3g2,mj2 QuickTime/MPEG4/Motion JPEG 2000 format   E mp2             MPEG audio layer 2  DE mp3             MPEG audio layer 3   E mp4             mp4 format  DE mpeg            MPEG1 System format   E mpeg1video      MPEG video   E mpeg2video      MPEG2 video  DE mpegts          MPEG2 transport stream format  D  mpegvideo       MPEG video   E mpjpeg          Mime multipart JPEG format  DE mulaw           pcm mu law format  D  nsv             NullSoft Video format   E null            null video format  DE nut             nut format  D  nuv             NuppelVideo format  D  ogg             Ogg   E psp             psp mp4 format  D  psxstr          Sony Playstation STR format  DE rawvideo        raw video format  D  redir           Redirector format  DE rm              rm format   E rtp             RTP output format  D  rtsp            RTSP input format  DE s16be           pcm signed 16 bit big endian format  DE s16le           pcm signed 16 bit little endian format  DE s8              pcm signed 8 bit format  D  sdp             SDP  D  shn             raw shorten  D  smk             Smacker Video  D  sol             Sierra SOL Format   E svcd            MPEG2 PS format (VOB)  DE swf             Flash format  D  tta             true-audio  DE u16be           pcm unsigned 16 bit big endian format  DE u16le           pcm unsigned 16 bit little endian format  DE u8              pcm unsigned 8 bit format   E vcd             MPEG1 System format (VCD)  D  vmd             Sierra VMD format   E vob             MPEG2 PS format (VOB)  DE voc             Creative Voice File format  DE wav             wav format  D  wc3movie        Wing Commander III movie format  D  wsaud           Westwood Studios audio format  D  wsvqa           Westwood Studios VQA format  DE yuv4mpegpipe    YUV4MPEG pipe format  Image formats (filename extensions, if any, follow):  DE gif    gif  Codecs:  D V    4xm  D V D  8bps  DEA    aac  D V D  aasc  DEA    ac3  DEA    adpcm_4xm  DEA    adpcm_adx  DEA    adpcm_ct  DEA    adpcm_ea  DEA    adpcm_ima_dk3  DEA    adpcm_ima_dk4  DEA    adpcm_ima_qt  DEA    adpcm_ima_smjpeg  DEA    adpcm_ima_wav  DEA    adpcm_ima_ws  DEA    adpcm_ms  DEA    adpcm_sbpro_2  DEA    adpcm_sbpro_3  DEA    adpcm_sbpro_4  DEA    adpcm_swf  DEA    adpcm_xa  DEA    adpcm_yamaha  D A    alac  DEA    amr_nb  DEA    amr_wb  DEV D  asv1  DEV D  asv2  D V D  avs  D V    bmp  D V D  camstudio  D V D  camtasia  D V D  cinepak  D V D  cljr  D A    cook  D V D  cyuv  DES    dvbsub  DES    dvdsub  DEV D  dvvideo  DEV D  ffv1  DEVSD  ffvhuff  D A    flac  D V D  flic  DEVSD  flv  D V D  fraps  DEA    g726  DEV D  h261  DEVSDT h263  D VSD  h263i   EV    h263p  DEV DT h264  DEVSD  huffyuv  D V D  idcinvideo  D V D  indeo2  D V    indeo3  D A    interplay_dpcm  D V D  interplayvideo   EV    jpegls  D V    kmvc   EV    ljpeg  D V D  loco  D A    mace3  D A    mace6  D V D  mdec  DEV D  mjpeg  D V D  mjpegb  D V D  mmvideo  DEA    mp2  DEA    mp3  D A    mp3adu  D A    mp3on4  DEVSDT mpeg1video  DEVSDT mpeg2video  DEVSDT mpeg4  D A    mpeg4aac  D VSDT mpegvideo  DEVSD  msmpeg4  DEVSD  msmpeg4v1  DEVSD  msmpeg4v2  D V D  msrle  D V D  msvideo1  D V D  mszh  D V D  nuv  DEV    pam  DEV    pbm  DEA    pcm_alaw  DEA    pcm_mulaw  DEA    pcm_s16be  DEA    pcm_s16le  DEA    pcm_s24be  DEA    pcm_s24daud  DEA    pcm_s24le  DEA    pcm_s32be  DEA    pcm_s32le  DEA    pcm_s8  DEA    pcm_u16be  DEA    pcm_u16le  DEA    pcm_u24be  DEA    pcm_u24le  DEA    pcm_u32be  DEA    pcm_u32le  DEA    pcm_u8  DEV    pgm  DEV    pgmyuv  DEV    png  DEV    ppm  D A    qdm2  D V D  qdraw  D V D  qpeg  D V D  qtrle  DEV    rawvideo  D A    real_144  D A    real_288  D A    roq_dpcm  D V D  roqvideo  D V D  rpza  DEV D  rv10  DEV D  rv20  D A    shorten  D A    smackaud  D V    smackvid  D V D  smc  DEV    snow  D A    sol_dpcm  DEA    sonic   EA    sonicls  D V D  sp5x  DEV D  svq1  D VSD  svq3  D V    theora  D V D  truemotion1  D V D  truemotion2  D A    truespeech  D A    tta  D V D  ultimotion  D V    vc9  D V D  vcr1  D A    vmdaudio  D V D  vmdvideo  D A    vorbis  D V    vp3  D V D  vqavideo  D A    wmav1  D A    wmav2  DEVSD  wmv1  DEVSD  wmv2  D V D  wnv1  D A    ws_snd1  D A    xan_dpcm  D V D  xan_wc3  D V D  xl   EV    xvid  DEV D  zlib  D V    zmbv  Supported file protocols:  file: pipe: udp: rtp: tcp: http: Frame size, frame rate abbreviations:  ntsc pal qntsc qpal sntsc spal film ntsc-film sqcif qcif cif 4cif Motion estimation methods:  zero(fastest) full(slowest) log phods epzs(default) x1 hex umh iter  Note, the names of encoders and decoders dont always match, so there are several cases where the above table shows encoder only or decoder only entries even though both encoding and decoding are supported for example, the h263 decoder corresponds to the h263 and h263p encoders, for file formats its even worse 

What is wrong in my code? Thanks in advance

like image 339
TheNone Avatar asked May 20 '12 10:05

TheNone


2 Answers

ffmpeg is complaining about there being a missing %d in the filename because you've asked it to convert multiple frames.

This post suggests this would be a better way of using ffmpeg to extract single frames

ffmpeg -i n.wmv -ss 00:00:20 -t 00:00:1 -s 320×240 -r 1 -f singlejpeg myframe.jpg 

[edit]

After a bit more research, here is a command line which works outputing single png frames

ffmpeg -i test.avi -vcodec png -ss 10 -vframes 1 -an -f rawvideo test.png 

Tested on my ubuntu 12.04 laptop

like image 104
Nick Craig-Wood Avatar answered Nov 21 '22 10:11

Nick Craig-Wood


Easy way, use Open CV.

import cv2  vc = cv2.VideoCapture('Test.mp4') c=1  if vc.isOpened():     rval , frame = vc.read() else:     rval = False  while rval:     rval, frame = vc.read()     cv2.imwrite(str(c) + '.jpg',frame)     c = c + 1     cv2.waitKey(1) vc.release() 
like image 36
Ayub Khan Avatar answered Nov 21 '22 10:11

Ayub Khan