File size: 3,163 Bytes
054c36d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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')