Avisynth 初心者質問スレ Part9 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
Avisynthの初心者質問スレです
・質問する前に
1.まずは、過去ログを読むか検索エンジンなどを使って調べましょう
2.次に同じような質問がないかCtrl+Fでスレッド内を検索しましょう
・VapourSynthの話題はできるだけ専用のスレでお願いします
・荒らし・煽りは綺麗にスルーしましょう
■前スレ
Avisynth 初心者質問スレ Part8
http://echo.2ch.net/test/read.cgi/avi/1463062591/
■関連スレ
・Avisynthを絶讃ιょぅょ Part32
http://echo.2ch.net/test/read.cgi/avi/1486535501/
・お前らのショボイAvisynthスクリプト貼ってください part4
http://echo.2ch.net/test/read.cgi/avi/1486693045/
・VapourSynth Part2
http://echo.2ch.net/test/read.cgi/avi/1488452387/
■外部リンク
・Avisynth wiki(英語)
http://avisynth.nl/index.php/Main_Page
・avisynth.info (旧 AviSynth Wiki、日本語)
http://www.avisynth.info/
・AviSynth ニュース
http://news.avisynth.info/ >>279
Hなのはいけないと思います><
じゃなくて、ちょっと落ち着いてスレタイを読もう 誰でも自分PCで稼げる方法など
参考までに、
⇒ 『政道のゴウイウセレイイ』 というHPで見ることができます。
グーグルで検索⇒『政道のゴウイウセレイイ』
B69OCMJ2DY 再生時間の長い動画をエンコードしようとしてるのですが93%付近で必ずx264が落ちます
何回やってもダメでこれは環境に異変が起きエンコがおかしくなってるとしか思えません
当方の環境は概ねx86のAvisynth2.6です
avs4x264modでパイプしtmodを使用してます
12万freamまで行くと落ちるようです
どなたかこのような現象を知っておられる方アドバイスお願いします Windowsのイベントビューアーみて見たら?
多分プラグインがエラー起こしてると思う >>288
見てみたところ、Visual c++ 2012のランタイムエラーが記録されてました
ランタイムに関しては特に古いと言うわけでもないので別の原因があるのだろうとネットで調べますとVSSと言うボリュームとシャドウコピーのエラーによって引き起こされるとの事
エンコとなんの関係があるのか全然わかりませんでした
エンコの失敗は93%まで進むと必ず起きます
大きなファイルですからエンコで読み込むのをシステムがその様に認識したのだろうと言う感じに思ってます
結局原因は良く判らないのが正直なところです >>290
Windows7x64SP1i73930 Ge Force 960
メモリ16GB
Avisynth 2.6
x264tMod r2893 SetMemoryMax(2000)
### 外部ファイル読み込み
Import("C:\Program Files (x86)\AviSynth 2.5\plugins\functions.avsi")
load()
SetMtMode(5,0)
##### LOAD
AVISource("O:\tmp\劇場版_艦これ_JSB1_20180104-1730._raw.avi", audio=false, pixel_type="YV12").AssumeFPS("ntsc_film")
f3kdb(range=4, Y=64, Cb=48, Cr=48, grainY=4, grainC=4, sample_mode=2, dynamic_grain=false, dither_algo=2, keep_tv_range=true, blur_first =false,
/ input_mode=0, input_depth=8, output_mode=0, output_depth=8, random_algo_ref=2, random_algo_grain=2, random_param_ref=1.0, random_param_grain=1.0)#.ThreadRequest(3,3,5)
return ConvertToYV12( せっかく、原因が分かったんだから
とりあえずのVCランタイムの再インストールするべし ついでSetMemoryMaxを3000ぐらいにするとか 289だけど原因解ったんで報告
kModなど他のMod使えばエラーはでない
どうやらtModはバグがある模様
r2851、r2893のx64 8bitの二つを確認した
再現性など不明、自環境のみの問題かも知れない x264の設定も教えてほしい。
tModとkModの両方。
できるなら、kModと同じ設定でtModを使った検証も。 >>297
tModとkModは使えるオプションが同じじゃ無いので同じ設定で検証は出来ないため
検証したと言える程じゃないけど一応言うと
tModで使えるQP値のIPB別設定例えば
qpmin 8,4,0 qpmax 69,69,69
これがkModでは qpmin 4 qpmax 69
tModは fgo 5 kModは fgoは使えない
替えたのはそこだけ
ただtModとkModじゃ挙動が大分違う URLが貼れないのですがとあるサイトを参考にフレーム補完のためAviSynth+MvToolを入れました
手順通りにやったのですが"DirectShowSource:Could not open video or audio"と出て60fpsにできません
エラー文が文字化けているので何のエラーかもわからないです "DirectShowSource:Could not open video or audio"がすべて
エラー文の文字化けは日本語ファイル名前の箇所だと思うけど
文字化けしてても何行目の何文字目かは読み取れるはず >>301
初心者というか、それを読む(調べる)気が無いからここに質問してると邪推してるんだが。
まあこれだけじゃなんなんで俺もエスパーをば。
1、対象ファイルにパスが通っていない
2、"(半角)が”(全角)になっている
ぱっと思いつくことはこれくらいかなー サンプルスクリプトの記述そのまま使っててファイルパスのところ書き換えてなかったりしてな >>300
読み込もうとしてるファイルの形式(コーデックやコンテナ)は?
パスをちゃんと指定してもダメなら対応するDirectShowフィルタ(LAV Filters等)が入ってないというオチもありえる。
ただ、それ以前の問題としていくつかコメント。
1.DirectShowSourceはフレームレートが不正確になったりするので、大抵はLSMASHSourceで読み込んだ方がいい。
2.Avisynth+MvToolsでのフレーム補間記事は、MBlockFPS()を使った古い方法が多いので使わない方が良い。
手っ取り早くやるならSVP(Smooth Video Project)か、InterFrameを使うのがお勧め。
http://echo.5ch.net/test/read.cgi/avi/1407833519/153
3.SVPでやるなら以下参照。DirectShowSourceやffdshow_sourceになってる部分は
LSMASHSourceの記述に書き換えることを推奨。
http://egg.5ch.net/test/read.cgi/software/1490894469/2
http://egg.5ch.net/test/read.cgi/software/1490894469/129 >>304
SVPの方法で無事にできました
本当にありがとうございます だから、DirectShowSourceはトラブルの元になるので使うなと… ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ Avisynth+上で64bitエンコーダーを使用した場合
pluginはすべて64bitで揃える必要がありますか? 当然そうなる
全部64bitのプラグインで揃えられない時(どうしても使用したい32bitのプラグインがある場合)は
中間ファイル等を出力して32bit/64bitを切り替えながらやるしかない、と思う
俺は中間ファイル派だけど他のやり方があるのかもしれん MP_pipelineを使うとどうとか読んだ気はするけど
億劫で試したことない pipeline処理するツールはなん種類かある
x86とx64じゃプラグインが重いほど差が出るからどうにかしてx64プラグイン見つけるかソースあるなら自分でビルドするか他のプラグインで処理するかした方がいい レスありがとうございます
やっぱり64bitで揃えないといけなかったんですね
使いたいpluginに64bitでは揃えられないものがあるので諦めます すみません やはり再度質問させてください
Its.dllの64bitバージョンは存在しないのでしょうか?
それと
RemoveGrainHD.dllにRepairSSE3.dllは内包されている
mt_masktools-26.dllの現在の名称はmasktools2.dll
であっているのでしょうか・・・
解答よろしくお願いします ttps://github.com/nekopanda/Its/releases >>313
pinterf氏のRgToolとMaskTool2でいいんじゃね? >>314
ありがとうございます 一応Itsが動くようになりました
>>315
RemoveGrainとRepairの64bitは無事見つかりました
MaskTool2も大丈夫でした
その後NNEDI3の問題が発生し 一応解決したのですが
今度はNVEncC64が強制終了食らって身動きできなくなりました
恐らくQTGMC関連だと思うのですが 原因が特定できないので 完全な64bit化は断念します
動く範囲でエンコード速度を見ていたところ32bitのときとさほど変化がなかったのも断念する原因です
ただAutoVFRで解析するためのエンコードだけは Avisynth+に変更しただけでエンコード速度が1.4倍ほどあがったので
これだけでも価値はあったかなと思っています
皆さんアドバイスいただきありがとうございました >>317
ありがとうございます そこはすでにチェック済みでした mpeg2を読み込む際にRGBモードにできませんか?
(DVD2AVIとMPEG2DECを使用したが希望の結果は得られなかった)
シネマクラフトエンコーダーで直接MPEG2を読むのが目的です。 色空間の拡張は自動で行われるの?
いわゆるTV階調(16-236)からRGB階調(0-256)へ RGBが必要って珍しいね
RGBで圧縮するコーデックなのかなぁ シネマクラフトエンコーダーって15年以上前のMPEG2エンコーダーだよな・・・?
(シリーズ自体はその後もひっそり続いてるようだが・・・)
いまどき使うもんじゃないし、正規品を持ってたor買ったとも思えないし、
古い記事を見た狂気の割れユーザなのか、タイムスリップしてきたのか・・・ >>324
そうだよね、オワコンってやつだよね。。 >>319
https://ameblo.jp/tenshoku-gokui/entry-12265148335.html
前にここで紹介されてたけど、シネクラなんて使うより、avisynth+hcencの方が断然綺麗にダウンコンバートできるよ。 ありがとうございました。
ConvertToRGBを試しています。("BT601"とかオプションを付けたらそれらしい結果になった)
そもそも何がしたいかと言うと、フルスケールのMPEG2動画をTV階調(16-236)に直したいのです。
CCEは試用版で試しています。
CCEは直接読めないので、aviutl+mpeg2プラグインで読んで、avi(haffyuv)で書き出してから読むとか考えましたが、
結構な時間と大容量が必要なので、いい方法はないものか?という所です。
hcencはDVDforgerっていうので使ったことありますが、うちでは非常に遅いので難しいです。 >>327
手軽に綺麗に変換したいなら、あまり知られてないようだが、DVDfabの動画変換がけっこう高速かつ高画質。
cceはかなりぼやけた画像になりますよ >>328
ありがとうございます。残念ながら目的の変換はできませんでしたが。
cceでぼけるのはリサイズした時でしょうかね。入力がSD解像度では全然ぼやけません。 >>329
そうです、そうです。
ダウンコンバート(リサイズ)を伴わないのであれば、m2v専用高速エンコーダとしてcceはありだと思います。 >>327
元ソースが何であれ、avisynthのl-smashで読ませ、hcencでm2vに書き出す方法ではダメなのでしょうか?
わざわざaviという中間ファイルも不要です。
dvdforgerでhcencを選択するのではなく、hcencgui単体で使用します。
cceと遜色ないくらい高速だと思うのですが。。 avsスクリプト内の任意の変数が未定義か定義済みか検出する方法を教えてください
(エラー出力でmeansエラーが表示されるケースです)
現在は、
blankclip()
#test=true
try {
(test) ? nop : nop
} catch (err) {
test=false
}
(test) ? subtitle("true") : subtitle("false")
と言った形で未定義時のエラーを拾っているのですが、真/偽以外の数値やクリップの場合もエラー判定されしまい上手くいきません
string()で囲ってしまえば回避可能ですが綺麗な形ではない気がして…よろしくお願いします Avisynth+環境でQTGMC(wikiでdownloadした最新版)を使用時に
VirtualDUB32bitやAviutlなどの32bit環境だと
”System exception-integer Divide by Zero (0除算エラー?)
c:/省略/QTGMC.avsi,line 918
c:/省略/QTGMC.avsi,line 473”
が出てしまいます。
VirtualDUB64bitやx264_64bitでは問題ありません。
これはなにが原因なのでしょうか? 続報です
>>334で使用したスクリプトは
Setmemorymax(2048)
aviSource("test1.avi")
Deint24
Prefetch(8) #コメントアウトしても同じ
return last
ですが
読み込みファイルを
video=LWLibavVideoSource("test01.mp4")
audio=LWLibavAudioSource("test01.mp4")
AudioDub(video,audio )
や
videoDGSource("D:\j\rupin_hen\03.dgi")
audio=wavSource("D:\j\rupin_hen\03.wav")
AudioDub(video,audio )
ならば問題なく入出力できました
元のtest1.aviはUt_video+PCMでしたので
これをHuffyuv_mt+PCMに変えましたがゼロ除算エラーが出ました。
なぜ入力がAVIでフロントエンドが32bitのときだけエラーになるのでしょう? >>334
etMemoryMaxは要らないと思うけど
とりあえずQTGMC.avsiの918行目と473行目をを見てみては 918 diff = mt_makediff(Ref, Input, U=3,V=3 )
473 repair0 = (IsClip(srchClip) || Rep0 == 0) ? binomial0 : binomial0.QTGMC_KeepOnlyBobShimmerFixes( bobbed, Rep0, (RepChroma && ChromaMotion) )
918などどうして除算エラーになりえるのかもわかりません あ、そうそう肝心なことを書き忘れたけど、「wikiの最新版」じゃなくバージョンを書いたほうがいいのと
プラグインをAvisynth+用に書き直されたものを使ってるのか(Rgtoolsとかmasktools2とか)も書いた(&試した)ほうがいいよ
それとavisynth+のバージョンも
とりあえず
aviSource("test1.avi")
QTGMC()
Prefetch(8) #コメントアウトしても同じ
return last
で試してから周辺環境を見直してみてはどうだろう Avisynth+自体がr2636に更新されましたので差し替えました
QTGMCのver.3.357です
QTGMC使用dll
http://avisynth.nl/index.php/QTGMCにあるCore Plugins and scriptsとOptional Plugins and Scriptsのdllは
AviSynth+ x64 plugins
http://avisynth.nl/index.php/AviSynth%2B_x64_plugins
にあるものを使用しています
そして
aviSource("test1.avi")
QTGMC()
Prefetch(8) #コメントアウトしても同じ
return last
としてもやはり同じエラーです
なお今回の症状で当方は特に困っているわけではありません
前記の通りAVIsourceを回避したりそもそも64bitアプリだけ使うならエラーが起きていないからです
ただ単に「32bit環境で内部関数であるAVIsource使用時のみ起こりうるエラー」というのが不可解なので質問してみました 自分もそんなに詳しい人間じゃないけど
AVISourceの直後にinfo()書いて見る
変な色空間で読み込まれていたら処理出来ないかも? >>331
l-smashを調べてやってみましたが、動きませんでした。(古い環境なので…)
MPEG-2 VIDEO VFAPI Plug-Inを使った方がファイル指定が簡単なんですが、異常なmpgファイルが出来上がりました。kmplayer等では正常再生せず。
hcencですが、コントラストの弱いディテールが潰れぎみです。DC精度10ビットにしても変わらず。
量子化マトリクスで調整できるんでしょうか。 またAvisynthPlus+CUDA(64bit)環境作るぞ
半年前ぐらいはあんまりキチンと動いてくれなかったけど
そろそろ安定したでしょうか >>342
もし差し支えなければ、その元動画ファイルの一部でもいいので、アップしていただければ、こちらでm2vに変換してみますが。。
ちなみにマトリクスはavamat6を使用しています。 avsを読み込める動画プレイヤーってGOM Player以外にあるのでしょうか?
AvsPmodだと音声が出力されないので 手動でカットする位置を決める際に分かり辛い場面があるので質問してみました >>346
警告が出て コーデックかフィルタがインストールされていない可能性があると言われます
tsファイルをL smash worksで読み込みさせていて AvsPmodで動画自体は再生されているので
コーデックが入っていないということはないと思うのですが・・・
ちなみにavsの中身はこんな感じです
TSFilePath="tsファイルへのパス"
LWLibavVideoSource(TSFilePath, repeat=true, dominance=0)
AudioDub(last, LWLibavAudioSource(TSFilePath, stream_index=1, av_sync=true, layout="stereo"))
MPCはx86 x64両方試しましたがダメでした
試しにDirectShowでも読み込ませてみましたがすぐMPCが強制終了してしまいます
何が足りないのでしょうか・・・ >>344
動画はTV番組録画ものですが、どうなんだろう。
あまり良いサンプルとは思えないので、とりあえず静止画を切り出しました。
http://uploader.skr.jp/src/up10300.jpg
hcencは単体の新しい0.28です。ColorYUV(PC->TV)をかけたので薄くなってます。
茶色い洋服の模様がCCEでは残っていますが、HCencは消えています。
量子化マトリックスとかいじってみましたが、変化は感じませんでした。(レートは6Mbps位)
まあビットレートを10Mとかやたら上げれば潰れも少なくなったけど… 👀
Rock54: Caution(BBR-MD5:253fc2aa556f23fd380715eaf660424e) >>348
あー 確かにそうですね なんで気づかなかったんだろう >>347
MPCといっても、BEの方の内臓フィルタ(スプリッタ)にはAvisynthの項目がないっぽい。
LAV Filtersを入れて優先設定するか、HCを使えば普通に再生できると思う。
まあ>>348の言うとおりAviUtlの方がよさそうだけど。 >>351
レスありがとうございます
MPC-HCを使ってLAV Filtersも入れたんですがやはり再生されませんでした
おとなしくaviutl使います >>352
解決しちゃったっぽいが
convertToYUY2()
が足りないんだと思う >>352
どれも最新にしてMPC側でLAVの各フィルタの優先登録もしたのかな?
それでもダメとなると、変な設定してるか、変なフィルタが邪魔してるくらいしか思いつかないや。
>>353
それは関係ない。 >>353さんの方法で無事動画が再生されました
長時間にわたりレスしていただきありがとうございます これでGOMプレイヤーとおさらばできます んん・・・?なんだそれ。普通ならYV12(I420)も再生できるはずだが・・・。
I420だけ何かが阻害してるとかなのかな。まあ解決したならいいか。
いまいち釈然としないけど、>>353は関係ないとか言ってすまんかった。 L-SMASH-Works絡みです
・L-SMASH-Works-r929-20170225-32bitやL-SMASH-Works-r929-20170224-64bit
・LSMASHSource-AviSynth-plugin-r929-msvc-64bitやLSMASHSource-AviSynth-plugin-r929-msvc-32bit
の違いってありますか?
フレームレートスレで出たL-SMASH-Works-r929-ffmpeg-fix2は後者だと思いますが前者はバグは無いのでしょうか? >>357
普通そういうのはURLも書くもんだと思うが・・・まあAvisynth Wikiのとこなんだろうが根本的に勘違いしてる。
バグ
・ffmpegのfield picture structure関連のバグ。最近のBSのTSデコードで映像が崩れることがあるというもの。
今年2月上旬にffmpeg本家にnekopanda氏のパッチが入ったので、
その後のffmpegをリンクしてビルドしたL-SMASH Worksを使えば問題ない。
Avisynth wiki: http://avisynth.nl/index.php/LSMASHSource
・L-SMASH-Works-r***〜は、Avisynth用がSharedビルド(?)で、AviUtl用とVapoursynth用も含む。
・LSMASHSource-AviSynth-plugin-r***〜は、Avisynth用のみ。Staticビルド。
・ffmpegのパッチはOpus関連で1つ当ててるようだが、それ以外は不明。
・r929は昨年2月にビルドしたものなので、当然上記のバグは修正されていない。
・VS2015ビルド
フレームレートスレで出たnekopanda氏版: https://github.com/nekopanda/FFmpeg/releases
・Avisynth用とAviUtl用。
・ffmpegは3.4に上記のバグ修正パッチを当てたもの。
・MSYS2/GCCビルド >>358
内容が同じなら書かなかったのですが・・・例えばx86で比較すると(AviSynth用)
L-SMASH-Works-r929-20170225-32bit
・avcodec-57.dll (10.3MB)
・avformat-57.dll (1.59MB)
・avresample-3.dll (147kb)
・avutil-55.dll (653kb)
・LSMASHSource.dll (524kb)
・swscale-4.dll (496kb)
LSMASHSource-AviSynth-plugin-r929-msvc-32bit
・LSMASHSource.dll (9.36MB)
L-SMASH-Works-r929-ffmpeg-fix2
・LSMASHSource.dll (11.3MB)
自分は前者しか使ってなかったのでこの容量の違いから後者の差し替えかな、と単純に思ったわけです
細かくご教示ありがとうございます >>359
ファイル構成が違うのは、ビルド時の設定で、staticリンクしてるか、dynamicリンクしてるかの違い
ファイルが1つしかないやつはstaticリンクで全部そいつに含まれてるから
中身の違いとはあまり関係ない >>フレームレートスレで出たnekopanda氏版: https://github.com/nekopanda/FFmpeg/releases
dr = True で映像出ないな >>362
ただの誤判定じゃ?、ウィルス判定したBaidu自体があれだし とは思うんですけども・・
ところで、↓をThreadRequestを使うようにするにはどうしたらいいんでしょうか?
https://github.com/chikuzen/AvsReader/blob/master/YUY2Converter.avsi
作者のChikuzen様のBlogにてThreadRequest使わないと速度が出ないとのことなので
ThreadRequestについて調べてるのですが・・ threadrequestってなぜか姿消したよね
ソースコードとってあってよかったよ avisynthのフレーム補完スクリプトを使用する時、30fps以下の動画にのみ適用する記述ってどうすればいいですか?
60fpsの動画再生時にも何かしているようで処理が重くて動画がカクついてしまいます avisynthのフレーム補完スクリプトなんていくらでもあるわけで
スクリプト自体貼ってくれないとアドバイスしようがない >>367
すいませんこれです
http://i.imgur.com/x49hclY.png
もし動画が30fps以下ならこのコードを適用、それ以外なら何もしないといった感じにしたいです hokanClip = (FrameRate() <= 30) ? InterFrame(〜) : last
hokanClip
でいいんじゃね。 >>369
スゲー一瞬で解決しました!ありがとう! スクリプトを動かしているプロセスの実行ファイルのフルパスを取得したいのですが
どうしたらいいのでしょうか?
http://forum.doom9.org/showthread.php?p=1260276#post1260276
で配布されているProgramName.dllプラグインを試してみたのだが、取得できるのは
フォルダーパスが省略されて "ファイル名.拡張子" だけとなっています。
呼び出し元のアプリ毎の処理をスクリプト側で?:演算子を使って条件分岐させる必要が
出てきたのに、対処法が見つからなくて困っています。 >>372
使用アプリはコンソールアプリとは限らないためバッチファイルは使えません。
1つのスクリプトを複数のアプリで共有しなければならないケースが最近よくあります。
特に、多数のメディアプレイヤー等のDirectShowアプリから呼び出される
ffdshow video processorでAvisynthを使う時、ffdshow標準のプリセット自動読み込み機能
だけでは対応しきれない複雑な条件分岐を?:演算子とユーザー定義関数で実装する必要性が
出てきました。
そのためにも、呼び出し元のアプリが何であるかをはっきり識別できる必要があります。
ProgramName.dllプラグインは "C:\foo\foo.exe" も "C:\ber\foo.exe" も共に "foo.exe" を
返してしまうためこの2つを区別することができません。
またバッチファイルのIFコマンドなども、対応アプリがコンソールアプリ等コマンドラインでの
自動実行に対応したものでなければなりません。 状況がよくわからんので見当違いになってしまうかもしれんが
C:\bar\foo.exeをfoo_bar.exeに名前を変えて運用してしまう とか 実行ファイルのパスによって処理を変えるという時点で、
前提条件を見直した方がよさそうな気はするよね。 呼び出し元のアプリごとに処理が代わるならそれごとにスクリプト組むのが普通だわなぁ
同一スクリプトでコメントアウトで対処することも多いけど
呼び出し元アプリがCLIだけじゃないっていうんだからバッチで振り分けてるわけではなく
ユーザー自身がそのスクリプトをどのアプリに食わせるか判断してるわけだし
自分で判断できるなら自分でコメントアウト箇所いじれるでしょという気はする >>376
ffdshowでAvisynthを使うという例が書いてあるんだから、
「複数のアプリがffdshow経由で同一スクリプトを呼び出すので
そのスクリプトの中でアプリごとの分岐処理がしたい」
という要望自体は理解できるんじゃないか? ttps://github.com/enccc/AviSynth-GetProgramName2/releases
GetProgramNameがフルパス取得できないらしいので、新しく作り直してみた
名前は衝突しないようにGetProgramName2(bool "full_path")にしてる
full_pathはデフォルトでfalseだから何もしなければGetProgramName()と同じように動くはず
GetProgramName2(true)とするとフルパスが取得できると思うんだけど、どうかな?
おまけでGetProgramName2_Util.avsiも付属してる
オートローディングするなりImport()するなりしておけば、GetProgramName2()をGetProgramName()で呼び出せたり、
GetProgramDir()でフルパスからプログラム名を除いたフォルダ名までのファイルパスを返してくれる
1時間半ぐらいで書き上げた手抜きの即席プラグインなのでうまく動かなかったらすまねぇ・・・
それと動作に追加でインストールが必要なランタイムはないはず ごめん追記で書かせてもらうけど・・・
仕様として、内部でワイドバイト文字列からマルチバイト文字列に変換してるんだけど、
その時に変換できない文字があると「?(半角疑問符)」に置き換わるようになってます
なので使うときはそういう文字がないようにしないと
取得したプログラム名やパスを文字列比較などに掛けて分岐する時に問題が起こるかもしれない
まぁよほどファイル名やファイルパスに特殊な文字を使ってないと引っかからないと思うので
そこまで気にしなくてもいいはず
このプラグインの原案は結構前に出来上がってたんだけどやる気失ってた所だった
ちょうどピンポイントに困ってる人がいたのでやる気振り絞って書ききってみた 動くか分からないけど・・・ >>378
横から光の速度で頂いた
2バイト関連は確認してないが、32bit/64bit共にエラーなく動いてるthx >>378
わざわざプラグインを作ってくれてありがとうございます。
早速試してみましたが、残念なことにうまく動作しませんでした。
まず、アプリのパスが "C:\folder\app.exe" であり、環境変数%Path%に "C:\folder" が
追加されているものとします。
そして、コマンドプロンプトから
>app
として起動した場合、
GetProgramName2(true) = "app"
GetProgramName2(false) = "" (長さ0の文字列)
となってしまいます。
一方、
>"C:\folder\app.exe"
とちゃんとフルパスを打ち込んで起動した場合は、
GetProgramName2(true) = "C:\folder\app.exe"
GetProgramName2(false) = "app.exe"
と正しい値を返してきます。
たぶん起動時のコマンドラインをそのまま解釈している仕様のためと思われます。 あとそれから、今かなり強引な手法でアプリのフルパス等のプロセス情報を取得する方法を
思いつきました。
まず、AvisynthからVBScriptの実行を可能にするwarpsharp.dllプラグインを導入します。
次に、VBScriptからWin32APIをはじめ任意のDLLを呼び出し可能にするSFC miniを導入します。
そして、SFC miniを使ってkernel32.dllのGetCurrentProcessId()関数を呼び出しアプリの
プロセスIDを取得し、これに基づくプロセス情報のオブジェクトをWMIを使って取得するコードを
VBScriptで書きます。
あとはこのVBScriptをwarpsharp.dllプラグインのWScript()/WSInvoke()フィルターを使って
呼び出すだけです。
時間があるときにこのVBScriptのコーディングに挑戦してみようと思います。 >>381
空文字列が返ってくるのはすまねぇ俺のミスだ
ちょっと今修正してる
ご指摘の通り、コマンドライン引数を取得して呼び出したプログラムの文字列を取り出すから、
呼び出したコマンドがフルパスじゃないの想定してないんだよね・・・
修正方法は考えるけどちょっと時間かかるかも ttps://github.com/enccc/AviSynth-GetProgramName2/releases
怪しそうな所少し変えたけど空文字返ってくるのはこれで直ってる? ■ このスレッドは過去ログ倉庫に格納されています