CrazyEasyFluidAnalysisSystem Tools Tutorial created by cooyou.org


付属アプリケーション一式のチュートリアルです。
付属アプリケーション一式に含まれているpythonスクリプトについて説明します。

pythonスクリプト一覧
スクリプト名内容dockerイメージのアーカイブ標準/Plusで実行可能
xmlcheck.py本システム用のXMLのフォーマットチェック標準,Plus
makegraph.py本システム出力CSVファイルのグラフ作成標準,Plus
makemovie.pyParaViewからエクスポートのJPEG画像連番ファイルをMP4に変換標準,Plus
divideportrait.py横長MP4動画を縦長動画に上下に帯をいれてMP4に変換。ファイル分割標準,Plus
denoise.pyMP3,WAV音声ファイルのノイズリダクションPlus
ontei.pyMP4動画やMP3音声ファイルから声と背景音を分離。音域のヒストグラフ作成。キー変更。Plus
video2srt.pyMP4動画から字幕の日本語strファイルまたはテキストファイルを作成Plus
srt2video.py字幕の日本語strファイルまたはテキストファイルから字幕描画の音声合成MP4動画を作成Plus
※すべてのスクリプトはDocker上のUbuntu Linuxのコマンドラインで実行できます。
※これらのスクリプトファイル自体はWindows等のホストOSの任意フォルダに配置しておくことで、Ubuntu Linuxの/home/user/wcfdで参照できます。
※docker exec -it 番号 /bin/bash で実行直後にカレントディレクトリは自動的に/home/user/wcfdに移動します。

作業フォルダとpythonスクリプトファイルの配置フォルダが異なる場合は例えば以下のように使用します。
cd /home/user/wcfd/test
python ../makegraph.py sample/resultbox.csv 5
この場合は/home/user/wcfd/testが作業フォルダで、makegraph.pyは一つ上の/home/user/wcfdに配置されてます。
../というのが一つ上のフォルダを指定する意味です。../../とすれば2つ上になります。

xmlcheck.py 本システム用のXMLのフォーマットチェック

test.xmlのフォーマットをチェックする例
python xmlcheck.py test.xml world.xsd
で任意のXMLファイルのフォーマットチェック結果を表示します。
world.xsdは付属アプリケーション一式に含まれてます。
world.xsdとは本システム用のXMLの書式が記述されたファイルです。

python xmlcheck.py --help
usage: xmlcheck.py [-h] xml xsd

XSD 1.1 対応 XML検証ツール

positional arguments:
  xml         検証する XML ファイル
  xsd         使用する XSD ファイル

options:
  -h, --help  show this help message and exit


makegraph.py 本システム出力CSVファイルのグラフ作成

BOXのグラフを画像を作成する場合の例
python makegraph.py sample/resultbox.csv 4 -n boxname

DOORのグラフ画像を作成する場合の例

python makegraph.py sample/resultdoor.csv 5 -n doorname

sampleとはケース名(プロジェクト名)です。
resultbox.csvが本システムで生成するBOXの結果のCSVファイルです。
resultdoor.csvが本システムで生成するDOORの結果のCSVファイルです。
数値はCSVファイルの列番号(0から開始)です。
-nオプションでスペース区切りで任意のBOXまたはDOORの名前を指定できます。無指定の場合はすべて
python makegraph.py --help
usage: makegraph.py [-h] [-n [NAMES ...]] [--xlim XLIM XLIM] [--ylim YLIM YLIM] filename column_index

CSVデータをプロットし、JPEG保存します。

positional arguments:
  filename              読み込むCSVファイルのパス
  column_index          縦軸にする列のインデックス

options:
  -h, --help            show this help message and exit
  -n [NAMES ...], --names [NAMES ...]
                        表示したい名前
  --xlim XLIM XLIM      横軸の範囲 (例: --xlim 0 0.3)
  --ylim YLIM YLIM      縦軸の範囲 (例: --ylim -1.0 1.0)


resultbox.csvの列
列番号列名意味
0time時刻[sec]
1typeBOX 初期値から変化なし
2nameBOX名 初期値から変化なし
3volume_m3体積[m3] XMLでの定義値から本システムで計算。初期値から変化なし
4p_Pa気圧[Pa] OpenFoamから取得
5T_C気温[度] OpenFoamから取得
6velocity_mps風速[m/sec] OpenFoamから取得
7humidity_Pv_Pa飽和水蒸気圧[Pa] 本システムで計算
8humidity_RH_%相対湿度[%] 本システムで計算。100%の制限なし

