DeepMosaics / util /ffmpeg.py
Riz0030's picture
Upload 77 files
9d0b4d9 verified
import os,json
import subprocess
# ffmpeg 3.4.6
def args2cmd(args):
cmd = ''
for arg in args:
cmd += (arg+' ')
return cmd
def run(args,mode = 0):
if mode == 0:
cmd = args2cmd(args)
os.system(cmd)
elif mode == 1:
'''
out_string = os.popen(cmd_str).read()
For chinese path in Windows
https://blog.csdn.net/weixin_43903378/article/details/91979025
'''
cmd = args2cmd(args)
stream = os.popen(cmd)._stream
sout = stream.buffer.read().decode(encoding='utf-8')
return sout
elif mode == 2:
cmd = args2cmd(args)
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
sout = p.stdout.readlines()
return sout
def video2image(videopath, imagepath, fps=0, start_time='00:00:00', last_time='00:00:00'):
args = ['ffmpeg']
if last_time != '00:00:00':
args += ['-ss', start_time]
args += ['-t', last_time]
args += ['-i', '"'+videopath+'"']
if fps != 0:
args += ['-r', str(fps)]
args += ['-f', 'image2','-q:v','-0',imagepath]
run(args)
def video2voice(videopath, voicepath, start_time='00:00:00', last_time='00:00:00'):
args = ['ffmpeg', '-i', '"'+videopath+'"','-async 1 -f mp3','-b:a 320k']
if last_time != '00:00:00':
args += ['-ss', start_time]
args += ['-t', last_time]
args += [voicepath]
run(args)
def image2video(fps,imagepath,voicepath,videopath):
os.system('ffmpeg -y -r '+str(fps)+' -i '+imagepath+' -vcodec libx264 '+os.path.split(voicepath)[0]+'/video_tmp.mp4')
if os.path.exists(voicepath):
os.system('ffmpeg -i '+os.path.split(voicepath)[0]+'/video_tmp.mp4'+' -i "'+voicepath+'" -vcodec copy -acodec aac '+videopath)
else:
os.system('ffmpeg -i '+os.path.split(voicepath)[0]+'/video_tmp.mp4 '+videopath)
def get_video_infos(videopath):
args = ['ffprobe -v quiet -print_format json -show_format -show_streams', '-i', '"'+videopath+'"']
out_string = run(args,mode=1)
infos = json.loads(out_string)
try:
fps = eval(infos['streams'][0]['avg_frame_rate'])
endtime = float(infos['format']['duration'])
width = int(infos['streams'][0]['width'])
height = int(infos['streams'][0]['height'])
except Exception as e:
fps = eval(infos['streams'][1]['r_frame_rate'])
endtime = float(infos['format']['duration'])
width = int(infos['streams'][1]['width'])
height = int(infos['streams'][1]['height'])
return fps,endtime,height,width
def cut_video(in_path,start_time,last_time,out_path,vcodec='h265'):
if vcodec == 'copy':
os.system('ffmpeg -ss '+start_time+' -t '+last_time+' -i "'+in_path+'" -vcodec copy -acodec copy '+out_path)
elif vcodec == 'h264':
os.system('ffmpeg -ss '+start_time+' -t '+last_time+' -i "'+in_path+'" -vcodec libx264 -b 12M '+out_path)
elif vcodec == 'h265':
os.system('ffmpeg -ss '+start_time+' -t '+last_time+' -i "'+in_path+'" -vcodec libx265 -b 12M '+out_path)
def continuous_screenshot(videopath,savedir,fps):
'''
videopath: input video path
savedir: images will save here
fps: save how many images per second
'''
videoname = os.path.splitext(os.path.basename(videopath))[0]
os.system('ffmpeg -i "'+videopath+'" -vf fps='+str(fps)+' -q:v -0 '+savedir+'/'+videoname+'_%06d.jpg')