需要自己得到视频的片头和片尾时长;并且设置好视频文件的名称。
关于ffmpeg的配置及 *** 作可看ffmpeg配置环境和测试,ffmpeg的基本使用,python *** 作ffmpeg
import os
import time
import subprocess
# 按创建文件的时间顺序重命名文件,文件夹内文件要有.后缀
def renameFiles(dirPath):
list = []
# 获得文件名列表
files = os.listdir(dirPath)
# 获得名称带时间戳的新文件名列表
for filename in files:
# 获得文件的最后修改时间
# createTime = os.path.getmtime(dirPath + filename)
# 获得文件创建时间
createTime = os.path.getctime(dirPath + filename)
# 将最后修改时间戳作为文件名的前缀,得到新的文件名,加入列表
list.append(str(int(createTime)) + '-' + filename)
# 重新给列表排序,这次所有文件按创建时间排序了
list = sorted(list)
# 遍历创建时间戳为序号
for i in range(len(list)):
# 获得原先的文件名
# print(list[i]) # 1614387291-01.jpg
oldName = list[i].split('-')[1]
# 获取文件后缀
suffix = list[i].split('.')[1]
newName = '0' + str(i + 1) + '.' + suffix
print(oldName,'-->',newName)
# 重命名文件
os.rename(dirPath + oldName, dirPath + newName)
# 获取视频时长
def get_video_duration(video_path: str):
ext = os.path.splitext(video_path)[-1]
if ext != '.mp4' and ext != '.avi' and ext != '.flv':
raise Exception('format not support')
ffprobe_cmd = 'ffprobe -i {} -show_entries format=duration -v quiet -of csv="p=0"'
p = subprocess.Popen(
ffprobe_cmd.format(video_path),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True)
out, err = p.communicate()
duration_info = float(str(out, 'utf-8').strip())
return int(duration_info)
# 删除文件
def delete_av(path):
if os.path.exists(path):
os.remove(path)
print('yes')
else:
print("The file does not exist")
# 将视频切割
def video_cut(i,ss,t):
cmd = "ffmpeg -ss " + f'{ss}' + " -t " + f'{t}' + " -accurate_seek -i F:\大明王朝1566\0" + \
f'{i}' + ".mp4 -codec copy -avoid_negative_ts 1 F:\大明王朝1566\" + f'{i}' + ".mp4"
re = os.system(cmd)
time.sleep(1)
if re == 0:
print('成功')
else:
print('失败!!!!!!!!!!!!!!!!!!')
# 将mp4转换为ts文件,可不用
def mp4_ts(i):
cmd = "ffmpeg -i C:\video\" + f'{i}' + ".mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb C:\video\" + f'{i}' + ".ts"
re = os.system(cmd)
time.sleep(1)
if re == 0:
print('转换成功')
else:
print('转换失败!!!!!!!!!!!!!!!!!!')
# mp4或ts文件合并为一个mp4文件
def mp4():
cmd = "ffmpeg -f concat -i F:\大明王朝1566\list.txt -c copy C:\video\output.mp4"
re = os.system(cmd)
time.sleep(1)
if re == 0:
print('合并成功')
else:
print('合并失败!!!!!!!!!!!!!!!!!!')
if __name__ == '__main__':
# renameFiles("H:\图片\wpcache\srvsetwp\")
for index in range(1,47):
path = 'F:\大明王朝1566\0'+ f'{index}' +'.mp4'
# t = get_video_duration(path) - (片头时长+片尾)+ 2
t = get_video_duration(path) - 308 # 减去片头和片尾 + 2s
# 参数:视频文件名,开始剪切时间(s),剪切的时间长度
video_cut(index,90,t)
# delete_av('F:\大明王朝1566\0'+ f'{index}' +'.mp4')
print('over')
time.sleep(2)
# mp4()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)