resultdoor.csvの列
列番号列名意味
0time時刻[sec]
1typeDOOR 初期値から変化なし
2nameDOOR名 初期値から変化なし
3p1_Pa開始面中央の気圧[Pa] OpenFoamから取得
4p2_Pa終了面中央の気圧[Pa] OpenFoamから取得
5dp_Pap1_Paとp2_Paの差圧の絶対値[Pa] 本システムで計算
6maxDpTimedp_Paの最大差圧の時刻[sec] 本システムで記憶
7maxDp_Padp_Paの最大差圧[Pa] 本システムで記憶
8velocity_mps風速[m/sec] OpenFoamから取得
9massFlow_kgps流速[kg/sec] 本システムで計算
10tolerance_Pa耐圧[Pa] XMLでの定義値
11area_m2ドア開始面の面積[m2] XMLでの定義値から本システムで計算。初期値から変化なし
12force_Nドアにかかる力[N] 本システムで計算
13broken差圧が耐圧を超えて破壊されたか 0:未破壊 1:破壊済。本システムで判定

※_Paとなっているところは設定により_psiになる場合があります。その場合の単位はpsiとなります。


makemovie.py ParaViewからエクスポートのJPEG画像連番ファイルをMP4に変換

ケース名(プロジェクト名)がsampleでParaView出力の連番JPEG画像がanimeimgsフォルダにある場合
python makemovie.py --project sample --anime animeimgs --scale 0.1
--scaleは時間スケールを指定します。1.0がリアルタイムの動画です。0.1でしたら10倍のスローモーションです。

python makemovie.py --help
usage: makemovie.py [-h] --project PROJECT --anime ANIME [--scale SCALE] [--end END]
                    [--offsettime OFFSETTIME]

options:
  -h, --help            show this help message and exit
  --project PROJECT     シミュレーション名フォルダを指定
  --anime ANIME         連番画像フォルダを指定
  --scale SCALE         時間スケールを指定
  --end END             終了時刻(秒)を指定
  --offsettime OFFSETTIME
                        マイナスするオフセット時間を指定
--offsettimeとは初めに破壊されるドアの時刻をセットするとその時刻を0とします。
XMでのドア定義のenabletimeタグと一致させると便利です。デフォルトは0


divideportrait.py 横長MP4動画を縦長動画に上下に帯をいれてMP4に変換。ファイル分割

inというフォルダを作成してそこに横長動画のsample.mp4ファイルを配置したとします。
outというからのフォルダを作成しておきます。
python divideportrait.py in out 60
これでoutにはsample.mp4を60秒ごとに分割して上下に黒帯を入れた縦長動画が複数生成されます。
分割された動画の開始と終了は自動的に数秒だけオーバーラップして分割されます。

また、入力フォルダには複数のファイルを配置できます。
--firstonlyオプションを指定した場合は初めの1つの分割ファイルのみ作成します。
python divideportrait.py  --help
usage: divideportrait.py [-h] [--firstonly FIRSTONLY] [--overlapsec OVERLAPSEC] [--color COLOR]
                         [--outwidth OUTWIDTH] [--outheight OUTHEIGHT] [--skip SKIP]
                         indir outdir maxsec

positional arguments:
  indir
  outdir
  maxsec

options:
  -h, --help            show this help message and exit
  --firstonly FIRSTONLY, -f FIRSTONLY
  --overlapsec OVERLAPSEC, -o OVERLAPSEC
  --color COLOR, -c COLOR
  --outwidth OUTWIDTH, -x OUTWIDTH
  --outheight OUTHEIGHT, -y OUTHEIGHT
  --skip SKIP, -s SKIP


denoise.py MP3,WAV音声ファイルのノイズリダクション

python denoise.py test.mp3 -p 1.0
のように実行します。クリア音声のtest_clean.mp3とノイズ音のtest_noise.mp3ができます。
1.0は除去の強さです。
入力は.wavファイルでも結構です。
-f wavと指定するとmp3ではなくwav形式の出力になります。

python denoise.py -h
usage: denoise.py [-h] [-f {mp3,wav}] [-p PROP] [-pk PEAK] input

