python+ffmpeg按相等时间分割视频
2012-05-24 11:00
399 查看
参数设置:
e 启用分割
d 分隔时间长度(分钟)
-j 生成批量文件的前缀,有的情况下有用。
OptionParser的用法参看我前面的文章
遍历文件:
判断参数是要求分割
获取文件时间长度,用作分割参考
计算文件后缀长度 9个文件后缀长度1 :0 1 2 ……;10-99文件后缀长度2:11,12,……
循环生成命令,分割文件,用的是ffmpeg的 ss和t参数分割,-codec: copy 参数说明不重新编码,直接复制视频音频
方便啊
parser.add_option("-e", "--split", dest="split",action="store_true",help="split to multiple file with size") parser.add_option("-d", "--splitsize", dest="splitsize",action="store",help="split to multiple file with size",default="5")#Minutes parser.add_option("-j", "--prefix", dest="prefix",action="store",help="target file name prefix",default="")
e 启用分割
d 分隔时间长度(分钟)
-j 生成批量文件的前缀,有的情况下有用。
OptionParser的用法参看我前面的文章
遍历文件:
for name in os.listdir(options.srcD): if os.path.isfile(os.path.join(options.srcD, name)):
判断参数是要求分割
if options.split==True:#定义了拆分文件为小文件,就不接受其他参数,进行转换
获取文件时间长度,用作分割参考
(si, so, se) = os.popen3('cd '+options.workdir+';mkdir -p ffm; rm -f ffm/ffm.txt ; csh -c "(ffmpeg -i '+options.srcD+'/' +name+ ' >& ffm/ffm.txt)"; grep Duration ffm/ffm.txt') t=so.readlines() reg='''Duration\:\s(\d+)\:(\d+)\:([\d\.]+)''' duration=0#second for line in t: result = re.compile(reg).findall(line) for c in result: print 'split file to',options.splitsize,'minutes, Duration:',c[0],c[1],c[2] duration = int(c[0])*3600 + int(c[1])*60+float(c[2])
计算文件后缀长度 9个文件后缀长度1 :0 1 2 ……;10-99文件后缀长度2:11,12,……
nameLength=int(math.log(int(duration / (int(options.splitsize)*60)) )/math.log(10)) + 1#系列文件名长度
循环生成命令,分割文件,用的是ffmpeg的 ss和t参数分割,-codec: copy 参数说明不重新编码,直接复制视频音频
for i in range(int(duration / (int(options.splitsize)*60)) + 1): _t = '' if duration>int(options.splitsize)*60*(i+1): _t = str(int(options.splitsize)*60) else: _t = str(duration-int(options.splitsize)*60*i) cmd ='csh -c "' + "cd "+options.workdir+";touch ffm/output.log;(ffmpeg -y -i " +options.srcD+"/"+name+" -codec: copy -ss "+str(i*int(options.splitsize)*60)+" -t "+_t +" -threads "+options.threads+" "+options.targetD+"/"+options.prefix+newname +'_'+string.replace(('%'+str(nameLength)+'s')%str(i),' ','0') +"."+options.fileType + ' >>& ffm/output.log)"' print cmd (si, so, se) = os.popen3(cmd) for line in se.readlines() :#打印输出 print line for line in so.readlines() :#打印输出 print line
方便啊
相关文章推荐
- python Dataframe pandas 将数据分割成时间跨度相等的数据块
- [置顶] C++编程音视频库ffmpeg的pts时间换算方法
- 使用ffmpeg 命令分割视频方法
- ffmpeg转码,输入视频帧率与输出帧率不相等时,出现丢帧问题
- python opencv 读取本地视频文件 修改 ffmpeg
- ffmpeg使用filter生成H264测试视频(带时间戳OSD)
- 通过 ffmpeg 获取视频第一帧(指定时间)图片
- C++编程音视频库ffmpeg的pts时间怎么换算
- ffmpeg 获得视频时间总长度
- 通过 ffmpeg 获取视频第一帧(指定时间)图片
- 转载:ffmpeg 音视频合成分割
- 使用ffmpeg处理 视频文件中帧间时间戳异常、关键帧间隔异常
- 利用Ffmpeg获得flv视频缩略图和视频时间的代码
- ffmpeg 音视频合成分割
- python 使用opencv 把视频 分割成图片
- 几种获取音视频播放时间长度的方法( shell32, WMP, ffmpeg )
- ffmpeg分割视频文件
- 利用FFMPEG进行视频分割
- 用Python和FFmpeg查找大码率的视频文件
- Python 视频文件的分割和合并