Skip to content

Commit 4f970ff

Browse files
authored
Merge pull request #2 from ike62k/Version2.x
Version2.0実装 再設計、リファクタリングの完了
2 parents 7c8ed0b + 1912c72 commit 4f970ff

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+4565
-169
lines changed

App.py

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
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("処理が正しく完了しました\nEnterキーを押すと終了します")
113+
input()

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2023 Veludo
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

RATconfig.ini

Lines changed: 0 additions & 34 deletions
This file was deleted.

README.md

Lines changed: 92 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,92 @@
1-
# RIFEAutomationToolPython
2-
フレーム補間を行うオープンソースソフト、[RIFE-ncnn-Vulkan](https://github.com/nihui/rife-ncnn-vulkan)の使用を「少しだけ」簡略化するPythonツール<br>
3-
外部ライブラリは使用しておらず、Windows10/11 64bit / Python3.10.0で動作確認しています<br>
4-
本プログラムのダウンロードは[こちら](https://github.com/ike62k/RIFEAutomationToolPython/releases)から<br>
5-
6-
このプログラムはCUIツールですが、[GUI動作をさせるプラグイン](https://github.com/ike62k/RATPython_simplegui)も用意しています。
7-
GUIダウンロードは[こちら](https://github.com/ike62k/RATPython_simplegui/releases)から
8-
9-
# 注意事項
10-
1. 補完対象のパスに半角スペース(' ')が含まれているとうまく動作しません
11-
2. 補完対象のパスにドット('.')が含まれているとうまく動作しません
12-
3. 補完対象が実行ファイルと違うドライブ(相対パスで位置を書き表せない位置)にあるファイルではうまく動作しません(修正予定)
13-
4. 'Shell = True'を使用しているので入力次第で予期しない動作を引き起こす可能性があります
14-
5. 同梱されているRATconfig.iniに初期値の設定があるため、先に環境に応じて設定をしてから使用してください
15-
6. このソフトウェアは趣味で制作されたものです。本ソフトウェアの使用によって引き起こされた全ての結果について作者は一切の責任を負いません
16-
17-
# 必要ソフトウェア
18-
1. [rife-ncnn-vulkan.exeと各種プロファイル](https://github.com/nihui/rife-ncnn-vulkan)
19-
2. [ffmpegとffprobe](https://www.ffmpeg.org/)
20-
3. [Python3](https://www.python.org/)
21-
22-
# 対応動画
23-
入力ファイル : ffmpegで動画ファイルとして読み込めるほとんどすべての映像/音声形式
24-
出力ファイル : コンテナフォーマット→入力ファイルと同じ / 映像コーデック→ユーザー指定 / 音声コーデック→ユーザー指定
25-
26-
# 使い方
27-
1. ダウンロードしたすべてのファイル、フォルダを同一フォルダ(※)にまとめる
28-
2. このレポジトリで配布されているファイルをPythonで実行
29-
3. 表示の指示に従って動画を指定する(記述は※のファイルからの絶対パス。ただし相対パスで表記できる位置にあることを推奨)
30-
31-
# はしがき
32-
そもそもこのファイルは個人的にめんどくさかった作業を簡略化させただけで、コードの無駄とかが多いのでそこらへんだけよろです
1+
# RIFE AUTOMATION TOOL PYTHON
2+
copyright 2023 びろーど(Veludo)
3+
4+
## はじめに
5+
このプログラムは趣味の一環として作成されたものです。本ソフトウェアを使用したいかなる結果についても作者は責任を負いません。<br>
6+
このソフトウェアはMIT LICENSEにて提供されています。MIT LICENSEは添付しているLICENSEを参照してください。<br>
7+
本ソフトウェアはffmpeg及びffprobeを使用しています。使用しているのはLGPL版であり、動的リンクでの使用としているため本ソフトウェア自体はMIT LICENSEにて公開しています。<br>
8+
ffmpeg及びffprobeのライセンスは.\lib\ffmpeg\LGPL_LICENSE_for_ffmpeg.txtを参照してください。
9+
10+
## 動作(確認済み)環境
11+
- windows10 or windows11
12+
- Python 3.12(以前のVerでも動く可能性はあります※未検証)
13+
- (あったらいいな)Intel,AMD,NVIDIAの外付けGPU
14+
15+
## 使用させていただいているソフトウェア
16+
- [FFmpeg(LGPL)](https://github.com/BtbN/FFmpeg-Builds/releases/tag/autobuild-2023-11-11-12-54)
17+
- [FFprobe(LGPL)](https://github.com/BtbN/FFmpeg-Builds/releases/tag/autobuild-2023-11-11-12-54)
18+
- [RIFE-ncnn-Vulkan](https://github.com/nihui/rife-ncnn-vulkan/releases/tag/20221029)
19+
20+
## どんなソフトウェア?
21+
映像の前後コマから間のコマを生成するソフトウェア[RIFE-ncnn-Vulkan](https://github.com/nihui/rife-ncnn-vulkan)をより便利に活用するためのソフトウェアです。<br>
22+
FFmpegとRIFE-ncnn-Vulkanを組み合わせて、元動画を2倍補完したものを生成します。<br>
23+
動作にはWindows環境とそこで動作するPythonが必要です。Pythonの外部ライブラリは使用していません。<br>
24+
お好みのFFmpeg,FFProbeビルドを代わりに使用することも可能です。(ライセンスにはご注意ください)<br>
25+
26+
## 使用出来る元動画ファイル
27+
- お使いのFFmpegにて映像streamを画像へとエンコードできるもの
28+
- 音声streamが含まれているもの(今後のアップデートで音声を含まない動画にも対応予定)
29+
- 映像総フレーム数が2~5000000000であるもの
30+
- 映像が極度に低ビットレートでないもの(効果が薄れます)
31+
- ファイル名及びファイルパスに` `(半角スペース)、`.`(ピリオド)があると正しく動作しません
32+
33+
## 使い方
34+
1. Pythonをインストールします。
35+
2. 本プロジェクトのReleaseページからソースコードをダウンロードします。
36+
3. 適当な場所で展開します
37+
4. App.pyを実行します
38+
39+
## 各種設定について
40+
本ソフトウェアでは、ユーザーごとの環境に合わせて柔軟に設定を操作できるよう、configファイルを設定しています。<br>
41+
全てのconfigファイルは.\setting内に存在します。<br>
42+
43+
### 共通
44+
- configファイルは`[DEFAULT]`セクションと`[USER]`セクションによって構成されています。
45+
- `[USER]`値が空(`None`)の場合、ソフトウェアは`[DEFAULT]`セクションの値を参照します。
46+
- `[USER]`値が空(`None`)でない場合、ソフトウェアは`[USER]`セクションの値を参照します。
47+
- **自分自身で設定をする場合は`[USER]`セクションの値のみを書きかえる**ことを推奨します。
48+
49+
### config.ini
50+
App.py起動用のconfigです。
51+
- `pyrife_ncnn_vulkan_config` 下記pyrife_ncnn_vulkan.iniの場所を指定します。
52+
- `pyffmpeg_config` 下記pyffmpeg.iniの場所を指定します
53+
54+
### pyrife_ncnn_vulkan.ini
55+
RIFE-ncnn-Vulkan用のconfigです。
56+
- `input_folder` RIFEが処理する対象となる、補完処理前のフレームのあるフォルダを指定します。
57+
- `output_folder` RIFEが処理したあとの、補完処理後のフレーム出力先フォルダを指定します。
58+
- `output_extension` RIFEが処理したフレームのファイル形式を指定します。
59+
- `rifeexe` RIFE-ncnn-Vulkan.exeの場所を指定します。
60+
- `rifever` RIFEの補完に使用するモデルのバージョンを指定します。
61+
- `rifeusage` RIFEの動作スレッド数を指定します(多いとメモリ使用量が増えます)
62+
- `rifegpu` RIFEが使用するGPUのナンバーを指定します(-1でCPU処理)
63+
- `ratio` 補完倍率を指定します **※注:現段階では`ratio`に関わらず2倍で動作します(未実装)**
64+
65+
### pyffmpeg.ini
66+
FFmpeg用のconfigです。
67+
- `input_file` 補完処理を行う元動画を指定します。
68+
- `input_folder` RIFEの補完処理が完了したあとのフレームが存在するフォルダを指定します。
69+
- `output_folder` RIFEに渡す、補完処理前のフレーム出力先フォルダを指定します。
70+
- `conplete_folder` 前処理が完了して完成した動画を出力するフォルダを指定します。
71+
- `ffmpegexe` FFmpeg.exeの場所を指定します。
72+
- `ffprobeexe` FFprobe.exeの場所を指定します。
73+
- `image_extension` RIFEに渡す、補完処理前のフレームのファイル形式を指定します。
74+
- `video_extension` 完成した動画のファイル形式を指定します。
75+
- `option` FFmpegのoptionを指定します。動画のコーデック、画質などを指定します。
76+
77+
## 注意事項
78+
- FFmpeg,FFprobe,RIFE-ncnn-Vulkanは全て実行ファイルを`subprocess`で呼び出しています。
79+
その際に、`shell=True`を使用しています。設定値にシェルがコマンドと誤認識する値があると、シェルインジェクションなどの危険性があります。
80+
- 著作権で保護された映像の加工及び公開は法律に反する場合があります。作者は責任を負いかねますので、使用方法にはお気をつけください。
81+
82+
## 既知の不具合
83+
- 音声streamを含まない動画が処理できない問題
84+
- `subprocess`において`shell=True`を使用していることによる誤作動のリスク
85+
86+
## 修正及び機能追加予定
87+
- 音声streamを含まない動画への対応
88+
- (時期未定)`subprocess``shell=True`を使用しない設計へのリファクタリング
89+
- 補完倍率`ratio`の実装
90+
- PysimpleGUIを使用したGUIの実装
91+
- fletを使用したGUIの実装
92+

0 commit comments

Comments
 (0)