python调用系统ffmpeg实现视频截图、http发送

时间:2022-12-03 17:19:21

python 调用系统ffmpeg进行视频截图,并进行图片http发送ffmpeg ,视频、图片的各种处理。 

最近在做视频、图片的版权等深度学习识别,用到了ffmpeg部分功能,功能如下: 
调用ffmpeg 对不同目录视频进行截图,通过http发送到后台进行算法识别。 
每5分钟扫描最近的视频,生成图片,发送完毕图片删除。 

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""'定时任务每五分钟发送上一个5分钟视频
 目标视频:10.1.1.25 /usr/local/checkVideo  audited、auditing、black、white
 find
 """
import linecache
import os
import os.path
import requests
import time
import datetime
import sys
reload(sys)
sys.setdefaultencoding('utf8')
 
#openAPI现网配置
url='http://***/nudityRecog'
app_key = '***'
access_token = '***'
imagedir='/opt/tomcat_api/video_sendto_api/image/'
 
audited_dir='/usr/local/checkVideo/audited'
auditing_dir='/usr/local/checkVideo/auditing'
black_dir='/usr/local/checkVideo/black'
white_dir='/usr/local/checkVideo/white'
 
#时间差5分钟执行一次
subtime=300
 
#生成审核中截图
def create_auditing_image(auditing_dir):
 #扫描视频目录生成截图
 for parent, dirnames, filenames in os.walk(auditing_dir): # 三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
  for filename in filenames: # 输出文件信息
   video_path = os.path.join(parent, filename) # 输出文件路径信息
   filePath = unicode(video_path, 'utf8') #中文编码
   filetime= os.path.getmtime(filePath) #获取修改时间
   localtime=time.time() #获取当前系统时间
   t=localtime-filetime #两者差值
   #判断差值是否小于300s
   if t<=subtime:
    print t,filePath
    filename=unicode(filename, 'utf8') #下载视频名称
    #生成视频md5
    str_md5= 'md5sum'+' ' + filePath +' '+ "| awk '{print $1}'"
    video_md5 = os.popen(str_md5).readline(32)
    print filePath,video_md5
    #拼接截图命令行,
    str_video= "ffmpeg -ss 0:1:00 -i "+" " +filePath + " "+"-r 0.01 -f image2 "+imagedir+video_md5+"-image-%5d.jpeg"
    images = os.popen(str_video) # 调用命令行生成截图
    print str_video
 
#生成审核完截图
def create_audited_image(audited_dir):
 #扫描视频目录生成截图
 for parent, dirnames, filenames in os.walk(audited_dir): # 三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
  for filename in filenames: # 输出文件信息
   video_path = os.path.join(parent, filename) # 输出文件路径信息
   filePath = unicode(video_path, 'utf8') #中文编码
   filetime= os.path.getmtime(filePath) #获取修改时间
   localtime=time.time() #获取当前系统时间
   t=localtime-filetime #两者差值
   #判断差值是否小于300s
   if t<=subtime:
    print t,filePath
    filename=unicode(filename, 'utf8') #下载视频名称
    #生成视频md5
    str_md5= 'md5sum'+' ' + filePath +' '+ "| awk '{print $1}'"
    video_md5 = os.popen(str_md5).readline(32)
    #拼接命令行,
    str_video= "ffmpeg -ss 0:1:00 -i "+" " +filePath + " "+"-r 0.01 -f image2 "+imagedir+video_md5+"-image-%5d.jpeg"
    images = os.popen(str_video) # 调用命令行生成截图
    print str_video
 
#生成黑名单截图
def create_black_image(black_dir):
 #扫描视频目录生成截图
 for parent, dirnames, filenames in os.walk(black_dir): # 三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
  for filename in filenames: # 输出文件信息
   video_path = os.path.join(parent, filename) # 输出文件路径信息
   filePath = unicode(video_path, 'utf8') #中文编码
   filetime= os.path.getmtime(filePath) #获取修改时间
   localtime=time.time() #获取当前系统时间
   t=localtime-filetime #两者差值
   #判断差值是否小于300s
   if t<=subtime:
    print t,filePath
    filename=unicode(filename, 'utf8') #下载视频名称
    #生成视频md5
    str_md5= 'md5sum'+' ' + filePath +' '+ "| awk '{print $1}'"
    video_md5 = os.popen(str_md5).readline(32)
    #拼接命令行,
    str_video= "ffmpeg -ss 0:1:00 -i "+" " +filePath + " "+"-r 0.01 -f image2 "+imagedir+video_md5+"-image-%5d.jpeg"
    images = os.popen(str_video) # 调用命令行生成截图
    print str_video
 
 
#生成白名单截图
def create_white_image(white_dir):
 #扫描视频目录生成截图
 for parent, dirnames, filenames in os.walk(white_dir): # 三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
  for filename in filenames: # 输出文件信息
   video_path = os.path.join(parent, filename) # 输出文件路径信息
   filePath = unicode(video_path, 'utf8') #中文编码
   filetime= os.path.getmtime(filePath) #获取修改时间
   localtime=time.time() #获取当前系统时间
   t=localtime-filetime #两者差值
   #判断差值是否小于300s
   if t<=subtime:
    print t,filePath
    filename=unicode(filename, 'utf8') #下载视频名称
    #生成视频md5
    str_md5= 'md5sum'+' ' + filePath +' '+ "| awk '{print $1}'"
    video_md5 = os.popen(str_md5).readline(32)
    #拼接命令行,
    str_video= "ffmpeg -ss 0:1:00 -i "+" " +filePath + " "+"-r 0.01 -f image2 "+imagedir+video_md5+"-image-%5d.jpeg"
    images = os.popen(str_video) # 调用命令行生成截图
    print str_video
#发送图片进程
def send_image(imagedir):
 #扫描图片路径
 for img_parent, img_dir_names, img_names in os.walk(imagedir):
  for img_name in img_names:
   image = os.path.join(img_parent, img_name) #拼接图片完整路径
   print time.strftime("%Y-%m-%d %X"), image
   #准备发送图片
   file = dict(file=open(image, 'rb'))
   post_data = {'mark': 'room-201', 'timestamp': 1846123456, 'random': 123}
   headers = {'app_key': app_key, 'access_token': access_token}
   result = requests.post(url, files=file, data=post_data, headers=headers, verify=False)
   print result.content
   #删除发送的图片
   str_img = "rm -f " + " " + image
   del_img = os.popen(str_img).readline()
   print del_img
 
if __name__ == "__main__":
 #create_auditing_image(auditing_dir)
 #create_audited_image(audited_dir)
 #create_black_image(black_dir)
 #create_white_image(white_dir)
 send_image(imagedir)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://blog.csdn.net/meiguopai1/article/details/78412015