Quantcast
Channel: AviUtlで自動エンコード へのコメント
Viewing all 13 articles
Browse latest View live

ウィザまん より

$
0
0

コメントありがとうございます。役に立ったという声が聞けるのは嬉しいですね。

私はエンコード元とエンコード先を明確に分けて管理することしか考えてなかったので、ここに掲載したものがすべてです。VBScriptは本件のためだけに学習し、元のスクリプトを改造しただけの知識で、しかも多くを忘れたので、新しいものをサクッと作れる状況ではないです。Pythonなら慣れているのですぐ書けますが、利用者には実行環境を導入してもらう手間が発生しますね。

ただ、実際のところ、ここに掲載しているPythonスクリプトはVBScript版より高性能で、既にマフィンさんのいう要望(入力ファイルと出力ファイルの同居、入力ファイルの拡張子指定)は入っているんですよ。Python版の説明もよく読んでみてください。

なので、急ぐようでしたらPythonをインストールしてもらって、Python版スクリプトを実行してもらうのが手っ取り早いです。入力ファイルの拡張子は複数指定できますので、見よう見まねで適宜書き換えてください。入力元と出力先を同じにする場合、ややこしいことになるので、入力ファイルと出力ファイルの拡張子は必ず異なるものにしてください。そうしないと、次回実行時に前回出力した動画が再びエンコード対象になってしまいます。

また、Pythonスクリプトを使用する場合、2点気をつけることがあります。

1点目。Pythonはバージョン2系と3系で互換性がなくて、ここに掲載したものは2系に合わせて書いたものなので、2系を導入する必要があります。

2点目。スクリプトを適切な文字コードで保存することです。VBScriptは多分Windows標準で採用されているShift_JIS(CP932)という日本語コードをメモ帳などで無意識に使っているはずです。本記事に掲載したPythonスクリプトは1行目でUTF-8というユニコードを指定していますので、UTF-8(BOMなし)で保存します。例えば、TeraPadで編集して保存する際にUTF-8N形式を選択します。私の言っていることがよくわからなければ、メモ帳に貼り付けて、1行目の「utf-8」を「cp932」に書き換えて保存しても動作すると思うので、試してみてください。

現在、プライベートが忙しいため、取り急ぎの返事としました。VBScriptでの対応はあまり期待しないでほしいです。ちなみに、PythonスクリプトはCtrl+Cで中断できます。VBScript(が利用しているWSH)ではこれができません。


マフィン より

$
0
0

早速のご返事ありがとうございます。これほど早くに丁寧なご返事がいただけるとは正直思っていませんでした。お忙しい中申し訳ありませんでした。

まずはPythonを学習してみるところからはじめてみます。昔からプログラム言語関係は何度も挫折していて本当に苦手なのですが、もう一度取り組んでみることにします。あと、わがままついでにもう一点お願いしたいのですが、Python ver.2を導入するのと学習するのにお勧めのサイト等はありますでしょうか?いくつかヒットしたのですが、どれがいいのかまったく判断が出来なくて。色々勉強しながらウィザまんさんのコードを使えるところまでもっていきたいと思います。

マフィン より

$
0
0

マフィンです。

PythonのScriptでテストしてみました。要は機能を使いたいだけであればPython自体を理解する必要はなくて、ウィザまんさんが準備してくれた設定部分を書き換えるのみでOKなのですね。参考にしたサイトで、.pyファイルの置き場所にパス云々の記述があり、よく理解出来ませんでしたが(MS-DOSのconfig.sys?)どうにかテストは出来ました。しばらくこちらでテストしてみます。ありがとうございました。

ウィザまん より

$
0
0

少し返事が遅れました。

そうですね、既に必要な機能は入っていますので、スクリプトの頭の方に寄せた設定項目を書き換えるだけでいいはずです。Pythonの文法に従う必要はありますが、スクリプト中に書いた注意点に気をつけてさえくれれば、見よう見まねでできると思います。

Pythonインストーラは親切なので、パスの登録とファイルの関連付けまでは設定してくれたと思います。どのようにテストしているかわかりませんが、保存したスクリプトをダブルクリック(あるいは右クリック→「開く」)で実行することはできませんか?

できないならば、ファイルの関連付けができていません。ファイルの関連付けは、特定の拡張子(Pythonスクリプトは.py)を標準で開くアプリケーションを決めておくことです。拡張子.pyで保存したスクリプトを右クリック→「プログラムから開く」で、Python(python.exe)を選択(リストになければ「C:\Python27」あたりを探してください)し、今後も使うみたいなチェックボックスがあればそこにチェック入れて、実行すれば関連付けされます。

