1
+ import os
2
+ import shutil
3
+ from tkinter import filedialog
4
+ from lib .pyrife_ncnn_vulkan import Pyrife_ncnn_vulkan
5
+ from lib .pyffmpeg import Pyffmpeg
6
+ from lib .confighandler import ConfigHandler
7
+ from lib .VERSION import Version
8
+
9
+ class main :
10
+ def __init__ (self , config_path : str ) -> None :
11
+ self .__config_path = config_path
12
+ self .__config = ConfigHandler (self .__config_path )
13
+ self .__config_data : dict = self .__config .read_all ()
14
+ if self .__config_data ["USER" ]["pyrife_ncnn_vulkan_config" ] == "" :
15
+ self .__pyrife_ncnn_vulkan_config = self .__config_data ["DEFAULT" ]["pyrife_ncnn_vulkan_config" ]
16
+ else :
17
+ self .__pyrife_ncnn_vulkan_config = self .__config_data ["USER" ]["pyrife_ncnn_vulkan_config" ]
18
+ if self .__config_data ["USER" ]["pyffmpeg_config" ] == "" :
19
+ self .__pyffmpeg_config = self .__config_data ["DEFAULT" ]["pyffmpeg_config" ]
20
+ else :
21
+ self .__pyffmpeg_config = self .__config_data ["USER" ]["pyffmpeg_config" ]
22
+ self .__version = Version ()
23
+
24
+ def create_instance_rife (self ):
25
+ self .rife = Pyrife_ncnn_vulkan (self .__pyrife_ncnn_vulkan_config )
26
+ self .rife .apply_all_from_config ()
27
+
28
+ def create_instance_ffmpeg (self ):
29
+ self .ffmpeg = Pyffmpeg (self .__pyffmpeg_config )
30
+ self .ffmpeg .apply_all_from_config ()
31
+
32
+ def run_all_process (self ):
33
+ self .ffmpeg .video_to_image ()
34
+ self .rife .run ()
35
+ self .ffmpeg .image_to_video ()
36
+
37
+ def crean_ffmpeg_folder (self ):
38
+ if os .path .exists (self .ffmpeg .input_folder ):
39
+ shutil .rmtree (self .ffmpeg .input_folder )
40
+ if os .path .exists (self .ffmpeg .output_folder ):
41
+ shutil .rmtree (self .ffmpeg .output_folder )
42
+
43
+ def connection_check (self ) -> str :
44
+ if self .ffmpeg .output_folder != self .rife .input_folder or self .ffmpeg .input_folder != self .rife .output_folder :
45
+ return (
46
+ "FFmpegとRIFE間でのフォルダの整合性が取れていません\n " ,
47
+ "FFmpegの\" output_folder\" とRIFEの\" input_folder\" は同一である必要があります\n "
48
+ "FFmpegの\" input_folder\" とRIFEの\" output_folder\" は同一である必要があります\n "
49
+ )
50
+ else :
51
+ return "整合性に関する問題はありませんでした"
52
+
53
+ def software_check (self ):
54
+ list = []
55
+ if not os .path .isfile (self .rife .rifeexe ):
56
+ list .append ("RIFE-ncnn-Vulkan.exeが見つかりませんでした" )
57
+ if not os .path .isfile (self .ffmpeg .ffmpegexe ):
58
+ list .append ("FFmpeg.exeが見つかりませんでした" )
59
+ if not os .path .isfile (self .ffmpeg .ffprobeexe ):
60
+ list .append ("FFprobe.exeが見つかりませんでした" )
61
+ return list if list != [] else "ソフトウェアが確認できました"
62
+
63
+ def show_now_setting (self ):
64
+ print ("\n ========現在の設定========\n " )
65
+ print (
66
+ f"選択中の動画{ self .ffmpeg .input_file } \n " ,
67
+ "\n -補完処理前の設定-\n " ,
68
+ f"補完元フレームの保存場所:{ self .ffmpeg .output_folder } \n " ,
69
+ f"補完元フレームの拡張子:{ self .ffmpeg .image_extension } \n " ,
70
+ "\n -補完処理の設定-\n " ,
71
+ f"使用するRIFEのモデル:{ self .rife .rifever } \n " ,
72
+ f"使用するGPU No.:{ self .rife .rifegpu } \n " ,
73
+ f"RIFEの並行処理数:{ self .rife .rifeusage } \n " ,
74
+ f"補完後フレームの保存場所:{ self .rife .output_folder } \n " ,
75
+ f"補完後フレームの拡張子:{ self .rife .output_extension } \n " ,
76
+ "\n -補完後の設定-\n " ,
77
+ f"FFmpegエンコード時のオプション:{ self .ffmpeg .option } \n " ,
78
+ f"完成動画の保存場所:{ self .ffmpeg .complete_folder } \n " ,
79
+ f"完成動画の拡張子:{ self .ffmpeg .video_extension } "
80
+ )
81
+ print ("================================" )
82
+
83
+ def version (self ):
84
+ print ("\n ================\n " )
85
+ print ("RIFE AUTOMATION TOOL PYTHON" )
86
+ print ("copyright 2023 Veludo" )
87
+ print (f"Version : { self .__version .version } " )
88
+ print (self .__version .date_App )
89
+ print ("\n ================\n " )
90
+
91
+
92
+ if __name__ == "__main__" :
93
+ os .chdir (os .path .dirname (__file__ ))
94
+ runner = main (".\\ setting\config.ini" )
95
+ runner .create_instance_ffmpeg ()
96
+ runner .create_instance_rife ()
97
+ runner .version ()
98
+ while True :
99
+ print ("補完する動画を選んでください" )
100
+ runner .ffmpeg .input_file = filedialog .askopenfilename (initialdir = os .path .dirname (__file__ ))
101
+ if not runner .ffmpeg .input_file == "" :
102
+ break
103
+ print ("選択されませんでした" )
104
+ print (runner .software_check ())
105
+ print (runner .connection_check ())
106
+ runner .show_now_setting ()
107
+ print ("以上の条件で処理を開始しますか?(y/n)" )
108
+ if not input () in ["y" , "Y" ]:
109
+ exit ()
110
+ runner .run_all_process ()
111
+ runner .crean_ffmpeg_folder ()
112
+ print ("処理が正しく完了しました\n Enterキーを押すと終了します" )
113
+ input ()
0 commit comments