スポンサーサイト

 --, -- --:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

VapourSynth - コマンドラインでエンコード

 24, 2012 21:34
VapourSynth r9 以前の場合は vpy ファイルを x264 に渡す為に
一度 python を通さなくてはなりませんでした。
コマンドプロンプトではそのような処理のことをパイプと呼んでいます。

下記がパイプを使ったエンコード例

### enc.bat
python enc.vpy | x264 --demuxer y4m - -o enc.mp4

### enc.vpy
import vapoursynth as vs
import sys
core = vs.Core()
core.avs.LoadPlugin(r'C:\Program Files\VapourSynth\plugins\DGDecode.dll')
c = core.avs.MPEG2Source(r'C:\encodeVS\enc.d2v')
c.output(sys.stdout,y4m=True)

bat ファイルを上記のように記述すると、「|」の左側を先に処理し、その出力結果を右側に渡します。
vpy ファイルを直接 x264 に投げても x264 はそれがビデオデータだということが分からないので
python が通訳してくれるという解釈でとりあえず使えます。

python と x264 で、やり取りするデータのビデオ形式を統一する為に
vpy ファイル側では、出力パラメータの y4m=True を設定し bat ファイル側では
--demuxer y4m オプションを記述してください。
これによって、y4m(YUV4MPEG2 形式)としてデータの受け渡しが出来るようになります。


VapourSynth r10 からは、VFW モジュールの追加によって、vpy ファイルを DirectShow などを通して Windows 上でビデオデータとして扱えるようになりました。
その場合、vpy ファイル上で VideoNode インスタンスを last に代入してください。
そうするだけでコマンドライン上では avs と同様の扱いが可能になります。

下記がパイプを使わない場合のエンコード例

### enc.bat
x264 --demuxer avs -o enc.mp4 enc.vpy

### enc.vpy
import vapoursynth as vs
import sys
core = vs.Core()
core.avs.LoadPlugin(r'C:\Program Files\VapourSynth\plugins\DGDecode.dll')
c = core.avs.MPEG2Source(r'C:\encodeVS\enc.d2v')
last = c

--demuxer はデフォルトで auto なので、省略も可能です。

とりあえず出力するだけなら上記の2パターンで出来ました。
私も手探りで調べている最中なので、何処かおかしなところがあったら教えてください。

今後は高速化とか調べて見ようと思います…



twitter
↑参考になったという方は、是非記事のツイートをお願いします





関連記事
VapourSynth - 第1回 環境構築
VapourSynth - 第2回 読み込み、CMカット、リサイズまで
VapourSynth - 第3回 AVSのインポート

スポンサーサイト

Tag:エンコード VapourSynth x264 コマンドプロンプト パイプ

COMMENT - 0



WHAT'S NEW?

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。