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/ また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 怪しそうな所少し変えたけど空文字返ってくるのはこれで直ってる? 連投ごめんなさい ttps://www.axfc.net/u/3904037 > そして、コマンドプロンプトから > >app > として起動した場合、 これをちょっと何とかしてみようとやってみた 手元でavs2pipemod -y4mp input.avsとすると、 GetProgramName2(false)でavs2pipemod.exe、GetProgramName2(true)でC:\hogehoge\avs2pipemod.exe、 と表示されててパット見改善できたっぽいんだけどどうかな? ちゃんと動くようなら正式にソースコード書き換えたいんだけど・・・ 私は寝るので本格的に反応できるのは明日の夕方以降になるかもしれません ID:o1+lgvL90さんじゃないけど 勝手に直したよ GetProgramName2_0.1.1_mod https://www.axfc.net/u/3904208 コマンドライン引数のパス情報を使うのをやめてWin32 APIから直接パス取得するようにした ttps://github.com/enccc/AviSynth-GetProgramName2/releases 手元では問題ないっぽいからアップした バイナリは>>385 と殆ど変わらないはず >>386 ごめん入れ違いになったけどGetModuleFileNameを使うやつ今あげちゃった 後日読んで参考になった所あったらソースにいれちゃうね avisynth2.5.8MTを使ってて、avisynth+を導入してみたのだが、その後aviutlを起動すると応答なしになる。 avisynth.dllを元に戻すと正常に使えるようになるので、ここだと思うのだけど、+にする場合、他に何か必要なものあるんです? 結構調べたのだけどわからず… もしかして、以前の2.5.8がいたらダメとかある? 環境 os:windows7 64bit pro avisynth2.5.8MTは同居 >388 例えば Avisynth 2.6.0 MT 32bit Avisynth+ xxxx 64bit の同居はできるけど、32bit同士は同時同居はできないんじゃ? avisynth.dllの差し替えが毎回必要になると思うのと 両方で使えるプラグインだけに絞らないと変になりそう >>388 AviUtl側でAVSを読むために使っている手法というかプラグインは何? >>388 うーん やはり+入れてるのに、2.5.8がいるのが悪いのかな >>390 pop@4bit氏のL-SMASH Worksつかってますね。 2.5.8ではavspmodからaviutl呼び出して、編集とか可能です。 aviutl単体で起動しても、応答なしになります。 「同居させてる」ってどういうこと? 以前のavisynth.dllを残したままplusを導入することはできないと思うのだけど・・ >>392 同居というか、設定ファイルとかは残してるってだけですね。 systemの方には+のavisynth.dllしかおいてないです。 なんか、avsfilterが悪さしてるっぽいのを、参考サイトの管理人から教えていただいたので、帰宅したら試してみます。 全体的に説明不足すぎる。何をもって同居と言ってるのかさっぱりわからん。 設定ファイルってなんのことだよ。「2.5.8がいる」ってどこにだよ。 どのバージョンのAvisynth+をどういう方法でインストールしたのかとか 状況を他人にわかるように説明する努力くらいしてくれよ。 そもそもAviSynthに設定ファイルなるものは存在しない そして同時に複数のAviSynthは同居できない(32bitと64bitとで別バージョンを使う場合を除く) AviSynth側の問題なのかAviUtl側の問題なのか切り分けてない わざとなのか天然なのかわからないが問題が発生する状況を詳細に書かずぼかしている これで解決させられるほどこのスレエスパー揃いじゃないよ 他の人も言ってるけど何をしたら問題が起こるのかを特定して、その現象が発生する最低要件を見つけて、 これ以上簡単に再現する方法が無いだろうというところまで絞り込んだ上で質問したほうが質問する側も回答する側も回答しやすいし解決しやすい あれ?ID被ってるや 午前中に書き込んでる人とは別人なのでよろ 2.5.8環境は完全に捨ててr2664なり+CUDAにした方がいいんじゃないの 同居といってるのは、C:¥Program Files (x86)¥にavisynth+と2.5.8があることを指してます。 事象は>388で言っていますが、avisinth+導入して、avisynth.dllが差し変わるとaviutlが起動しても応答なしになります。 http://avisynth.nl/index.php/Avisynthplus/Downloads ここから、本家r1574を入れたあと、avisynth+r2664を入れています。 aviutlは99hのバージョンです。 おそらくaviutl側の問題だと思ってますが、どのようにしたらaviutlがavisynth+で動くようになりますでしょうか? >>398 avsfilterはaviutlからavisynthのプラグイン・関数を使うためのやつだっけ? おそらくavsfilterのソースを改造するしか対処法はないと思う とりあえず2.5.8なavisynth.dllをavsfilterと同じディレクトリに置いてもダメだったら諦めるしかないと思う r1574のインストーラだと、古いAvisynth環境をバックアップするというオプションがあるんだっけか。 AviUtlも古いし、avsfilterなんぞ今時使うこともないだろうから、 AvisynthもAvisynth+もAviUtlも一度全部アンインストールして、 AviUtl 1.00とAvisynth+ r2664をゼロからインストールした方がいいと思うよ。 試しにavsfilterでWarpSharp呼び出してみたけど+だと応答無しになるね >>399 が書いてる通りaviutlのフォルダに2.5.8のdllとavsfilter置いとけば一応動く >>399 そうです aviutlでavisynthのプラグイン使えるようになるやつです。 先程帰宅したので、avsfilter.dllを2.5.8のディレクトリから外したら、起動できるの確認できました。 avisynth+だとavsfilter.dllはNGなのがわかってスッキリしました。 皆様ありがとうございます。 理解できてない気がするので質問です インストーラすると avisynth.dll (x86)他、avisynth.dll (x64)他 ができますが自分は今はx264(x64)をx86で実行させていますがavisynth.dll(x64)で実行させるにはどうしたらいいのでしょうか? (そうすればパイプを通さ無くなるのとavisynth.dllのx64が使えるため早くなる・・・はず) x86とx64の両方のインストールはロゴ確認、Trimがあるためaviutlがあったほうが便利なので使っています ご教示お願いします x264(x64)をx86で実行はできません もっと正しい環境を書いてください >>403 もうちょっとわかりやすく説明しようか 日本語や用語の使い方からして怪しいぞ avs2pipemod -y4mp "input.avs" | x264(x64) - --profile high [option] --demuxer y4m -o output.mp4 AVSはx86だと思いますが違いますか?(AvsPmod(x86)で読ませています) パイプ入力をやめたら早くなるとかいうものじゃないと思う(パイプ入力のペナルティーは最小の意味) avs2pipemod64.exe(つまり64bit版)をフロントエンドに使えば64bit版avisynthが使われる >>406 avs2pipemodがx86ならAviSynthもx86が呼び出されているね もしAviSynth x64を使いたいなら、x264 x64に直接読ませればいい avs2pipemodのx64版を使ってもいいけどな 君の書いてる書式に合わせるなら x264(x64) "input.avs --profile high [option] -o output.mp4 当然ながらAviSynth側もx64が使われるんでプラグインとかも要チェック >>407-408 試してみます、ありがとうございます(まだもやもやしていますが・・・) >>409 ・64bit(x64)のアプリからavsを呼び出せばx64のAvisynthが使われる ・32bit(x86)のアプリからavsを呼び出せばx86のAvisynthが使われる という極めて単純な話なんだが・・・。 >>409-410 説明ありがとうございます(まだ稼動はしていませんが・・・(avsのinportでerrorが出たため)) >>411 2,58→2.58MT→2.6MTSEt氏ビルド→2.6.1Alpha1→AviSynth+ の順番で切り替えていきました、2.6MTが長かったです +が出たのは把握していましたが難しそうだったので2.6.1Alpha1を使ってみて 貧弱なPCでのやりくりで疲れてr1576(x86)を使ってみてそこそこ速度が出たのでr1576のままいくか r2664MTへいくかは迷ってます(txt60mcHybrid/ivtc_txt60mcがr1576より遅くなったので) ※CUDAは非対応らしく諦めました >>412 32bitは 2.6MT 64bitは +CUDA だわ 2.6MTは息が長いな・・・ 電気代を気にしてGPUがしょぼいから まだまだ32bitつこうてるわ DVD2AVIのスレが落ちてるのでここで DGIndexのBS11対応版、最近のBS11のTSで フィールドオーダー入れ替えますか?が出るね YES押したらおかしくなるのでNO押してる 新しい対応ビルド待ち >>414 GUIを起動しなんたらflagsの設定を変える AviSynth2.6 MTを導入したところL-SMASH Worksで読み込みをすると 「[Fatal]: Failed to avformat_open_input」 と表示されて読み込めないのですが、相性の問題なのでしょうか...? ちなみにDirectShowSourceでは真っ暗になったり画面崩壊したりするいつもどおりの状態ですが、使えることは使えました。 お世話様です。 クリップの一部を別クリップの同じシーンに差し替えるという編集をしたいんですが 「クリップ1のフレームAからフレームBまでの範囲を、クリップ2のフレームXから同数の フレーム分だけ置換する」というようなユーザー定義関数はありませんか? >>418 パッと思いつかないんだけど、構想ができてるのなら自前で作ってしまっていいと思うよ >>419 この機に覚えますか・・・ >>420 試そうかと思ったんですけど、これってクリップ2(sourceClip)の開始フレーム指定とか出来ないのでは? >>420 そういやRemapFramesってあったなぁ >>421 ttps://pastebin.com/Xhnu7j2s 頭の体操ついでに作ってみた ものすごく簡単なチェックしかしてないから動かなかったら済まない 細かいエラーチェックしてないから完成度高めたければ自分で弄ってくれ >>422 ありがとうございます。参考にさせてもらいます。 いよいよだったら音声を分離 2つのクリップをtrimしたのち結合して音声audiodubしか思いつかんは >>418 RemapFramesに入っている関数で楽にできる。 ReplaceFramesSimple(V01,V02,mappings="[0 250] 300 [400-500] ") これでV01の映像上にV02の映像をマッピングで指定したフレームのみ置き換え。 詳しくは英語wikiにも書いてあるけど、それでわからなくて俺でわかることなら少しはサポートできるかもね よくよく考えたら、これだと同フレームしか差し替えできないからだめか もう面倒だからほかの人も言っているtrimを使って力業でもいい気がしてきた。 V01.trim(0,100)++V02.trim(50,100)++V01.trim(150,300) こんな感じでさ さっきかいたやり方だと1フレームづつずれると突っ込まれそうなので修正 V01.trim(0,99)++V02.trim(50,99)++V01.trim(150,299) >422さんのスクリプト見たら自分の書き込みが悲しくなったのでとりあえずMod作成。 ReplaceClipMod(clip base, clip alt, int start_base, int start_alt, int length) baseクリップの設定開始フレームからaltクリップの開設定フレームをlength分だけ置き換えます しょぼいスクリプトに張ろうかと思ったけど無いので次に。 function ReplaceClipMod(clip base, clip alt, int start_base, int start_alt, int length) { Assert( !(start_base < 0 || start_alt < 0 || length < 1), "ReplaceClip: start must be the positive number") Assert( !(FrameCount(base) < start_base + length), "ReplaceClip: length is too large (check the frame count of base)") Assert( !(FrameCount(alt) < start_alt + length), "ReplaceClip: length is too large (check the frame count of alt)") audio = KillVideo(base) video = (length == 1) ? trim(alt, 0, -1) : trim(alt, start_alt, start_alt + length -1) video = (start_base == 0) ? video : (start_base == 1) ? trim(base, 0, -1) + video : trim(base, 0, start_base -1) + video video = (FrameCount(base) == (start_base + length)) ? video : video + trim(base, start_base + length, 0) return HasAudio(base) ? AudioDub(video, audio) : KillAudio(video) } >>430 >422さんのはbaseクリップの設定開始フレームから設定終了フレームまでをaltに置き換える ReplaceClip(V01,V02,50,100) は ReplaceFramesSimple(V01,V02,mappings="[50 100]") と同等。 >429を使って同等にするなら ReplaceClipMod(V01,V02,50,50,50) ただmodのほうはbaseクリップとaltクリップの開始フレームをずれして設定ができる ReplaceClipMod(V01,V02,50,200,50) これはbaseクリップの50フレームから50フレーム分をaltクリップの200フレームから50フレームに置き換えることができる V01 = V01.ShowFrameNumber(x=24, y=48, size=36, text_color=$ffffff) V02 = V02.ShowFrameNumber(x=24, y=48, size=36, text_color=$ff00ff) ReplaceClipMod(V01,V02,50,200,50) こうやってフレーム数を表示させながら確認するとわかりやすいよ あ、また書き間違えてた ReplaceClip(V01,V02,50,99) は ReplaceFramesSimple(V01,V02,mappings="[50 99]") と同等。 と50フレームにしたほうがわかりいいね またもやミス発見 video = (length == 1) ? trim(alt, 0, -1) : trim(alt, start_alt, start_alt + length -1) は ↓ video = (start_alt == 0) && (length == 1) ? trim(alt, 0, -1) : trim(alt, start_alt, start_alt + length -1) に変更したほうがいいな 割と需要あったみたい?だからちょっと丁寧に書き直したよ ttps://pastebin.com/vy851k1i start = 1 の時に不正な動作をするのを修正 endが0や負の数の時に不正な動作をするのを修正 というより入力したらエラー出して弾く 2つの入力クリップの解像度と色空間さえあっていれば、 映像のフレームレート、音声の有無、音声のサンプリングレート、音声のサンプルタイプが違っていても処理を可能とした 今までどおり、フレームレートも音声も全てbase側のものを使うようになっている altの方にoffsetをつける用にした方が良いのかなとは考えたけど中身がすごく複雑になるし、 ReplaceClip(base, alt.Trim(x, y), start, end) みたいにして調整できるし良いかなって・・・ >>436 > altの方にoffsetをつける用にした方が良いのかなとは考えたけど中身がすごく複雑になるし、 > ReplaceClip(base, alt.Trim(x, y), start, end) > みたいにして調整できるし良いかなって・・・ それだと ReplaceClipMod(V01, V02, 200, 100, 50) みたいな感じでbaseクリップより若いaltの開始フレームだとまた書くのが面倒になるのでは? って思ってもみたり まあ俺もMod作っておいてなんだけど、普段ならtrimだけで処理するよなーと >>437 確かに普段はTrimでするかな というより、普段から映像置き換えとかしないからなぁ・・・ あえて関数を作ったりプラグイン関数を導入してまでやろうとしなかったっていうのが正解に近い >>72 作者さんまだ見てらっしゃるかわかりませんが質問です。 こちらの関数を使うと不正なストリーム出力扱いにされるんですが、 原因わかりますでしょうか? ※AvsPmodの場合 ----- Traceback (most recent call last): File "avsp.pyo", line 9061, in OnMenuVideoToggle File "avsp.pyo", line 13855, in ShowVideoFrame File "avisynth.pyo", line 462, in GetFrame WindowsError: [Error -1073741795] Windows Error 0xC000001D ----- ※MPCの場合 ----- CAVIStreamSynth: System exception - Illegal Instruction at 0x6e972509 ----- ちなみに最後のTDecimateを取り除くと一応エラーを出さずに表示できます。 (勿論意図した出力結果ではありませんが) >>439 tdeintは相性がきつい感じだからyadifmod2にでも置き換えたらいいのでは とりあえず↓な感じにしたら動いた function TDecimate24P7A2(clip clip){ video=clip Interp=video.nnedi3(field=-1) mask_clip=combmask(video,cthresh=10,mthresh=10) clip_0=video.yadifmod2(edeint=interp) clip_deblock=video.yadifmod2(edeint=interp).deblock(quant=16) filt_clip=MaskedMerge(clip_0, clip_deblock, mask_clip,MI=60) clip1=video.yadifmod2(mode=0) clip2=clip1.mt_lut("128", chroma="0", offx=120, offy=24, w=420, h=230).mt_lut("128", chroma="0", offx=260, offy=920, w=1320, h=80).TDecimate(mode=1,clip2=filt_clip) return clip2 } セットアップするのがめんどくさかった eedi3と smoothD2は消したけどお好みで >>441 レスありがとうございます。 ただ貼っていただいた関数でも解消しなかったので、読み込みプラグインを 最小限にして手あたり次第試してみたのですが、CombMask-1.1.0を CombMask-1.0.0に変更したところ件のエラーは出なくなりました。 が、出力されたクリップのロゴ部分にNR効果が適用されているようには 見えないのですが、私この関数の効果を勘違いしてます? ロゴじゃないね 圧縮効率が悪くなるインタレ縞だけフィルタリングするものだから ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる