☆☆ 新着記事 ☆☆

2020年12月25日金曜日

動画編集 ゆっくりムービーメーカーを入れてみる、と映らなかったのでコーデック対応

ゆっくりムービーを入れても動画が読み込めなかった。その対応まで記載しています。

 

1. ゆっくりムービー3をインストール

1)ダウンロードリンク 

■『饅頭遣いのおもちゃ箱』ゆっくりMovieMaker3

http://manjubox.net/ymm3/

ゆっくりMovieMaker3(.zip版)をダウンロード


■nicotaik&キャラ素材配布所 

きゃら素材をDL

http://www.nicotalk.com/charasozai.html


好みのキャラをダウンロード。

2) 圧縮回答&起動

解凍したら、新たに「キャラ素材」というフォルダを作って

キャラ素材をフォルダごと移動。

(ここでフォルダの置き場を恒久的なものに移動しておく)

「YukkuriMovieMaker_v3.4.8.1フォルダ」のYukkuriMovieMaker_v3.exeを起動。


いろいろ画面がでるけど、本スクリーンとタイムラインだけ残して閉じる。

(規約は読んだ後ですよ)


2.ゆっくりムービー3の初期設定

(YMM4は、まだ開発中のようなので)


1) YMM3とAviutlとキャラ素材のパスを通す


本体画面→ファイル→設定→タブ「キャラ素材」

aviutl.exe

キャラ素材フォルダ

の項目を、右の参照ボタンを押して、参照パスを通す。

aviutl.exe=>保存してある同exe.ファイルを選択=>開く

キャラ素材フォルダ=>さっき作った「キャラ素材」フォルダを選択→開く



2)キャラ設定

本体「ファイル」→「キャラクタ設定」→キャラクタ編集

「全般」タブで左コラムのキャラを選択。

「キャラ素材」タブで素材名をダウンロードしたキャラに指定。

再び「全般」タブで詳細設定。

音量は100がおすすめ。


「字幕」タブ

字幕を表示するにチェック

サイズ:80

MSPゴシック

縁取り文字

文字色:赤

影。縁色:黒


3)ファイル→動画の設定

画面サイズを指定→1920x1080

FPS:60

オーディーオ:44100

にする。


*これで初期設定終わり。簡単です。

****************************************

のはずだった。 が、、

動画をタイムラインに挿入しても画面は黒いまま




環境はWindows10だけど、影響があるのか?

ネットで調べるとコーデックが必要な場合も。

1)最初に対応

ファイル→設定→プレビュータブでプロジェクトプレビューで

DirectShowEVR ← →DirectShowMR9 を変えてみる。


改善されない。


2) コーデックパックを入れてみる。


この2つが有名らしい。


コーデックダウンロードのリンクはこちら。

https://www.gigafree.net/media/codecpackage/


◆CCPをインストールしてみる。

うまくいかない。


*CCPはアンインストールする。

◆LAVFiltersをインストールしてみる。


表示できるようになりました。


よかった。

おしまいです。









*利用規約は以下のように書いておく

使用BGM

■MusMus ♪渇き ♪プラスチックアドベンチャー ♪inherit the Light Trail

http://musmus.main.jp/

■Wingless Seraph ♪ED:last wish 

http://wingless-seraph.net/

■甘茶の音楽工房 ♪はじめてのおつかい

 http://amachamusic.chagasi.com/

■Oto Logic ♪inaka no daisougen

http://musicisvfr.com/

使用SE

■On-jin~音人~ http://on-jin.com/ 

■効果音ラボ http://soundeffect-lab.info/ 

■効果音辞典 リンク不要

使用ゆっくりキャラ素材 

■nicotalk&キャラ素材配布所 

素材作者:ころボンさん

※この動画は「キャラ素材の規約」を守ってキャラ素材を使用させていただいています。

★規約について詳しくは→http://www.nicotalk.com/kiyaku.html




2020年11月29日日曜日

動画編集ソフト(AviUtl)をインストールしてみる