ちなみに、パス(Path)とは、ファイルの場所そのものですが、Windowsの環境変数にもPathという設定項目があります。ここに実行ファイルが置いてある場所を登録することで、そこが優先検索の対象となります。すると、実行ファイル名を短く記述して実行できたりします。ちゃんと登録できているなら、コマンドプロンプトで「python」と打てば、Pythonが対話モードで起動するはずです(Ctrl+Z→エンターで終了)。今回は気にしなくていいはずです。

バッチファイルやコマンドプロンプト上からスクリプトを実行したければ、半角スペースで区切って「python スクリプト名」というコマンドになります。このように色々と実行方法はあるんですが、関連付けが一番楽だと思います。

MA.IN より

$
0
0

Pythonの方のスクリプトを使わせていただきました。ありがとうございます。
バッチに登録したかったので201行目のplugoutをplugbatchに置き換えました(ここのplugoutだけでいいですよね?)。
それだけではループがうまく行かず、207, 208行目のifからbreakまでをコメントアウトしたところ最後までいけました。
最後にスクリプトのウインドウが消えていかにも完了って感じですが、ループ終了の処理をコメントアウトしているので・・・どうなんでしょう?
ごめんなさい、スクリプトを使いたかっただけのど素人なので中途半端な感じの報告です。

ウィザまん より

$
0
0

返事が大幅に遅れてしまい申し訳ございません・・・。
コメントは読んでいましたが、当時は睡眠時間を削るほど超多忙の日々を過ごしていたため、返事を書けず、そのまま忘れてしまいました。MA.INさんがまだ見ていらっしゃるかわかりませんが、他の人のためにも答えますね。

