謎's キッチン

謎のひとりごと。Amazon欲しい物リストはこちら: https://www.amazon.co.jp/hz/wishlist/ls/CCPOV7C6JTD2

mencoderでvp6fのflv作成

w32codecsでvp6のエンコードができるので、それを使ってflv4の動画を作ろうって話。

mencoder input.wmv -o output.flv -ovc vfw  -xvfwopts codec=vp6vfw.dll -oac mp3lame -of lavf -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -af lavcresample=44100 -vf flip,scale=512:384

samplae rateは分からないのでてきとう。-flipはvp6とvp6f(flv4向けvp6)は上下反対だから必要。b_frameが使えないらしいけど大丈夫か不明。
mp3lameのLAMEタグがどうなってるか不明。

vbrの仕方

mplayer/TOOLSのvfw2mencを作り

./vfw2menc  -f VP62 -d vp6vfw.dll -s vbr.mcf

をしてVBRに設定し、vbr.mcfをエンコードするパスに移動。

2passの仕方

mplayer/TOOLSのvfw2mencを作り

./vfw2menc  -f VP62 -d vp6vfw.dll -s first.mcf
./vfw2menc  -f VP62 -d vp6vfw.dll -s second.mcf

をして設定しファイルを作成、エンコードするパスに移動。


2passのエンコードをする場合、mplayerのバグを回避するために以下のパッチを当ててビルドしてください。

Index: loader/win32.c
===================================================================
--- loader/win32.c	(リビジョン 22506)
+++ loader/win32.c	(作業コピー)
@@ -66,6 +66,7 @@
 #include <dirent.h>
 #include <sys/time.h>
 #include <sys/timeb.h>
+#include <sys/stat.h>
 #ifdef	HAVE_KSTAT
 #include <kstat.h>
 #endif
@@ -3581,7 +3582,7 @@
 	free(tmp);
 	return result;
     }
-    if (strstr(cs1, "vp3"))
+    if (strstr(cs1, "vp3")||strstr(cs1, ".fpf"))
     {
 	int r;
 	int flg = 0;
@@ -3599,10 +3600,10 @@
 	    flg |= O_RDONLY;
 	else if (GENERIC_WRITE & i1)
 	{
-	    flg |= O_WRONLY;
+	    flg |= O_WRONLY | O_CREAT;
 	    printf("Warning: openning filename %s  %d (flags; 0x%x) for write\n", tmp, r, flg);
 	}
-	r=open(tmp, flg);
+	r=open(tmp, flg, S_IRWXU);
 	free(tmp);
 	return r;
     }
@@ -3712,7 +3713,7 @@
 static DWORD  WINAPI expSetFilePointer(HANDLE h, LONG val, LPLONG ext, DWORD whence)
 {
     int wh;
-    dbgprintf("SetFilePointer(%d, 0x%x, 0x%x = %d, %d)\n", h, val, ext, *ext, whence);
+    dbgprintf("SetFilePointer(%d, 0x%x, 0x%x = %d, %d)\n", h, val, ext, ext?*ext:0, whence);
     //why would DLL want temporary file with >2Gb size?
     switch(whence)
     {



残念ながらこの方法での2passエンコードsstファイルが空になりうまくいかないそうです。まぁloaderはwineとしがってその場しのぎだらけだからそういうこともあるだろうかな。
libwineを使おうとおもい色々改変してmplayer+libwine(+*.dll.so)でコンパイルしてみましたが、クラッシュてうまく動かず。