AIノイズ除去ツール (MP3/WAV対応)

positional arguments:
  input                 入力ファイルのパス (mp3, wav等)

optional arguments:
  -h, --help            show this help message and exit
  -f {mp3,wav}, --format {mp3,wav}
                        出力形式 (デフォルト: mp3)
  -p PROP, --prop PROP  除去の強さ 0.0-1.0 (デフォルト: 0.5)
  -pk PEAK, --peak PEAK
                        正規化ピーク値 (デフォルト: 1.5)


ontei.py MP4動画やMP3音声ファイルから声と背景音を分離。音域のヒストグラフ作成。キー変更。

任意のフォルダにMP4動画またはMP3音声ファイルを配置します。
python ontei.py sample G3:D6
のように実行します。sample内に歌のMP4動画またはMP3音声ファイルが配置されているとします。
ボーカルと楽器音に分離されてそれぞれのMP3ファイルがsample内に生成されます。
また、ここで指定しているG3:D6というのは自分の声の音域範囲の例です。
グラフ画像が2種類生成されます。originalの音源で解析したボーカルのヒストグラムがあります。
ヒストグラムの横軸にはノート番号も記載されてますので指定する音域の参考になると思います。
また、自分の声の音域にshiftした音声ファイルも生成されます。ファイル名のshiftの数値が実際にカラオケで設定するキーです。
仮に男性が女性ボーカルの音を歌う場合でも、キーをマイナスして下げるとは限りません。プラスで上げるとキーが合う場合もあります。
python ontei.py
使い方: python script.py 入力ファイルまたはフォルダ [指定音域(例:G3:D6 または 48:74)]


video2srt.py MP4動画から字幕の日本語strファイルまたはテキストファイルを作成

python video2srt.py sample.mp4
のように実行しますと、初回は辞書データをダウンロードします。
sample.srtという日本語字幕のファイルsample.srtが出来上がります。
srt形式ではなくテキストの羅列がほしい場合は、--txtオプションを使用します。
python video2srt.py --help
usage: video2srt.py [-h] [--txt] input

動画/音声から文字起こしを行い、SRTまたは純粋なテキストを生成します

positional arguments:
  input       入力ファイルパス (mp4, mp3など)

options:
  -h, --help  show this help message and exit
  --txt       時刻なしの純粋なテキスト(.txt)で出力する


srt2video.py 字幕の日本語strファイルまたはテキストファイルから字幕描画の音声合成MP4動画を作成

python srt2video.py sample.srt
のように実行しますとsrtファイルから日本語での合成音声読み上げおよび字幕を描画したMP4動画sample_srt_Nanami.mp4が作成されます。
ファイル名の末尾には使用したボイス名が記載されます。
srtファイルではなくテキストの羅列のテキストファイルを指定する場合は、--txtオプションを指定してください。
色を変更するにはRRGGBBAAの16進数を指定します。
--color AA0000FF --bg_color 404080FF
色の16進数はこちらで作成できます。
Voice名は以下が使用できます。
python srt2video.py --list-voices

=== 日本語ボイス一覧 ===
  ja-JP-KeitaNeural                   (男性)
  ja-JP-NanamiNeural                  (女性)

python srt2video.py --help
usage: srt2video.py [-h] [--txt] [--voice VOICE] [--rate RATE] [--mp3_only] [--font FONT] [--size SIZE]
                    [--color COLOR] [--bg_color BG_COLOR] [--bg_video_color BG_VIDEO_COLOR]
                    [--pos {top,center,bottom}] [--margin MARGIN] [--resolution RESOLUTION] [--output_dir OUTPUT_DIR]
                    [--list-voices] [--list-fonts] [--chars_per_line CHARS_PER_LINE]
                    [input_file]

positional arguments:
  input_file

options:
  -h, --help            show this help message and exit
  --txt
  --voice VOICE
  --rate RATE
  --mp3_only
  --font FONT
  --size SIZE
  --color COLOR
  --bg_color BG_COLOR
  --bg_video_color BG_VIDEO_COLOR
  --pos {top,center,bottom}
  --margin MARGIN
  --resolution RESOLUTION
  --output_dir OUTPUT_DIR
  --list-voices
  --list-fonts
  --chars_per_line CHARS_PER_LINE
                        1行あたりの最大文字数