CV的视频处理之路-python+ffmpeg的使用

获取视频长度:

def getLength(input_video):
    cmd = 'ffprobe -i %s -show_entries format=duration -v quiet -of csv="p=0"' % input_video
    output =os.popen(cmd,'r')
    output = output.read()
    return output

 ffmpeg 剪切视频片段:

def cut_video(input,output,start,end):
	tlong=end-start
	cmd = 'ffmpeg -y -ss {} -t {} -accurate_seek -i {} -codec copy -avoid_negative_ts 1 {} '.format(start,tlong,input,output)
	subprocess.call(cmd, shell=True)

 Notes:-y 默认视频重写

基本剪切方式 ' ffmpeg -i test.mp4 -ss 10 -t 15 -codec copy cut.mp4 '

-i : source
-ss:start time
-t :duration
-c :video,audio codec

剪切后的视频,

1)剪切时间点不精确
2)剪切的视频有黑屏

参数优化方式

(1) 将-ss, -t 参数放在-i参数之前

'ffmpeg  -ss {} -t {} -i {input} -codec copy {output} '

(2)-accurate_seek  剪切时间更加精确

accurate_seek必须放在-i参数之前

(3)avoid_negative_ts 寻找结尾时关键帧进行补全
如果编码格式采用的copy 最好加上 -avoid_negative_ts 1参数

加上该参数可能会出现一个问题,会直接从头截到ss+t的时刻。

替代精准剪切方式2:

def cut_video(input,output,start,end):
	tlong=end-start
	#cmd = 'ffmpeg -y -ss {} -t {} -accurate_seek -i {} -codec copy -avoid_negative_ts 1 {} '.format(start,tlong,input,output)
	cmd = 'ffmpeg -y -ss {} -t {} -accurate_seek -i {} -async 1 -strict -2 {} '.format(start,tlong,input,output)
	subprocess.call(cmd, shell=True)

 

转换视频

ubuntu无法打开mpeg 的.mp4视频,在处理这些视频重新对视频进行编码

cmd = "ffmpeg -y -i {} -r 30 {}".format(invideo, outvideo)

这里invideo outvideo必须是绝对路径。如果是os.path.join(dir,vname)则会无法找到输出路径。

图片合成视频且不丢帧

ffmpeg -start_number 178 -i 2testnp/%d.jpeg -b:v 5626k -framerate 40 -vcodec mpeg4 2testnp.mp4

 

参考文献

https://blog.csdn.net/matrix_laboratory/article/details/53157383

python中使用ffmpeg进行视频指定时长截断(解决剪切后音视频不同步的问题)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值