お知らせ: にーやんのブログ 2 に移転しました。こちらのブログは、2009 年末までに削除します。

スポンサード リンク

面倒臭がりな人のための半自動化エンコーディング(9): エンコード(enc.bat) その3

いくつかの補足。

  • AVSファイルの修正
rem #//--- avsファイル内テキスト置換 ---//
for %%A in (00*.avs) do chikan %%A #Import Import
for %%B in (00*.avs) do chikan %%B #AddRange AddRange

ここで、ImportとAddRangeの前に付いている#を外しています。
「#Import」という文字列があれば、「Import」に置換するといった感じです。

繰り返しには、こちらで紹介したfor文を、文字列の置換には文字列置換を使っています。

これをしないと、選択範囲の指定がなく、フィルタもかかっていない状態でエンコしてしまうことになります。

  • avs2wav
echo #//--- AVS2WAVでAVSからWAVE抽出 ---//
for %%D in (00*.avs) do avs2wav %%D

avs2wavを使って、音だけ取り出します。
音量などを調整したり、音だけoggとかmp3にエンコードして聴けるようにしたり(元ネタがPVなので)するためです。
それと、avs2aviでは(たしか)音声は扱えなかったと思います。

avs2wavは標準出力に対応したみたい(する予定?)なので、avs2wavからoggenc2に渡すみたいなこともできる・・・かもしれません(やってないのでわからないです・・・)。

[追記]
avs2wav-v1.1を使ってみたところ、うまく動作しませんでした。Doom9のフォーラムではWAV出力についての不具合は出ていないようなので(標準出力に関する話題は出ているようですが)、環境依存かもしれません。念のため、v1.0のURLを書いておきます。
avs2wav(旧バージョン)
http://webjory.tripod.com/avisynth/avs2wav.htm

面倒臭がりな人のための半自動化エンコーディング(8): エンコード(enc.bat) その2

私はCCE-Basicを使って、MPEG-2にエンコードしています。

CCE-Basicは、AVSファイルを直接読み込むことも可能ですが、フィルタをかけたAVSを使って2パスエンコードをすると時間がかかるため、いったん中間ファイルを出力します。

echo #//--- 中間ファイル出力(huffyuv) ---//
for %%C in (00*.avs) do avs2avi %%C -c HFYU

中間ファイルの出力には、avs2aviを使用しています。

avs2aviの使い方についてはヘルプを見てください(入力ファイルなどを指定せずに実行すれば見られます)。

一応、ヘルプの日本語訳もおいておきます。

AVS2AVI v1.39 (c) 2002-2004:
Christophe Paris, David Leatherdale, int21h, Moitah
http://www.avs2avi.org/

使用方法: avs2avi AVSファイル名 [出力ファイル名] [スイッチ]

出力ファイル名はAVSファイル名と関連しており、省略された場合、適当な拡張子をつけて、AVSファイルと同じ名前で保存される。

スイッチ:
-w : 同名ファイルが存在する場合、出力ファイルを上書き。
-P <passes> : マルチパス・モードを有効化。
-p [0-2] : 優先度 (0: アイドル, 1: 標準, 2: 標準より高い)
-s <file> : コーデック・パラメータを<file>に保存。
-l <file> : <file>からコーデック・パラメータを読み込む。
-c <4cc> : <4cc>で指定したコーデックをデフォルトの設定で利用 ("null"で再圧縮なし)。
-e : コーデック選択後に終了 (-sと一緒に使用)
-q : 高速化のためにquietモードを有効化。
-o [format] : 出力フォーマット (a: AVI (デフォルト), l: ログ, n: ヌル)
-x [a,l] : XviDのステータス・ウィンドウが閉じるまで待つ (a: すべてのパス,
l: 最後のパスのみ)

いくつか、使用例を紹介します。

  • コーデックの設定を保存するのみ
avs2avi hoge.avs -s parameter_name -e

  • コーデックの設定を読み込んでエンコード
avs2avi hoge.avs hoge.avi -l parameter_name

  • FourCCを指定してエンコード
avs2avi hoge.avs hoge.avi -c HFYU

enc.batで紹介しているのは、最後のFourCCを指定する方法です。
FourCCは4文字からなるコードで、コーデックごとに異なります。

一部、例をあげると、

  • FourCC(ほんの一例)

  • HFYU: Huffyuv
  • XVID: XviD
  • FFDS: ffdshow

などがあります。

FourCCについては、こちらこちらを参考にしてください。

面倒臭がりな人のための半自動化エンコーディング(7): エンコード(enc.bat) その1

選択範囲を指定してvcfファイルを作成したら、次は、いよいよエンコードです。
enc.batで、一気に行きます。

enc.batは、こんな感じ。

@echo off
rem #//--- カレントフォルダの変更 ---//
d:
cd D:\Avisynth

rem #//--- avsファイル内テキスト置換 ---//
for %%A in (00*.avs) do chikan %%A #Import Import
for %%B in (00*.avs) do chikan %%B #AddRange AddRange

