Извлечение видеофрагментов в Python

Я хочу извлечь видеокадры и сохранить их в качестве изображения.

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

Но у меня есть эта ошибка:

 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' 

Изменить: 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: DV 4xm DVD 8bps DEA aac DVD 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 DA alac DEA amr_nb DEA amr_wb DEV D asv1 DEV D asv2 DVD avs DV bmp DVD camstudio DVD camtasia DVD cinepak DVD cljr DA cook DVD cyuv DES dvbsub DES dvdsub DEV D dvvideo DEV D ffv1 DEVSD ffvhuff DA flac DVD flic DEVSD flv DVD fraps DEA g726 DEV D h261 DEVSDT h263 D VSD h263i EV h263p DEV DT h264 DEVSD huffyuv DVD idcinvideo DVD indeo2 DV indeo3 DA interplay_dpcm DVD interplayvideo EV jpegls DV kmvc EV ljpeg DVD loco DA mace3 DA mace6 DVD mdec DEV D mjpeg DVD mjpegb DVD mmvideo DEA mp2 DEA mp3 DA mp3adu DA mp3on4 DEVSDT mpeg1video DEVSDT mpeg2video DEVSDT mpeg4 DA mpeg4aac D VSDT mpegvideo DEVSD msmpeg4 DEVSD msmpeg4v1 DEVSD msmpeg4v2 DVD msrle DVD msvideo1 DVD mszh DVD 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 DA qdm2 DVD qdraw DVD qpeg DVD qtrle DEV rawvideo DA real_144 DA real_288 DA roq_dpcm DVD roqvideo DVD rpza DEV D rv10 DEV D rv20 DA shorten DA smackaud DV smackvid DVD smc DEV snow DA sol_dpcm DEA sonic EA sonicls DVD sp5x DEV D svq1 D VSD svq3 DV theora DVD truemotion1 DVD truemotion2 DA truespeech DA tta DVD ultimotion DV vc9 DVD vcr1 DA vmdaudio DVD vmdvideo DA vorbis DV vp3 DVD vqavideo DA wmav1 DA wmav2 DEVSD wmv1 DEVSD wmv2 DVD wnv1 DA ws_snd1 DA xan_dpcm DVD xan_wc3 DVD xl EV xvid DEV D zlib DV 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 

Что не так в моем коде? заранее спасибо

  • Преобразовать \ r текст в \ n, так что readlines () работает по назначению
  • Как установить таймаут для отправки электронной почты с помощью django?
  • Вращение изображения с ориентацией, указанной в EXIF, с использованием Python без PIL, включая миниатюру
  • numpy.array boolean to binary?
  • использовать slugify в шаблоне
  • Передача нескольких аргументов для применения (Python)
  • Почему эта документация API django-rest-swagger API не будет отображаться / работать правильно?
  • Прямая загрузка в S3 с помощью Python / Boto / Django для создания политики
  • 5 Solutions collect form web for “Извлечение видеофрагментов в Python”

    ffmpeg жалуется на отсутствие недостающего %d в имени файла, потому что вы попросили его преобразовать несколько кадров.

    Это сообщение предполагает, что это лучший способ использования ffmpeg для извлечения отдельных кадров

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

    [ править ]

    После немного большего количества исследований , это командная строка, которая работает с выводами одиночных png-кадров

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

    Протестировано на моем ноутбуке ubuntu 12.04

    Простой способ, используйте 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() 

    Доступны модули ffmpeg python

    ffmpeg: https://code.google.com/p/pyffmpeg/

    pyAV: https://github.com/mikeboers/PyAV

     import av container = av.open('/path/to/video.mp4') for packet in container.demux(): for frame in packet.decode(): if frame.type == 'video': frame.to_image().save('/path/to/frame-%04d.jpg' % frame.index) 

    Ваш ffmpeg не поддерживает формат файла PNG. Вместо этого вы должны использовать jpg или gif. Также следуйте за этим сообщением (сначала опубликовано «вчера»).

     import numpy as np import cv2 capture = cv2.VideoCapture(0) size = (int(capture.get(3)),int(capture.get(4))) fourcc = cv2.VideoWriter_fourcc(*'XVID') video = cv2.VideoWriter('output.avi',fourcc,30,size) print capture.isOpened() num=0 while True: ret, img = capture.read() video.write(img) cv2.imshow('video',img) cv2.imwrite("image" + str(num) + ".jpg",img) num = num + 1 key= cv2.waitKey(1) if key == ord('q') num=0 break video.release() capture.release() cv2.destroyAllWindows() 
    Python - лучший язык программирования в мире.