florence-sam-tencent / split_videos.py
supersolar's picture
Upload 3 files
054c36d verified
import os
from moviepy.editor import VideoFileClip, concatenate_audioclips
import os
# 设置环境变量
os.environ['CUDA_VISIBLE_DEVICES'] = '1'
import subprocess
def install_tensorflow():
try:
# 使用 subprocess.run 执行 pip install 命令
result = subprocess.run(['pip', 'install', 'tensorflow'], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print("安装成功")
print("输出:", result.stdout.decode('utf-8'))
except subprocess.CalledProcessError as e:
print("安装失败")
print("错误:", e.stderr.decode('utf-8'))
# 调用函数
install_tensorflow()
import shutil
import os
import sys
from moviepy.editor import *
from transnetv2 import TransNetV2
import shutil
import pickle
import json
import pickle
os.chdir("/workspace/transvnet")
sys.path.append('/workspace/transvnet')
import os
from moviepy.editor import VideoFileClip
import pickle
import time
os.makedirs('/workspace/transvnet/o_videos', exist_ok=True)
# @title 分割剪辑视频的代码
def check_scenes(video_name):
scenes_dir = '/workspace/transvnet/scenes'
if not os.path.exists(scenes_dir):
os.makedirs(scenes_dir)
print("创建目录 %s 成功" % scenes_dir)
else:
print("目录 %s 已存在" % scenes_dir)
if os.path.exists(os.path.join(scenes_dir, video_name)):
print("文件scenes %s 已存在直接使用" % video_name)
with open(os.path.join(scenes_dir, video_name), 'rb') as f:
scenes = pickle.load(f)
return scenes
else:
return False
def change_video_speed(video_path, output_folder):
video_name = os.path.basename(video_path)
video_folder = os.path.dirname(video_path)
scenes = check_scenes(video_name)
if scenes is not False:
print("场景检测之前已完成")
else:
print("场景检测开始")
model = TransNetV2()
video_frames, single_frame_predictions, all_frame_predictions = model.predict_video_2(video_path)
scenes = model.predictions_to_scenes(single_frame_predictions)
scenes_dir = '/workspace/transvnet/scenes'
with open(os.path.join(scenes_dir, video_name), 'wb') as f:
pickle.dump(scenes, f)
print(scenes)
video_clip2 = VideoFileClip(video_path)
split_time = scenes
n = 1
for i in split_time:
#time.sleep(1)
start = i[0]
end = i[1]
start_time = start / video_clip2.fps
end_time = end / video_clip2.fps
segment_clip = video_clip2.subclip(start_time, end_time)
#output_video_name = f"{os.path.splitext(video_name)[0]}_{n}{os.path.splitext(video_name)[1]}"
output_video_name = f"{n}{os.path.splitext(video_name)[1]}"
output_video_path = os.path.join(output_folder, output_video_name)
#segment_clip.write_videofile(output_video_path, fps=video_clip2.fps)
segment_clip.write_videofile(output_video_path, fps=int(video_clip2.fps), codec='libx264', audio_codec='aac')
n += 1
change_video_speed('/workspace/马龙VS林诗栋,仿佛看到了2017年的大战.mp4', '/workspace/transvnet/o_videos')