echo #//--- 中間ファイル出力(huffyuv) ---//
for %%C in (00*.avs) do avs2avi %%C -c HFYU

echo #//--- AVS2WAVでAVSからWAVE抽出 ---//
for %%D in (00*.avs) do avs2wav %%D

echo #//--- CCE-BasicでMPEG-2エンコード ---//
c:
cd "C:\Program Files\Custom Technology\Cinema Craft Encoder Basic"
for %%E in (D:\Avisynth\00*.avi) do cct2 -t "PV" %%E -a %%~dpnE.avs.wav -batch

echo #//--- oggencでoggエンコード ---//
d:
for %%F in (00*.avs.wav) do oggenc2 -q 4 %%F -o %%~nF.ogg
ren 00?.avs.ogg 00?.ogg

echo #//--- ファイルの移動 ---//
for %%G in (*.ogg) do move %%G D:\ogg
for %%H in (*.mpg) do move %%H D:\mpeg2

echo #//--- 一時ファイルの削除 ---//
del 00*.avi
del *.avs.wav
del *.vcf
del 00*.avs

echo #//--- おわり ---//
shutdown -s -f

じつは、実際に使っているのとは、少し違います。
これだと、ひょっとして動かない可能性もあります。
・・・が、だいたいこんな感じです。

少し説明を加えたいと思いますが、長くなるので、また次回。

面倒臭がりな人のための半自動化エンコーディング(6):選択範囲の指定(vcfファイルの保存)

make_avs.batで作成したavsファイル(00*.avs)をVirtualDub(Mod)で読み込んで、選択範囲を指定します。

次のホットキーを利用すると便利です。

選択開始:[Home]
選択終了:[End]
選択範囲の削除:[Delete]


選択範囲を指定し終わったら、[File]->[Save processing settings...]から、vcfファイル(VirtualDubの編集設定ファイル)を保存します。

vcfファイルのファイル名は、avsファイルと同じ名前(00*.vcf)にします。


VirtualDub1.5.8/Mod1.5.10.1以降を使用している場合は、保存ダイアログ左下隅のチェックボックス([Include selection and edit list])を有効にしてから保存する必要があります。
ここにチェックしていないと、vcfファイルに選択範囲の情報が書き込まれません。

さて、次はいよいよエンコードです。

面倒臭がりな人のための半自動化エンコーディング(5):avsファイルの複製(make_avs.bat)

どこにでも同じようなことを考える人はいるわけで・・・。

Automated AVS Script to DVD Conversion
http://www.blainehelmick.com/AVS2DVD/

そもそも、コマンドラインでやろうという発想自体、全然珍しいことではないのでしょうけどね。

で、本題。

Base.avs、MyFunction.avs、PV.avsの3つがそろったところで、実際のエンコード作業へと入っていきます。

ただし完全自動というわけではなく、あくまでも半自動化。
大きく分けて3つの行程に分かれます。

  • Base.avsの複製(make_avs.bat)
  • 選択範囲の指定(手動で設定、vcfファイルの出力)
  • 00*.avsの修正とエンコード(enc.bat)

make_avs.batで、00*.m2vの数だけBase.avsを複製し、00*.avsという名前で出力します。

さらに、00*.avs内のfilename = "001"を、avs(m2v)ファイルと同じ名前(002.avsなら002)に置換します。
じゃないと、全部001.m2vが読み込まれちゃいますからね。

make_avs.batの内容はこんな感じ。

d:
cd D:\Avisynth
echo #//--- ファイルの確認と分岐 ---//
if exist 00*.m2v (goto make_avs) else goto end

:make_avs
echo #//--- avsの複製 ---//
for %%M in (00*.m2v) do copy Base.avs %%M.avs
ren 00?.m2v.avs 00?.avs

echo #//--- avs内のテキスト置換 ---//
for %%C in (00*.avs) do chikan %%C 001 %%~nC
goto end

:end

コマンドプロンプトに関しては全くの初心者なので、たぶん変です。
あるいは、無駄だらけとか。
でも、どこがおかしいのかすら、わからない・・・。

絶対にマネをしないでください(汗)。

少しだけ説明しておくと・・・

for %%M in (00*.m2v) do copy Base.avs %%M.avs

forは繰り返しで、00*.m2vにマッチする分だけ、Base.avsを00*.m2v.avsという名前でコピー。
BATファイルだと%%だけど、コマンドプロンプト直だと%1個。

ren 00?.m2v.avs 00?.avs

renはファイル名を変更するコマンドで、00?.m2v.avsを00?.avsにリネーム。

こんな感じでしょうか?

詳しくはコマンドプロンプトを解説しているサイト(- YKR -さんとか)を参考にしてください。

ちなみに、「avs内のテキスト置換」には「文字列置換」というソフトを使っています。

Page 4 of 5: « 1 2 3 4 5