※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。



[2007-08-20]

FFMpegSource.dll は

VirtualDubMod が起動時に AviSynth のオートローディング用ディレクトリ
(デフォルトでは AviSynth2.5\plugins)内の Plugin を読み込む場合は、
plugins フォルダに FFmpegSource.dll があると、avcodec-51.dll、avformat-51.dll、
avutil-49.dll、postproc-51.dll、swscale-0.dll、zlib1.dll が見つからないと
警告されてしまう。
FFMpegSource.dll は別ディレクトリに置いて、必要に応じて手動で読み込む方が
良さそ。もし、FFmpegSource を VDM やその他複数のアプリでも使用するなら、上記
6個のランタイムファイルをパスが通ったところにコピーする。
WM9Controller 等、使うアプリが決まっている場合は、そのアプリのディレクトリに
置けばよい。([2007-08-13] 参照)

#--- プラグインの手動読み込み
  # AVS と同じディレクトリにある場合
LoadPlugin("FFMpegSource.dll")
  # プラグインを直接指定する場合
#LoadPlugin("path\to\pluginsdir\FFMpegSource.dll")

#--- ソースのディレクトリ ---
SourceDir = "E:\Video\FLASH\"

#--- ソースファイルを開く ---
FFmpegSource(SourceDir + "hoge.flv", vtrack = -1, atrack = -1,
  vcache = false)

return last

どうやら FFMpegSource.dll は


On2 VP6(FLV4) をデコードできないようです。(FLV1 はオッケ)
最近の ffmpeg であれば対応しているので、一旦 rawvideo にしてから WMV9 に
エンコードすればよいけど、中間ファイルは作りたくないなあ。

ffmpeg.exe -y -i "path\to\VP6.flv" -vcodec rawvideo
  -acodec copy "pipe.avi"

[2007-08-18]

WMV エンコード用入力ソースに関する覚書

WM エンコーダで対応していないフォーマットを入力ソースにしたい
(WM エンコーダは VFAPI に未対応)

プロジェクトファイルの相互利用、 VFAPI Plug-In、参照AVI は、言ってみれば
WMV に限らず動画エンコードの基本でしょうか。

■ TMPGEnc、Aviutl + DirectShow File Reader プラグイン for AviUtl(ds_input.aui) で読み込み、プロジェクトファイルを作成する。

■ VFAPI Plug-In を経由して AviUtil or TMPGEnc or DVD2AVI/DGIndex にソースを読み込ませてプロジェクトファイルを作成する。
   MPEG-2 VIDEO VFAPI Plug-In(m2v.vfp)
   Shockwave Flash VFAPI Plug-In(swf.vfp)
  AviUtil ProjectFile Reader(aviutil.vfp)
  TMPGEnc ProjectFile Reader(TMPGEnc.vfp)
  DVD2AVI ProjectFile Reader(DVD2AVI.vfp)

 1. VF2WMV Encoder Beta.1 (最終版)
   AviUtlプロジェクトファイル(.aup) or TMPGEnc プロジェクトファイル(.tpr)
   or DVD2AVI/DGIndex プロジェクトファイル(.d2v)に対応

 2.各プロジェクトファイルを VFAPIConv.exe( VFAPI Reader Codec 1.05 同梱)で
   参照AVIに変換後 WM エンコーダやフロントエンドで読み込む

■ AviUtl + FrameLoader で中継AVIを作成、WMエンコーダ(or フロントエンド)に
  (出力100% になったら完了、AviUtl は閉じないでおくこと。)

■ AviUtl + wmvout or wmvoutplus

■ AviSynth 経由
   WM9Controller
   VF2WMV Encoder
   WM9Tool
   WMNicEnc - Nic's WMV encoder (suports the all advanced settings)

その他
Windows Media Encode Script 改
 映像と音声を別ファイルから入力可
wmcmd.vbs
 supports all the advanced settings and .avs inputs

MPEG4+MP3のwmvファイルに変換する簡易キット
 使用する WMCmd.vbs と プロファイル(.prx)を設定ファイルで指定
 Audio に MP3 を使わないのならレジストリの変更は不要。その場合は付属の
 プロファイル以外のプロファイルを指定すること→使い分けが可能)
 [2007-08-08] 参照

Tools for configuring all the advanced settings of WMV9 encoder and decoder
(registry settings)
WMV9 PowerToy (要 .NET Framework version 2.0)
WMV9 Advanced Settings Editor (要 .NET Framework version 2.0)


[2007-08-15]

ffmpeg の怪

相も変わらず エクスプローラから gigabeat への転送テストなんですが、

Microsoft MPEG-4 (MP4S)
Windows Media Video V7 (WMV1)
Windows Media Video V8 (WMV2)
Windows Media Video V9 (WMV3)

いずれも、WM エンコーダでエンコードした WMV は(制限内であれば)転送・
再生可能なんですよね。エンコーダに ffmpeg を使うとダメっぽいです。

WMPlayer 11 では再生できるので、ヘッダー情報の何かの所為かもしれない。
内部デコーダに libavcodec を使用しているプレーヤー(#)によって再生できたり
出来なかったりするのは、また別の問題でしょう、たぶん。

結論として、WMV へのエンコードには何を使っても、同期には WMPlayer を使え
ってことになるんでしょうけど(劣化は避けられない)、へそ曲がりな私には、
納得しがたいのだわ。

# この種のプレーヤーでは、最近は、 KMPlayer を使ってます。( 日本語化

[2007-08-13]

FLV to WMV (AviSynth)

頑張れば AHK で WM エンコード スクリプトのフロントエンドが作れるかも、と
思ったが、けっこうあるんですね。
WM9Controller
WM9ES Frontend
AzWM9 Script Frontend
VF2WMV Encoder

WM9Controller は AVS が開ける!
と言うことで早速。

■準備
  • AviSynth 2.5 はインストール済み
  • FFmpegSource17.rar 内の FFmpegSource.dll を AviSynth 2.5\plugins フォルダに、
  • avcodec-51.dll、avformat-51.dll、avutil-49.dll、postproc-51.dll、swscale-0.dll、zlib1.dll を WM9Controller(WM9C0140.exe) と同じフォルダにコピー

■AviSynth スクリプト(AVS)ファイルを作成
FLV.avs (都合により一部改行)
#--- ソースのディレクトリ ---
SourceDir = "E:\Video\FLASH\"

#--- ソースファイルを開く ---
FFmpegSource(SourceDir + "hoge.flv", vtrack = -1, atrack = -1, 
             vcache = false)

return last

# Video,Audio とも最初のトラックを使用(省略しない)
# Video の cacheファイルは作成しない(Audioの cacheファイルは必ず作成される)
# 詳細は FFmpegSource.html を参照

■WM9Controller でエンコード
  • 入力ファイルに AVS を指定。出力ファイル名は、自動で AVSファイルと同名になるので修正
  • オプションの設定(ビデオ、オーディオ)等をして「実行」
  • リストに「登録」すれば、バッチエンコードが可能
  • BES (Battle Encoder Shirase)ver.1.2.2 で CPU負荷制限するなら、ターゲットは WM9C0140.exe

FLVSplitter と ffdshow 入れちゃう方が楽なのかもしれないけどね。

[2007-08-12]

BES + WMV エンコード for gigabeat-V

エクスプローラから gigabeat にコピーする場合(デバイスの設定はデフォルト)、
テストでは、Video(WMV9),Audio(WMA9) とも CBR の場合、210kbps + 96kbps が限界。
(gigabeat を接続して)WMP 11から[同期]→[gigabeat-V]→[詳細オプション]
→[品質]で、「最高音質レベルを選択する」(音楽 64~192kbps、ビデオ 80~800kbps)か、
[同期]→[その他のオプション]→[デバイス]→[詳細]→[ビデオの変換時に速度より
品質を優先する] にチェックすると変わってくるのかもしれません(未確認)。
→ダメでした。やっぱり WMP から同期する場合のみの設定ですね、当然か。。。

BES (Battle Encoder Shirase)ver.1.2.2 で WMエンコーダのCPU負荷率を制限

  • BES を wmenc.exe を引数にして(Watching)起動後、wmenc.exe を起動する

BES-WMEnc.ahk (都合により一部改行)
DetectHiddenWindows, On
; 制限率 25%、BES は最小化で起動
Run, path\to\BES.exe "C:\Program Files\Windows Media Components
     \Encoder\wmenc.exe" 25 --minimize

; wmenc.exe が起動していなければ起動する
; すでに起動していれば、BES が見つけてくれる
ifWinNotExist, ahk_class MS Windows Media Encoder
{
  Run,"C:\Program Files\Windows Media Components\Encoder\wmenc.exe"
      "%1%"  ; 引数はセッションファイル(.wme)のみ
  WinWait,ahk_class BATTLEENC
}
Return

WMエンコーダをコマンドラインで操作

「Windows Media エンコード スクリプト」、つまり、CLI版 WSH (cscript.exe) を
使えばいいらしい。WMCmd.vbs が用意されている。
GUI でプレビューしながら(↑)より 20% ほど速い気がする(CPUへの負荷が減る分?)

  • 変換元ファイルを AHK の引数にして実行、BES を cscript.exe Watching 起動してエンコードを開始
  • BES (Battle Encoder Shirase)ver.1.2.2 でcscript.exe の CPU負荷率を制限
  • エンコードオプションの詳細は「Windows Media エンコード スクリプト」のヘルプ参照(C:\Program Files\Windows Media Components\Encoder\WMEncUtil.chm)
  • 変換後のファイルは、ソースと同じ場所に、ファイル名末尾に [_] をつけて保存

BES-WMCmd.ahk (都合により一部改行)
DetectHiddenWindows, On
source = %1%
SplitPath, source, file, dir, ext, name, drive

; 制限率 33%(未指定なら規定値)、BES は最小化で起動
Run, path\to\BES.exe C:\WINDOWS\system32\cscript.exe --minimize

; cscript.exe が起動していなければ起動する
; すでに起動していれば、BES が見つけてくれる
ifWinNotExist, ahk_pid cscript.exe
{
  ; CBR 1pass、Audio・Video の品質とサイズを指定してエンコード
  ; そのプロファイルをファイルに保存
  Run, cscript.exe "C:\Program Files\Windows Media Components\Encoder
       \WMCmd.vbs" -input "%source%" -output "%dir%\%name%_.wmv"
       -v_mode 0 -a_mode 0 -a_setting 96_44_2 -v_bitrate 210000
       -v_framerate 29.97 -v_height 240 -v_width 320 -saveprofile
       D:\My-profiles\210-96.prx
  WinWait,ahk_class BATTLEENC
}

Return

同じプロファイルを使用してエンコードする場合は、保存したプロファイルを
指定するとスクリプトが短くなっていいかも。(utf16 の xml なので、文字コードに
対応しているエディタで編集も可能)
-loadprofile C:\My-profiles\210-96.prx

コーデックを指定可能(-a_codec,-v_codec 未指定なら wmv9)なので、wmv8 とかも
検証してみなくちゃダメかしらん。。。

[2007-08-10]

厳し過ぎない?

ffmpeg rev.9767 で wmv にエンコードしてみた。(表示の都合により改行)
(たぶん、rev.9017 頃には wma エンコードに対応)

ffmpeg.exe -formats
Codecs: 抜粋(D:デコード E:エンコード)
DEA    wmav1
DEA    wmav2
DEVSD  wmv1
DEVSD  wmv2
D V    wmv3

ffmpeg.exe -y -i "input.flv" -title "hoge" -vcodec wmv2 -b 200000
-r 15.00 -acodec wmav2 -ar 44100 -ac 2 -ab 96000 "output.wmv"

200kbp/s 以下であればエクスプローラから転送は出来るのだが、再生不能。
WMV9 (Code:WMV3) でないとダメってことですかね。ffmpeg で対応して欲しいね。
→WM エンコーダのバージョンに関わらず、ffmpeg じゃだめなのかも。

BES (Battle Encoder Shirase) は Windows Media エンコーダの CPU負荷率を
きちっと抑えてくれたので、もう少しテスト続けてみよ。 GCooler も試してみたいし。

。。。泥沼の予感

[2007-08-08]

gigabeat Vシリーズ

思いがけず、gigabeat V401 を頂いてしまった^^
ポータブルAVプレーヤーとしては既に PMP-140 を持っているが、gigabeat V401 は
何と言ってもワンセグ対応、予約録画も出来る。高温高負荷時に緊急シャットダウンが
かかるようになってしまったメインマシンの代わりに F1 の録画をしようかと。

WMV、WMA(固定・可変ビットレート、ロスレス)MP3、WAV の再生が可能。
データの転送には Windows Media Player 11 or 10 が必要とのことで、試しに WMP 8
が入ってるサブマシンに繋いでみたが、ドライバのインストールさえ出来なかった。
やむなく、メインマシンに WMP 11 をインストール。


結論から言うと、デバイスとして認識されてしまえば、WMP は不要。
エクスプローラから、gigabeat-V\Storage\Music または \Video フォルダ以下に
対応ファイルを放り込めば良し。

但し、 Area61 ビデオダウンローダー (エンコーダは ffmpeg)で FLVからデフォルト
の設定でエンコードした WMV(Mpeg4v2 + mp3)のようなイレギュラなコンテナは、
WMP 11 で同期させないと再生不可。転送時に WMV9 + WMA に変換処理が行われて
いる。同梱の ffmpeg.exe のバージョンを新しいものにして、Transcoding.ini に
コマンドを書き足せば行けるのかもしれない。→ ffmpeg 使うとダメですね。WM エンコーダでエンコードすれば、Mpeg4v2 + mp3 も再生可能です。[2007-08-21]追記
また、Windows Media エンコーダでも、VHS品質程度+96kbps程度以下の低ビットレート
じゃないとエクスプローラからのコピー(転送)時に「デバイスの制限を越えている」
と警告される。

正確な情報が欲しい。
Windows Media エンコーダでプロファイルのテストエンコード中に緊急シャットダウン
しちゃうんだもん。

BES (Battle Encoder Shirase) を試してみるかなあ。( 日本語説明


-