今までVideoPadを使ってたけど、違うのも使って見ようと思ってネット検索してAviUtlを使ってみた。バージョンがいくつかあって、インストールが難しいように書いてありましたが以下の手順で簡単でした。編集がし易く満足しています。拡張性もありそうなので期待です。(特に、拡張機能で音ずれがなくなったのが嬉しい)


動画編集ソフト

1. VideoPad Editing Software

ダウンロード:

https://videopad-video-editor.en.softonic.com/

2.AviUtl

1997年にカット・各種フィルタ処理・エンコードなどの基本的な機能が開発された。 

2008年に「拡張編集プラグイン」というプラグインが「KENくん」氏によって新たにリリー


特徴)

★AviUtl本体+拡張編集プラグインのセットで使う。

★ネットでの情報が多いのですぐにトラブルシューティングできる 

★拡張性が高い 


プラグイン次第でどんなファイル形式も読み込めるし、どんなファイル形式でも出力できます 自分が求めるエフェクト効果も自作できたりもします モーショングラフィックスソフトみたいな事も出来ます 「ゆっくりMovieMaker」「MikuMikuDance」「AviSynth」「NIVE」などの有名ソフトと連携が取れたりする  

ゆっくりMovieMaker: →「ゆっくり」を使って文字を喋らせたりするのを簡単に行えるソフト。無料。  


MikuMikuDance: →通称MMD。初音ミクが3Dでライブとかしてる映像とか見たことあるでしょうか。ああいうのを作れるソフトです。無料。(ただし軽い連携が出来るだけなので、深い事はできない)  

AviSynth: →動画編集する前にスクリプトで編集できたりするソフト。無料。AviUtl標準機能で連携できます NIVE: →モーショングラフィックスソフト。正確には連携じゃないですが、AviUtlとしか連携が取れない。

https://aviutl.info/what/




インストール

手順)

1.解凍ソフトを導入(CubeICE)

 解凍ソフトがない場合 https://www.cube-soft.jp/cubeice/  




2.必要なものをダウンロード 

