#todo:将工作目录内所有视频统一【截取片头片尾】!!
import os
import subprocess
def trim_video(input_path, output_path):
# 使用ffprobe获取视频时长
duration = float(subprocess.check_output(['ffprobe', '-i', input_path, '-show_entries', 'format=duration', '-v', 'quiet', '-of', 'csv=p=0']))
# todo 计算截取的结束时间点
end_time = duration - 97
# 使用ffmpeg截取视频,不写-ss就不会卡帧!!
cmd = 'ffmpeg -i "{}" -vcodec copy -acodec copy -to {} "{}" -y'.format(input_path, end_time, output_path)
# cmd = 'ffmpeg -i "{}" -vcodec copy -acodec copy -ss 00:00:00:00 -to {} "{}" -y'.format(input_path, end_time, output_path)
subprocess.call(cmd, shell=True)
def batch_trim_videos(input_dir):
# 指定输出目录
output_dir = os.path.join(input_dir, "output")
# 确保输出目录存在
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 遍历指定目录下的所有.mp4文件
for root, dirs, files in os.walk(input_dir):
for file in files:
if file.endswith(".mp4"):
input_path = os.path.join(root, file)
output_path = os.path.join(output_dir, file)
# 调用trim_video函数截取视频
trim_video(input_path, output_path)
# 指定输入目录
input_directory = r"Your/working/directory"
# 执行批量截取视频
batch_trim_videos(input_directory, output_directory)
注意!如果只删除片尾的话最好不要加上-ss,否则容易造成画面前几帧丢失。
删除片头则用下面这行代码即可,00:00:00改成对应的时间
# 只截取片尾的话,不要写-ss(否则会卡帧!!
cmd = 'ffmpeg -i "{}" -vcodec copy -acodec copy -to {} "{}" -y'.format(input_path, end_time, output_path)
# 截取片头的话,前面的-ss 后面填上开头的时间
cmd = 'ffmpeg -i "{}" -vcodec copy -acodec copy -ss 00:00:00 -to {} "{}" -y'.format(input_path, end_time, output_path)
片尾的截取是以倒计时的方案完成的,97的意思是末尾1分37秒的内容截去~ 记得改成自己电视剧的片尾长度蛤
end_time = duration - 97