仰るとおり、201行目の書き換えで動作するんじゃないかと思っていましたが、やはり動作確認してなかったのが甘かったですね・・・。
自力で解決されたようですが、207~208行目のコメントアウト(行頭に#をつける)で正しいです。

ここの処理は、「エンコード後の出力ファイルの存在確認をして、存在していなければ何か問題が起きているはずだから処理を打ち切る」という意図です。バッチ登録処理(plugbatch)に置き換えた場合、まだエンコードしていないのですから、出力ファイルがその時点で存在するはずがありませんね。なので、コメントアウトするしかありません。

報告ありがとうございました。

私の方でもちょっと直したい部分がありますので、ついでに整理したいなぁ・・・。

S より

$
0
0

Auc_v15でここの修正したVBScriptをsample01.vbsに上書きし使ってみたのですが、

Function Auc(command, arg)
Auc = WSHShell.Run(“””” & AUC_FOLDER & “auc_” & command & “.exe”” ” & arg, 2, True)
End Function

行53 文字5 でエラーを吐いてしまいます。 エラー: 指定されたファイルが見つかりません。
OSはWin7 64bitです。
また、Python版では変換したいファイルがあるフォルダ内の1つ目の動画しか変換されません…
使用しているPythonのver.は 2.7.11です。
お時間あるときにご対応お願い致します。

ウィザまん より

$
0
0

ご報告ありがとうございます。

VBScript版は私の方でミスリードがあったようです。AviUtl Controlが見つからないというエラーになります。スクリプト内では、AviUtl ControlをAviUtl本体から見た場所(相対パス)で指定するように説明していましたが、実際にはそういう処理になっていませんでした。チェックが足らず申し訳ありません。AviUtl本体と同様にフルパスで指定すれば動くはずです(記事中の説明も修正しました)。Python版は元々そのようになっています。

Python版では入力ファイルの拡張子を指定する設定(INPUT_EXTENSIONS)を設けていますが、こちらは適切でしょうか?一度、各種設定を確認してみてほしいです。

また、ここで紹介しているスクリプトはあくまでAviUtlの自動操作(ボタンクリックなどプログラムで呼んでる)であるので、変換中に別の作業をしないようお願いします。

問題が解決しないようであれば、私からは判断材料が少ない状況ですので、どんなフォルダ構成で、どんな設定で利用しているか、といった詳細情報を頂けると助かります。Pythonのバージョンはそれで問題ありません。


S より

$
0
0

VBScript版のご対応ありがとうございます。

Python版についてはINPUT_EXTENSIONSで入力する拡張子を指定しております。
どうやら、L-SMASHの方で元ファイルと同じフォルダに作成されるファイル(拡張子 .lwi)が、
必要な動画ファイル(.mkv など)の場合のみ、1つ目の動画しか変換されないようです(;´∀`)

色々とフォルダ構成(Video_source)の場所を変えたり、外付けHDD(E:)やSSD(C:)などで試してみましたが、
事前にAviUtl(v1.00)に変換したい動画ファイルを読み込ませておいて、
変換したい動画のlwiファイルがフォルダ内に作成されている場合、ちゃんと変換されていきます。
他の動画形式(.mp4 .webm)でも試しましたが、同じ症状でした。

短い動画(5分未満)などであれば、問題なく変換されたりするので、
lwiファイルの生成に一定以上の秒数が掛かる場合にエラーになるのかも…?

ウィザまん より

$
0
0

色々と状況調査と情報提供ありがとうございます。私の手元で問題を再現できないので、少しずつ問題の切り分けをして条件を絞っていくしかなさそうです。

> どうやら、L-SMASHの方で元ファイルと同じフォルダに作成されるファイル(拡張子 .lwi)が、
> 必要な動画ファイル(.mkv など)の場合のみ、1つ目の動画しか変換されないようです(;´∀`)

変換できた1つ目のファイルのみ、対応するlwiファイルが生成されているという認識でよいでしょうか?

また、VBScriptでもPythonでも結果は同じということでいいでしょうか?動画の長さによってちゃんと一括変換できることもあったということですので、スクリプト側の問題ではなさそうです。

とりあえずAviUtlのバージョンは最新である1.00ですし、私も同じバージョンで動作確認できているので、本体のバージョンは問題ではないでしょう。

lwiファイルについて調べましたが、L-SMASHの設定で生成しないようにもでき、必ずしも変換に必要なファイルではなさそうです。読み込み時に利用する補助ファイルと思ってください。

スクリプト側でも、AivUtl Control側でも一定時間応答がないとキャンセルする処理は見つかりませんでした。lwiファイルの生成そのものが失敗しているか、その前処理でコケてるかもしれません。1つ目の変換は必ずうまくいくとするなら、状態をリセットせずに次の変換をしようとしてメモリ不足などで失敗している可能性はあるかなと思いました。

従って、次にL-SMASH Works(lwinput.aui)のバージョンを疑いたいところです。lwiファイル生成の失敗が、L-SMASH内で起きた問題だとすれば、他のバージョンのL-SMASHを利用すればバグを回避できるかもしれません(新しくても古くても構いません)。L-SMASHは頻繁に更新されるので、取得したバージョンによってはバグが入り込んでいるかもしれません。L-SMASHのバージョンはAviUtlを起動して、「その他」メニューから「入力プラグイン情報」を選択すれば確認できます。私はr717で動いています。

ひとまずはL-SMASHの問題かどうかを確認させてください。

それでも解決しなければ、どこで終了しているか知る必要があります。以下の手順で、スクリプトをコマンドプロンプト上から起動して、出力結果を教えてほしいです。

1. スクリプトを保存しているフォルダを、Shiftキー押しながら右クリック→「コマンドウィンドウをここで開く」。
2. 「python スクリプトファイル名」コマンドを入力してエンター。もしここでpython.exeが見つからないと言われましたら、「python」を「C:\Python27\python.exe」に置き換えてください。コピーしてコマンドプロンプトに貼り付けると楽でしょう。
3. スクリプトによる自動エンコードの終了を待ち、画面に出力された文字列をコピー(後述)して、ここのコメント欄に貼り付ける。ファイル名など公開したくない情報が含まれていましたら、該当部分を加工して構いません。

コマンドプロンプト上の文字列コピーは面倒ですが、以下の手順でできます。

1. コマンドプロンプトのタイトルバー上で右クリック→「編集」→「範囲指定」。
2. ドラッグで文字列の範囲選択ができるようになるので、コピーしたい範囲を選択する。
3. エンターキーを押す。

やり取りが長くなるかもしれないので、Twitterアカウントをお持ちでしたら、私のTwitterアカウント(@wizamanwizaman)宛に連絡して頂けると、素早い返事ができると思います。

またお手数おかけしてしまいますが、よろしくお願い致します。

ラン より

$
0
0

1年くらい前にこのページに来た際にVB版を拝借し、ありがたく使わせてもらっていました

ただ、数カ月ぶりに動かそうとしたらなぜだか急に動かなくなってしまい
ファイルを動かした覚えもなく、再度こちらのページから持ってきても動かず…
というわけでPhython版を導入してみました

Phython自体初めて触るもので、2.7.12を公式サイトから導入してきました
が、やはりこちらも動かない

txtで作ってコピペしてからpyに変更して実行してみると、一瞬ウィンドウが出てすぐに消えてしまいます

Phython付属エディタから実行するとエラー内容を教えてくれるようなのでやってみると、56行目でシンタックスエラーとなっていました
ユニコード形式とstr形式を混ぜて使うなとかそんな内容らしいですが、今ググってちょっと調べた程度なのできちんと理解しているかは怪しいです

でもって、56行目の
print ‘以下のパラメータが与えられました:’
のuを消去したところ先に進むようになりました

150行目をはじめとするその他の行でも同様に引っかかったので、日本語を表示する部分においてuを消去してみました

この対応で合っているのかはあまり自信がありませんが、他の人の助けになるかもと思いコメントしてみます
変えてみてもし何かあっても責任はとれませんので自己責任で。
とりあえず今のところ問題なく動いています

管理人さん、便利なコードを公開していただきありがとうございます
私が自分で一から作ることは不可能でした

念のため、序盤部分についても載せておきます
多分問題なく設定しているとは思うのですが…

# キャプチャしたファイルがあるディレクトリ
INPUT_DIR = ur’E:\rec’

# エンコードが終わった元ファイルを移すディレクトリ
COMPLETED_DIR = ur’E:\sumi’

# エンコードしたデータを出力するディレクトリ
OUTPUT_DIR = ur’E:\end’

# プロファイル番号(メニューの一番上が0)
OUTPUT_PROFILE = 0

# 出力プラグイン番号(メニューの一番上が0)
OUTPUT_PLUGIN = 1

# 入力ファイルの拡張子
INPUT_EXTENSIONS = [u’.avi’, u’.mp4′]

# 出力ファイルの拡張子
OUTPUT_EXTENSION = u’.mp4′

# AviUtlのフルパス
AVIUTL_PATH = ur’E:\AvuUtl/aviutl.exe’

# AviUtl Controlのフルパス
AUC_DIR = ur’E:\AvuUtl/auc’

ウィザまん より

$
0
0

自分用に作ったものを公開しているため、あまり優しくない状態ですみません。もう少し扱いやすくしたいなと思い続けてはいるんですが、当分このままです。

エラーの件ですが、多分、保存したスクリプトの文字エンコーディングが正しくないんだと思います。エラーメッセージいただければ何が起きているかだいたいわかると思いますが。

ここではUTF-8(BOMなし)で保存するのが正しいです。5番のコメントにも書いたとおりなので、そっちも見てみてください。

ただ、ちょっとPython触ったようなので、Pythonの文字エンコーディングまわりの事情をもう少し突っ込んで説明してみます。

日本語テキストをデータで表現する方法(文字エンコーディング)はいくらか種類がありまして、一貫した文字エンコーディングで扱わないと、意図通りに動きません。Python2.x系での文字列データはstrとunicodeがあります(3.x系はunicodeがstrに統合されたため互換性がありません)。strはただのバイト列であり、それがどの文字エンコーディングによるデータかはわからないため、使用者がしっかり管理する必要があります。一方、unicodeはPythonにおけるユニコード表現ですので、日本語のようなマルチバイト文字もちゃんと1文字として扱えます。

スクリプトを実行するとき、Windowsなのでコマンドプロンプト上で動かしているはずですが、コマンドプロンプトに文字列を表示させるにはCP932という文字エンコーディングで文字列を渡す必要があります。CP932は日本語版Windows標準の文字エンコーディングで、Shift_JISをMicrosoftが拡張したものです。CP932でないstrで文字列を表示しようとすると文字化けしたりエラーになったりします。unicodeであれば、その環境に合わせて自動変換してくれるので管理が楽になります。なので、私は極力unicodeに統一します。

スクリプト内に日本語を含む時は、そのスクリプト自身がどの文字エンコーディングによって表現されているかをPythonに認識させなければ、正しく処理できません。元々の文字エンコーディングがわかって初めてunicodeにできたりするわけです。そのため、スクリプトの先頭で、文字エンコーディングを指定してやります。私のコードだとUTF-8を指定していますので、スクリプトをUTF-8で保存する必要があります。もしCP932で保存したいならば、1行目の「utf-8」と書いているところを「cp932」と書けばOKです(大文字・小文字は不問です)。文字エンコーディングを省略すると、環境次第で扱いが変わるため厄介です。

それから、貼り付けてもらった設定部分に関してですが、バックスラッシュ(円記号)を使うのは避けてください。理由はスクリプト内のコメントとしても書いたのですが、「\u」という組み合わせの文字列が出てくると、ユニコード指定する特殊表記(エスケープシーケンス)として解釈されて意図しない動作をするためです。パス区切り文字はスラッシュに統一するのが安全です。

ラン より

$
0
0

ごめんなさい、動作問題ないとか言っておいて出力されたログ見たら文字化けしてました…
しかもファイルの場所指定に¥使ってることを見落としてましたorz
とりあえずだましだまし変換できてるってだけの状態ですねこれじゃ

ということを報告しようと思ったらすでに詳細な返信がΣ
余計な手間をかけてしまいすみません
返信ありがとうございます

後ほど5番のコメントを読んでいろいろ試してみますね

Viewing all 13 articles
Browse latest View live