在 Python 中提取视频帧 [英] Extract Video Frames In Python
本文介绍了在 Python 中提取视频帧的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想提取视频帧并将它们保存为图像.
import os, sys从 PIL 导入图像a, b, c = os.popen3("ffmpeg -i test.avi")out = c.read()dp = out.index("持续时间:")持续时间 = 输出[dp+10:dp+out[dp:].index(",")]hh, mm, ss = map(float, duration.split(":"))总计 = (hh*60 + mm)*60 + ss对于 xrange(9) 中的 i:t = (i + 1) * 总数/10os.system("ffmpeg -i test.avi -ss %0.3fs frame%i.png" % (t, i))
但是我有这个错误:
FFmpeg 版本 CVS,版权所有 (c) 2000-2004 Fabrice BellardffmpegX 的 Mac OSX 通用构建配置: --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-x264libavutil 版本:49.0.0libavcodec 版本:51.9.0libavformat 版本:50.4.0构建于 2006 年 4 月 15 日 04:58:19,gcc:4.0.1(Apple Computer, Inc. build 5250)输入 #0,avi,来自 'test.avi':持续时间:00:00:30.5,开始:0.000000,比特率:465 kb/s流 #0.0, 25.00 fps(r): 视频: mpeg4, yuv420p, 640x480流 #0.1:音频:mp3,32000 Hz,单声道,32 kb/s无法为frame0.png"找到合适的输出格式
ffmpeg -formats
FFmpeg 版本 CVS,版权所有 (c) 2000-2004 Fabrice BellardffmpegX 的 Mac OSX 通用构建配置: --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-x264libavutil 版本:49.0.0libavcodec 版本:51.9.0libavformat 版本:50.4.0构建于 2006 年 4 月 15 日 04:58:19,gcc:4.0.1(Apple Computer, Inc. build 5250)文件格式:E 3g2 3gp2 格式E 3gp 3gp 格式D 4xm 4X 技术格式D RoQ Id RoQ 格式DAC ADTS AACDE ac3 原始 ac3电子广告 ADTS AACDE aiff 音频 IFFDE alaw pcm 一种法律格式DE amr 3gpp amr 文件格式DE asf asf 格式E asf_stream asf 格式DE au SUN AU 格式DE avi avi 格式D avs avs 格式e crc crc测试格式D daud D-Cinema 音频格式D dts 原始 dtsDE dv DV 视频格式E DVD MPEG2 PS 格式 (DVD VOB)电子艺界多媒体格式DE ffm ffm 格式D film_cpk 世嘉 FILM/CPK 格式D flic FLI/FLC/FLX 动画格式DE flv flv 格式E framecrc framecrc测试格式DE gif GIF 动画DE h261 生 h261DE h263 原始 h263DE h264 原始 H264 视频格式D idcin Id CIN 格式DE图像图像序列DE image2 image2 序列DE image2pipe 管道图像2序列DE imagepipe 管道图像序列D ingenient Ingenient MJPEGD ipmovie Interplay MVE 格式DE m4v 原始 MPEG4 视频格式D matroska Matroska 文件格式DE mjpeg MJPEG 视频D mm 美国激光游戏 MM 格式DE mmf mmf 格式E mov mov 格式D mov,mp4,m4a,3gp,3g2,mj2 QuickTime/MPEG4/Motion JPEG 2000 格式E mp2 MPEG 音频第 2 层DE mp3 MPEG 音频第 3 层E mp4 mp4 格式DE mpeg MPEG1 系统格式E mpeg1video MPEG 视频E mpeg2video MPEG2 视频DE mpegts MPEG2 传输流格式D mpegvideo MPEG 视频E mpjpeg Mime 多部分 JPEG 格式DE mulaw pcm mu 律格式D nsv NullSoft 视频格式E 空空视频格式DE 螺母螺母格式D nuv Nuppel 视频格式多格奥格E psp psp mp4 格式D psxstr Sony Playstation STR 格式DE rawvideo 原始视频格式D redir 重定向器格式DE rm rm 格式E rtp RTP 输出格式D rtsp RTSP 输入格式DE s16be pcm 有符号 16 位大端格式DE s16le pcm 有符号 16 位小端格式DE s8 pcm 有符号 8 位格式D SDP SDPD shn 原料缩短D smk Smacker 视频D sol Sierra SOL 格式E svcd MPEG2 PS 格式 (VOB)DE swf Flash 格式D tta 真音频DE u16be pcm 无符号 16 位大端格式DE u16le pcm 无符号 16 位小端格式DE u8 pcm 无符号 8 位格式E vcd MPEG1 系统格式 (VCD)D vmd Sierra VMD 格式E vob MPEG2 PS 格式 (VOB)DE voc 创意语音文件格式DE wav wav 格式D wc3movie Wing Commander III 电影格式D wsaud Westwood Studios 音频格式D wsvqa Westwood Studios VQA 格式DE yuv4mpegpipe YUV4MPEG 管道格式图像格式(文件扩展名,如果有,请遵循):德 gif gif编解码器:DV 4xmD V D 8bpsDEA AACD V D aascDEA ac3DEA adpcm_4xmDEA adpcm_adxDEA adpcm_ctDEA adpcm_eaDEA adpcm_ima_dk3DEA adpcm_ima_dk4DEA adpcm_ima_qtDEA adpcm_ima_smjpegDEA adpcm_ima_wavDEA adpcm_ima_wsDEA adpcm_msDEA adpcm_sbpro_2DEA adpcm_sbpro_3DEA adpcm_sbpro_4DEA adpcm_swfDEA adpcm_xaDEA adpcm_yamaha阿拉克DEA amr_nbDEA amr_wbDEV D asv1DEV D asv2D V D AVDV bmpD V D camstudioD V D camtasiaD V D 电影D V D cljrD 一个厨师D V D cyuvDES dvbsubDES 影碟机DEV D dvvideo开发者 D ffv1DEVSD ffvhuffD A flacD V D 电影开发板D V D frapsDEA g726DEV D h261DEVSDT h263D VSD h263i电动车 h263pDEV DT h264DEVSD huffyuvD V D idcin视频D V D indeo2DV indeo3D A interplay_dpcmD V D 互动视频EV JPEGDVkmvcEV lpegD V D 机车D 狼牙棒3D 狼牙棒6D V D mdecDEV D mjpegD V D mjpegbD V D 毫米视频DEA mp2迪奥 mp3D A mp3aduD A mp3on4DEVSDT mpeg1videoDEVSDT mpeg2videoDEVSDT mpeg4D 一个 mpeg4aacD VSDT mpegvideoDEVSD msmpeg4DEVSD msmpeg4v1DEVSD msmpeg4v2D V D msrleD V D msvideo1D V D mszhD V D nuv开发包开发板DEA pcm_alawDEA pcm_mulawDEA pcm_s16beDEA pcm_s16leDEA pcm_s24beDEA pcm_s24daudDEA pcm_s24leDEA pcm_s32beDEA pcm_s32leDEA pcm_s8DEA pcm_u16beDEA pcm_u16leDEA pcm_u24beDEA pcm_u24leDEA pcm_u32beDEA pcm_u32leDEA pcm_u8开发程序开发人员开发 PNGDEV ppmD A qdm2D V D qdrawD V D qpegD V D Qtrle开发者原始视频D A real_144D A real_288D A roq_dpcmD V D roqvideoD V D rpza开发者 RV10DEV RV20D A 缩短D A smackaudD V smackvidD V D smcDEV雪D A sol_dpcmDEA 声波EA超音速D V D sp5xDEV D SVQ1D VSD SVQ3DV理论D V D truemotion1D V D truemotion2D 真话达塔D V DultimotionDV vc9D V D VCR1D A vmdaudioD V D vmdvideoD A vorbisDV vp3D V D vqavideoD A wmav1D A wmav2DEVSD wmv1DEVSD wmv2D V D wnv1D A ws_snd1D A xan_dpcmD V D xan_wc3D V D xl电动车 xvidDEV D zlibDV zmbv支持的文件协议:文件:管道:udp:rtp:tcp:http:帧大小、帧率缩写:ntsc pal qntsc qpal sntsc spal 薄膜 ntsc-film sqcif qcif cif 4cif运动估计方法:零(最快)满(最慢)日志 phods epzs(默认)x1 hex umh iter注意,编码器和解码器的名称并不总是匹配,所以有上表仅显示编码器或仅解码器条目的几种情况即使同时支持编码和解码,例如,h263解码器对应于 h263 和 h263p 编码器,对于文件格式,其偶数更差
我的代码有什么问题?提前致谢
解决方案
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 笔记本电脑上测试
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
解决方案
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
这篇关于在 Python 中提取视频帧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文