◇ AviUtlのお部屋 (http://spring-fragrance.mints.ne.jp/aviutl/ )

AviUtl本体 aviutl110.zip version1.10 2019/10/3 と



拡張編集Plugin exedit92.zip version0.92 2013/7/15 をダウンロード 

上に貼ったページの下の方にDLリンクあります。


◇まるも製作所 

■ Lanczos 3-lobed 拡大縮小 (http://www.marumo.ne.jp/auf/)

lanczos3-0.5.7.lzh 0.5.7 2011・3・9 



◇RePOPn (https://pop.4-bit.jp/?page_id=7929 )

■ L-SMASH Works r940 release1 


◇Microsoft OneDrive(https://onedrive.live.com/?id=6BDD4375AC8933C6%21393&cid=6BDD4375AC8933C6)

 ■x264guiEx_2.65v2.zip 


3.解凍とフォルダ構成の準備

圧縮フォルダを全て解凍後、必要なファイルを1つのフォルダに移動。

・「exedit92」フォルダ内の全てのファイルを「aviutl110」フォルダに移動・貼り付け。

「exedit92」フォルダ削除。

・「lanczos3-0.5.7」フォルダ内のlanczos3.aufふぁいるを「aviutl110」フォルダに移動・貼り付け。「lanczos3-0.5.7」フォルダ削除。

・「aviutl110」フォルダ内に新規に「Plugins」フォルダ作成。

・「L-SMASH_Works_r940_plugins」フォルダ内の

lwcolor.auc

lwdumper.auf

lwinput.aui

lwmuxer.auf

を、上述「Plugins」フォルダに移動・貼り付け。「L-SMASH_Works_r940_plugins」フォルダは削除。



AviUtl初期設定

「x264guiEx_2.65v2」フォルダのauo_setup.exeファイル実行

使用するaviutlのフォルダを求める入力画面がでるので、「aviutl110」フォルダを指定。

Directoryも必要なので、右の参照ファイルボタンから選択する。



次へ、を押下して終了。「x264guiEx_2.65v2」フォルダは削除


*これでインストールは終了です。


4.AviUtl初期設定 

1)環境設定

「aviutl110」フォルダ内の aviutl.exe 実行。

Main画面がPop Upするので


・上部Windowバーの「設定」→「拡張編集の設定」を選択

タイムラインが表示される。

(タイムラインが起動時に出なくなる時は、これを再度実行して表示させる)


・上部Windowバーの「その他」の入力Plugin情報で確認し、


exedit.aui


lwinput.aui


が表示されればOK.


・上部Windowバーの「ファイル」の環境設定→システムの設定で


最大画像設定 4000x4000

再生ウィンドウの動画再生をメインウィンドウに表示する にチェック

編集ファイルが閉じられる時に確認ダイアログを表示する にチェック

OKを押下してシステム設定ウィンドウを閉じる。


AviUtlを再起動。


2) 対応ファイルの拡張

「aviutl110」フォルダ内のexedit.iniを開く。

[extension]と[script]の間に以下を追加貼り付け。


.mkv=動画ファイル

.mkv=音声ファイル

.mpg=動画ファイル

.mpg=音声ファイル

.mpeg=動画ファイル

.mpeg=音声ファイル

.wma=動画ファイル

.wma=音声ファイル

.wmv=動画ファイル

.wmv=音声ファイル

.m2ts=動画ファイル

.m2ts=音声ファイル

.ts=動画ファイル

.ts=音声ファイル

.mov=動画ファイル

.mov=音声ファイル

上書き保存


 5.音ズレ対策設定 

・上部Windowバーの「ファイル」の環境設定→入力プラグインの設定→L-SMASH_Works_r940_pluginsの設定


VFR-&CFRにチェックにチェック 


左ボックス: 60FPSの動画編集なら初期値60000のまま。30FPSの動画編集なら

右ボックス:初期値1001から1000に変更


 6.ショートカットキー設定 


 7.AviUtl動画取り込みから出力 

・動画をドラッグ&ドロップ

・新規プロジェクトの作成

画像サイズ 1920 x 1080(Youtubeのサムネイルは1280x720)

フレームレート:60 fps


読み込むファイルに合わせる にチェックでも可

に変更

*これで動画編集が開始できます。


お疲れ様でした。

AviUtlの音ずれを解消する


1. 元動画ファイルのビットレートを確認する

例)

・ビデオ

フレーム長:1280

フレーム高:720

データ速度:10000Kbps

総ビットレート:10128kbps

フレーム率:29フレーム/秒

・オーディオ

ビットレート:128kbps

オーディオサンプルレート:40kHz


2.AviUtilの設定

ファイル→環境設定→入力プラグインの設定→L-SMASH Works File Reader setting


VFR→CFR 30000/1001  <-ビデオフレーム率に合わせる

Audio Sampling rate: 40000 Hz <-オーディオサンプルレートに合わせる


3.新規プロジェクトの作成 PoPUp画面

フレームレート/音声レートを合わせる




4.

5.

6.



2020年7月6日月曜日

FLASK request methodと応用(テキストクリックで値を送信)


Contents
◇FLASK_WTFを使わないで、htmlからアプリにデータを渡すrequest methodを使った基本的な書き方。( CSRF 攻撃対策などを簡易に実現するToolはない。)

◇サブミット・ボタンを使わないで、テキストをクリックすることで値を送信する方法/




◇ request methodを使った基本的な書き方。
request libraryをflaskからインポートする。
(Flask_WTFを使う場合はインポートは必須ではない。)

・html
<body>
    {% if message %}
    <p>{{ message }}</p>
    {% endif %}

    <form action="" method="post">
        <p>
            <label for="username">Username</label>
            <input type="text" name="username">
        </p>
        <p>
            <label for="password">Password</label>
            <input type="password" name="password">
        </p>
        <p>
            <input type="submit">
        </p>
    </form>
</body>




・app.py

from flask import Flask, render_template, request

#...

@app.route('/login/', methods=['post', 'get'])

def login():

    message = ''

    if request.method == 'POST':
        username = request.form.get('username')  # access the data inside
        password = request.form.get('password')

        if username == 'root' and password == 'pass':
            message = "Correct username and password"
        else:
            message = "Wrong username or password"

    return render_template('login.html', message=message)






◇サブミット・ボタンを使わないで、テキストをクリックすることで値を送信する方法
ちょっとミスリーディングなタイトル。本当はSubmitボタンを使うが、SubmitボタンのフレームをCSSで見えないように書き換える。

 ・CSS

.sample input[type="submit"]{
border:none;
background:#FFF;
text-decoration:underline;color:#00f; }

.sample input:hover { cursor:pointer; }


・html

<br />
<form action="/リンク先" class="sample" method="post" name="form1">
<input name="name" type="hidden" value="Apple" />
<input type="submit" value="Apple" />
</form>

2020年6月25日木曜日

FLASK_WTFormsを使う基本のコード (入力エラー・メッセージ付)

(ファイル構成)
-- app.py
 |- / template
         |- index.html


(app.py)
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from flask import Flask, render_template, url_for, flash,redirect
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length
app = Flask(__name__)
app.config['SECRET_KEY'] = 'Thisisasecret!'
class Message(FlaskForm):
    username = StringField('username',
                            validators=[DataRequired(), Length(min=2, max=5)])
    password = PasswordField('password',
                             validators=[DataRequired(), Length(min=2, max=5)])
    submit = SubmitField('Check Up')

                            
@app.route('/', methods=['GET', 'POST'])
def form():
    form = Message()
    if form.validate_on_submit():
        flash(f'Found the result for {form.username.data}','success') #Bootstrapの機能
        result =  '<h1>The username is {}. <br>The password is {}.</h1>'.format(form.username.data, form.password.data)
        return redirect(url_for('form', result=result))
    return render_template("index.html", form=form ,)

if __name__ == '__main__':
    app.run()



(index.html)


     <form method="POST" action="">
            {{ form.hidden_tag() }}
  
                    {{ form.username.label }}
                    {% if form.username.errors %}
                        {{ form.username(class="form-control form-control-lg is-invalid") }}
                        <div class="invalid-feedback">
                            {% for error in form.username.errors %}
                                <span>{{ error }}</span>
                            {% endfor %}
                        </div>
                    {% else %}
                        {{ form.username }}
                    {% endif %}
           
            
                    {{ form.password.label}}
                    {% if form.password.errors %}
                        {{ form.password(class="form-control form-control-lg is-invalid") }}
                        <div class="invalid-feedback">
                            {% for error in form.password.errors %}
                                <span>{{ error }}</span>
                            {% endfor %}
                        </div>
                    {% else %}
                        {{ form.password}}
                    {% endif %}
              
            <div class="form-group">
                {{ form.submit() }}
            </div>
 
        </form>

 {% with messages = get_flashed_messages(with_categories=true) %}
  {% if messages %}
   {% for category, message in messages %}
     <div class="alert alert-{{ category}}">
   {{ message}}
     </div>
   {% endfor %}
  {% endif %}
 {% endwith%}

 {{ result | safe}}



=======

resultの結果は、URLに反映されてしまう。要修正
http://127.0.0.1:5000/?result=%3Ch1%3EThe+username+is+123.+%3Cbr%3EThe+password+is+3333.%3C%2Fh1%3E


2020年6月22日月曜日

Matplotlib で表を作成し、png形式で画像として保存する

Matplotlibで表を作成する場合、一度グラフと表を作成し、表だけ表示を消す。



import matplotlib.pyplot as plt
import six


fig = plt.figure()
ax = fig.add_subplot(111)

col_labels = ['col1', 'col2', 'col3']
row_labels = ['row1', 'row2', 'row3']
table_vals = [[11, 12, 13], [21, 22, 23], [31, 32, 33]]

# Draw table
the_table = plt.table(cellText=table_vals,
                      colWidths=[0.1] * 3,
                      rowLabels=row_labels,
                      colLabels=col_labels,
                      loc='center')
the_table.auto_set_font_size(False)
the_table.set_fontsize(24)
the_table.scale(4, 4)

# Removing ticks and spines enables you to get the figure only with table
plt.tick_params(axis='x', which='both', bottom=False, top=False, labelbottom=False)
plt.tick_params(axis='y', which='both', right=False, left=False, labelleft=False)
for pos in ['right','top','bottom','left']:
    plt.gca().spines[pos].set_visible(False)
plt.savefig('matplotlib-table', bbox_inches='tight', pad_inches=0.05)
plt.show()

(1) fig = plt.figure(figsize=(width height))
figの大きさを指定できる。値を指定しない場合のデフォルトは
[6.4, 4.8].


(2) Titleを付ける場合

  ax.set_title(label='TOP 10 Stock Price Gainer ', fontsize=25,
       loc="left", pad=0.5,
                 backgroundcolor='green',
                 color='white',
                 verticalalignment= 'baseline')

(2) ax =fig.add_subplot(111)
# figure内の枠の大きさとどこに配置している。subplot(行の数,列の数,何番目に配置しているか)





(3) 表を作成する

(Subplot Parameterの指定)
   plt.subplots_adjust(
        left=0.22,
        bottom=0.11,
        right=0.65,
        top=0.88,
        wspace=0.20,
        hspace=0.20)

left = 0.125  # the left side of the subplots of the figure
right = 0.9   # the right side of the subplots of the figure
bottom = 0.1  # the bottom of the subplots of the figure
top = 0.9     # the top of the subplots of the figure
wspace = 0.2  # the amount of width reserved for space between subplots,
              # expressed as a fraction of the average axis width
hspace = 0.2  # the amount of height reserved for space between subplots,
              # expressed as a fraction of the average axis height

(列幅の指定)
colWidths=[0.1] * 3,

列幅を変える場合は、それぞれ指定する。
colWidths=[0.5, 0.1, 0.2]

(テーブルの場所)
loc=’center’ :表を中央に配置する。


(画像ファイルにした際に表示される大きさ(Scale))
   the_table.scale(5, 5)
( width 5 inches, and its height 5 inches.)
(4) 表の表示の削除
plt.tick_params(axis='x', which='both', bottom=False, top=False, labelbottom=False)
plt.tick_params(axis='y', which='both', right=False, left=False, labelleft=False)
又は
plt.axis(‘off’)

(セルの色を変える)

    # Cell Coloring
    for col in range(data_len):
        col_num= data_len-(col+1)
        if data['Close'][col_num]-data['Close'][col_num-1]>0:
            the_table[(col+1,5)].set_facecolor('#adff2f')
        else:
            the_table[(col+1,5)].set_facecolor('#ff0000') 




(セルの色を変える:)
table.properties()メソッドやset_text_props()等を使って変更
https://matplotlib.org/3.1.0/api/table_api.html

    # Cell Coloring
    table_props = the_table.properties()
    table_cells = table_props['child_artists']
    for i in range(4):
        the_table[(0,i)].set_facecolor('green')
        the_table[(0,i)].get_text().set_fontsize('25')
        the_table[(0,i)].get_text().set_color('white')
        the_table[(0,i)].get_text().set_fontweight('bold')
    for i in range(len(to_csv)):
        n =i +1
        the_table[(n,0)].get_text().set_fontweight('bold')
        the_table[(n,0)].get_text().set_fontsize('35')









https://www.geeksforgeeks.org/matplotlib-axes-axes-table-in-python/


# Implementation of matplotlib function
import matplotlib.pyplot as plt
  
val1 = ["{:X}".format(i) for i in range(10)]
val2 = ["{:02X}".format(10 * i) for i in range(10)]
val3 = [["" for c in range(10)] for r in range(10)]
  
fig, ax = plt.subplots()
ax.set_axis_off()
table = ax.table(
    cellText = val3, 
    rowLabels = val2, 
    colLabels = val1,
    rowColours =["palegreen"] * 10
    colColours =["palegreen"] * 10,
    cellLoc ='center'
    loc ='upper left')        
  
ax.set_title('matplotlib.axes.Axes.table() function Example',
             fontweight ="bold")
  
plt.show()

=================================================================================
こんな図






import yfinance as yf import pandas as pd import numpy as np import matplotlib.pyplot as plt import datetime import matplotlib.dates as mdates from matplotlib.dates import drange from matplotlib.dates import DateFormatter ticker_name="VOO" DJIA = yf.Ticker(ticker_name) data=DJIA.history( period='5d' ) data2=DJIA.history( period='6d' ) data.drop(columns=['Dividends','Stock Splits'],inplace=True) print(data) # Row Label row_labels_pre_sorted= [] row_labels=[] for d in data["Close"].keys(): modified_d = d.strftime('%Y-%m-%d') row_labels_pre_sorted.append(modified_d) row_labels = sorted(row_labels_pre_sorted, reverse=True) # Value row_name=[] for Open, High, Low, Close, Volume in zip(data['Open'],data['High'],data['Low'],data['Close'],data['Volume']): open_p = '{:,.2f}'.format(Open) row_name.append(open_p) high_p = '{:,.2f}'.format(High) row_name.append(high_p) Low_p = '{:,.2f}'.format(Low) row_name.append(Low_p) Close_p = '{:,.2f}'.format(Close) row_name.append(Close_p) row_name.append(Volume/1000000) list1= row_name[:5] list2= row_name[5:10] list3= row_name[5+5:10+5] list4= row_name[5+5*2:10+5*2] list5= row_name[5+5*3:10+5*3] val_list =[list5, list4, list3,list2,list1] table_vals = val_list # New table fig = plt.figure(figsize=(12, 4)) ax = fig.add_subplot(111) ax.set_title('Ticker Name : '+ticker_name, fontsize=36, pad=50) #fig.suptitle('Ticker: Dow Jones Industry Average(DJIA)', fontsize=32) row1 = 'Open' row2 = 'High' row3 = 'Low' row4 = 'Close' row5 = 'Volume(Mil)' col_labels = [row1, row2,row3,row4,row5] # Draw table the_table = plt.table(cellText=table_vals, colWidths=[0.1] * 5, rowLabels=row_labels, colLabels=col_labels, loc='center') the_table.auto_set_font_size(False) the_table.set_fontsize(20) # Cell Coloring if data['Close'][4]-data['Close'][3]>0: the_table[(1,3)].set_facecolor('#adff2f') else: the_table[(1,3)].set_facecolor('#ff0000') if data['Close'][3]-data['Close'][2]>0: the_table[(2,3)].set_facecolor('#adff2f') else: the_table[(2,3)].set_facecolor('#ff0000') if data['Close'][2]-data['Close'][1]>0: the_table[(3,3)].set_facecolor('#adff2f') else: the_table[(3,3)].set_facecolor('#ff0000') if data['Close'][1]-data['Close'][0]>0: the_table[(4,3)].set_facecolor('#adff2f') else: the_table[(4,3)].set_facecolor('#ff0000') if data['Close'][1]-data2['Close'][0]>0: the_table[(5,3)].set_facecolor('#adff2f') else: the_table[(5,3)].set_facecolor('#ff0000') the_table.scale(4, 4) # Removing ticks and spines enables you to get the figure only with table plt.tick_params(axis='x', which='both', bottom=False, top=False, labelbottom=False) plt.tick_params(axis='y', which='both', right=False, left=False, labelleft=False) for pos in ['right','top','bottom','left']: plt.gca().spines[pos].set_visible(False) plt.savefig(ticker_name, bbox_inches='tight', pad_inches=0.05) plt.show()