<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6785131310840836746</id><updated>2012-02-18T02:34:37.115+09:00</updated><category term='動画'/><category term='Python'/><category term='AvsP'/><category term='活動記録'/><category term='ビルド'/><category term='avisynth'/><category term='身の回り'/><category term='エンコード'/><category term='C/C++'/><title type='text'>Ch's barn</title><subtitle type='html'>日々の出来事を書き殴る</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>84</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-6825773986084601927</id><published>2012-02-18T02:34:00.000+09:00</published><updated>2012-02-18T02:34:37.126+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>avs2pipemod その14</title><content type='html'>更新しました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/download.php?ilpfc0m89c95apv"&gt;avs2pipemod-0.3.0.7z&lt;/a&gt;&lt;br /&gt;&lt;a href="https://github.com/chikuzen/avs2pipemod"&gt;https://github.com/chikuzen/avs2pipemod&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;*新機能 "dumpyuv" を追加&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forum.doom9.org/showthread.php?t=164146"&gt;これ&lt;/a&gt;を読んでたら自分も欲しくなったので、機能を追加しました。&lt;br /&gt;RGBデータを扱いたい場合は&lt;br /&gt;&lt;pre name=code class=python&gt;ColorBars()&lt;br /&gt;Y=ShowGreen("Y8").ConvertToYV24()&lt;br /&gt;U=ShowBlue("Y8")&lt;br /&gt;V=ShowRed("Y8")&lt;br /&gt;YToUV(U, V, Y)&lt;br /&gt;&lt;/pre&gt;とでもして下さい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-6825773986084601927?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/6825773986084601927/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2012/02/avs2pipemod-14.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6825773986084601927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6825773986084601927'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2012/02/avs2pipemod-14.html' title='avs2pipemod その14'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-4785575992697737242</id><published>2012-02-16T21:50:00.000+09:00</published><updated>2012-02-16T22:08:17.447+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>avs2pipemod その13</title><content type='html'>更新しました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/download.php?c3eyefw0sublhpm"&gt;avs2pipemod-0.2.2.7z&lt;/a&gt;&lt;br /&gt;&lt;a href="https://github.com/chikuzen/avs2pipemod"&gt;https://github.com/chikuzen/avs2pipemod&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;*x264raw/x264bdの出力内容に"--frames"を追加&lt;br /&gt;&lt;br /&gt;rawvideo出力等で"-trim=*,*"を使っている場合は、こちらも同様にtrimを追加して下さい。&lt;br /&gt;両方で同じ指定をしないと、フレーム数の整合がとれなくなります。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-4785575992697737242?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/4785575992697737242/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2012/02/avs2pipemod-13.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4785575992697737242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4785575992697737242'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2012/02/avs2pipemod-13.html' title='avs2pipemod その13'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-6142230946601772889</id><published>2012-02-05T20:27:00.001+09:00</published><updated>2012-02-06T07:34:07.774+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='活動記録'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Pythonで関数の引数の順序を入れ替える</title><content type='html'>メモ替わり&lt;br /&gt;&lt;br /&gt;L-SMASHのコードで使われている関数のいくつかについて、引数の順序を入れ替える必要が発生した。&lt;br /&gt;&lt;br /&gt;こういった作業はIDEを使っていれば簡単にできるのかも知れないが、何かしら書くときはいつもテキストエディタを使い、コンパイルはCLI操作で済ませているので、使い方がいまだにさっぱり分からない。&lt;br /&gt;かといっていちいち関数名で検索しては手作業で修正するのも面倒なので、久々にPythonを書いた。&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1743551.js"&gt; &lt;/script&gt;&lt;br /&gt;制限事項：&lt;br /&gt;一つの関数の記述が複数行にまたがる場合&lt;br /&gt;&lt;pre name=code class=c++&gt;int var = ItIsNoNeedToCareAboutTheLengthOfFunctionNamesBecauseEverybodyUsesIDE(foo,&lt;br /&gt;                                                                               bar,&lt;br /&gt;                                                                               fizz,&lt;br /&gt;                                                                               buzz,&lt;br /&gt;                                                                               bleh,&lt;br /&gt;                                                                               fuck);&lt;/pre&gt;は処理できないので、warningを頼りに手動で修正すること。&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-6142230946601772889?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/6142230946601772889/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2012/02/python.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6142230946601772889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6142230946601772889'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2012/02/python.html' title='Pythonで関数の引数の順序を入れ替える'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-5106348129778983959</id><published>2012-01-30T08:42:00.001+09:00</published><updated>2012-01-31T02:41:37.176+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>avs2pipemod その12</title><content type='html'>更新しました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/download.php?kbdle1du25hkzqj"&gt;avs2pipemod-0.2.1.7z&lt;/a&gt;&lt;br /&gt;&lt;a href="https://github.com/chikuzen/avs2pipemod"&gt;https://github.com/chikuzen/avs2pipemod&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;*新機能'x264raw','x264rawtc'を追加&lt;br /&gt;&lt;br /&gt;最近はdither hackやらx264がRGB圧縮に対応したりやらのおかげで、y4m出力の代りにrawvideo出力を使う頻度が結構高くなりました。&lt;br /&gt;YUV4MPEG2は仕様で「使えるフォーマットは8bitのplanarYUVのみ」と決められているので、これらのためには使えないのです。&lt;br /&gt;で、仕方がないので&lt;br /&gt;&lt;pre name=code class=python&gt;$ avs2pipemod -rawvideo=vflip input.avs | x264_x64 - --demuxer raw --input-csp bgr --input-res 1280x720 --output-csp rgb --fps ...&lt;br /&gt;&lt;/pre&gt;とかやるわけですが、長いコマンドがいい加減めんどうなので省力化することにしました。&lt;br /&gt;&lt;br /&gt;使い方&lt;br /&gt;&lt;pre name=code class=python&gt;$ avs2pipemod -x264raw 1280x720_30fps_rgb24.avs&lt;br /&gt;&lt;/pre&gt;てな感じのコマンドを実行すると&lt;br /&gt;&lt;pre name=code class=python&gt;- --demuxer raw --input-csp bgr --input-depth 8 --input-res 1280x720 --fps 30/1 --output-csp rgb&lt;br /&gt;&lt;/pre&gt;と標準出力に出力されます。&lt;br /&gt;&lt;br /&gt;dither packageやflash3kyuu_debandのinterleaved出力を使う場合は、引数でinput-depthを指定するとwidthを1/2にしたコマンドラインが出力されます。&lt;br /&gt;&lt;pre name=code class=python&gt;$ avs2pipemod -x264raw=16 2560x719_ntsc-film_16bit_yv24.avs&lt;br /&gt;- --demuxer raw --input-csp i444 --input-depth 16 --input-res 1280x719 --fps 24000/1001 --output-csp i444&lt;br /&gt;&lt;/pre&gt;'x264rawtc'は、--tcfile-inを使う場合のためのもので、"--fps fpsnum/fpsden"は出力されません。&lt;br /&gt;&lt;pre name=code class=python&gt;$ avs2pipemod -x264rawtc 640x480_yv411.avs&lt;br /&gt;- --demuxer lavf --input-fmt rawvideo --input-csp yuv411p --input-depth 8 --input-res 640x480 --output-csp i422&lt;br /&gt;&lt;/pre&gt;筆者のようにCLIにCygwinやMSYSのBash/shell scriptを使っている人なら&lt;br /&gt;&lt;pre name=code class=python&gt;$ avs2pipemod -rawvideo input.avs | x264 $(avs2pipemod -x264raw=16 input.avs) --crf 22 --preset slower ...&lt;br /&gt;&lt;/pre&gt;てな感じで、コマンド置換を利用すれば結構ラクになると思います。&lt;br /&gt;&lt;br /&gt;cmd.exeな人の場合は…あいにく筆者はdosコマンドやbatは数年前に憶えることを放棄したので、さっぱりわかりません。&lt;br /&gt;まあ、某ペンギン様も「&lt;a href="http://mirror05.x264.nl/Dark/loren.html#windows"&gt;batを憶えるくらいならPerlをインストールしろ&lt;/a&gt;」とか言ってますし、それでいいかと思っています。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-5106348129778983959?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/5106348129778983959/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2012/01/avs2pipemod-12.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/5106348129778983959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/5106348129778983959'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2012/01/avs2pipemod-12.html' title='avs2pipemod その12'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-8117183887567397773</id><published>2012-01-28T23:03:00.000+09:00</published><updated>2012-01-28T23:03:49.279+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>avs2pipemod その11</title><content type='html'>更新しました。&lt;br /&gt;&lt;a href="http://www.mediafire.com/download.php?47ordinmatla8md"&gt;avs2pipemod-0.1.2.7z&lt;/a&gt;&lt;br /&gt;&lt;a href="https://github.com/chikuzen/avs2pipemod"&gt;https://github.com/chikuzen/avs2pipemod&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;エラーの出るavsを使用した際にクラッシュしていたのを修正。&lt;br /&gt;&lt;br /&gt;生まれて初めてバグレポート頂きました。&lt;br /&gt;これまでずっとレポートする側だったので、なんか新鮮な気分です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-8117183887567397773?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/8117183887567397773/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2012/01/avs2pipemod-11.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8117183887567397773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8117183887567397773'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2012/01/avs2pipemod-11.html' title='avs2pipemod その11'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-6461528872484857565</id><published>2012-01-07T02:21:00.000+09:00</published><updated>2012-01-08T04:35:02.932+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><title type='text'>ConvertToRGB</title><content type='html'>&lt;a href="http://csbarn.blogspot.com/2011/05/high-bit-depth-avc.html"&gt;avcodecに10bit-AVCデコーダがcommitされて随分経つのに&lt;/a&gt;いまだによく解らない人のための乱暴な解説。&lt;br /&gt;&lt;br /&gt;まずはこちらの方の解説を読みましょう。&lt;br /&gt;自分が知るかぎりでは、もっともシンプルでわかりやすい説明をされています。&lt;br /&gt;&lt;a href="http://dtv.sakura.ne.jp/contents1/004.html"&gt;ＤＴＶかくし味 - ＹＵＶとＲＧＢの比較&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;特にこの図、&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-2uhK8Peh0dU/Twcs1D9sEYI/AAAAAAAAAJY/OQNduMpB2vU/s1600/011.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="182" width="320" src="http://2.bp.blogspot.com/-2uhK8Peh0dU/Twcs1D9sEYI/AAAAAAAAAJY/OQNduMpB2vU/s320/011.png" /&gt;&lt;/a&gt;&lt;/div&gt;いかに暗部の色数が少ないか、なぜ暗部にシルバーグレインを撒く(=Yの値だけまばら且つ適当に上げる)とマシに見えるようになるかが一発で理解できます。&lt;br /&gt;&lt;br /&gt;さて、「YUVはRGBで表現できる範囲をすべてカバーしています。（が、細かい諧調はRGBに分があります。）」とまとめられていますが、これをちょっと具体的に計算してみましょうか。&lt;br /&gt;&lt;pre name=code class=c&gt;/* yuv2rgb.c */&lt;br /&gt;#include &amp;ltstdio.h&amp;gt&lt;br /&gt;#include &amp;ltstdlib.h&amp;gt&lt;br /&gt;#include &amp;ltstring.h&amp;gt&lt;br /&gt;#define SATURATE(X) X = (X &lt; 0) ? 0 : (X &gt; 255) ? 255 : X&lt;br /&gt;&lt;br /&gt;int intcmp(const void* a, const void* b)&lt;br /&gt;{&lt;br /&gt;    return (*(int*)a - *(int*)b);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(void)&lt;br /&gt;{&lt;br /&gt;    const struct {&lt;br /&gt;        char *name;&lt;br /&gt;        int coef[6];&lt;br /&gt;    } matrix[] = {&lt;br /&gt;        {"rec601", {76309, 104597, 25675, 53279, 76308, 132201}},&lt;br /&gt;        {"pc601",  {65536,  91881, 22553, 46801, 65536, 116129}},&lt;br /&gt;        {"rec709", {76309, 117504, 13954, 34903, 76308, 138453}},&lt;br /&gt;        {"pc709",  {65536, 103219, 12257, 30659, 65536, 121621}},&lt;br /&gt;        {NULL}&lt;br /&gt;    };&lt;br /&gt;&lt;br /&gt;    int *rgb = (int*)malloc(256 * 256 * 256 * sizeof(int));&lt;br /&gt;    if (!rgb) {&lt;br /&gt;        fprintf(stderr, "malloc failed\n");&lt;br /&gt;        return -1;&lt;br /&gt;    }&lt;br /&gt;    for (int m = 0; matrix[m].name; m++) {&lt;br /&gt;        int count = 0;&lt;br /&gt;        int x = !strncmp(matrix[m].name, "rec", 3) ? 16 : 0;&lt;br /&gt;        for (int y = 0; y &lt; 256; y++)&lt;br /&gt;            for (int u = 0; u &lt; 256; u++)&lt;br /&gt;                for (int v = 0; v &lt; 256; v++) {&lt;br /&gt;                    /* 下記計算式は茂木和博氏のm2v.vfpのreadmeより引用しました */&lt;br /&gt;                    int r = (matrix[m].coef[0] * (y - x) + matrix[m].coef[1] * (v - 128)) &gt;&gt; 16;&lt;br /&gt;                    int g = (matrix[m].coef[0] * (y - x) - matrix[m].coef[2] * (u - 128)&lt;br /&gt;                                                         - matrix[m].coef[3] * (v - 128)) &gt;&gt; 16;&lt;br /&gt;                    int b = (matrix[m].coef[4] * (y - x) + matrix[m].coef[5] * (u - 128)) &gt;&gt; 16;&lt;br /&gt;                    SATURATE(r);&lt;br /&gt;                    SATURATE(g);&lt;br /&gt;                    SATURATE(b);&lt;br /&gt;                    rgb[count++] = ((r &lt;&lt; 16) | (g &lt;&lt; 8) | b);&lt;br /&gt;                }&lt;br /&gt;        qsort(rgb, count, sizeof(int), intcmp);&lt;br /&gt;        int num = 1;&lt;br /&gt;        for (int i = 1; i &lt; count; i++)&lt;br /&gt;            if (rgb[i] != rgb[i - 1])&lt;br /&gt;                num++;&lt;br /&gt;        printf("%s: %d\n", matrix[m].name, num);&lt;br /&gt;    }&lt;br /&gt;    free(rgb);&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;このコードでBT.601とBT.709で8bitYUV-&gt;8bitRGBに変換した際、RGBで使われる色数がわかります。で、結果は&lt;pre name=code class=python&gt;BT.601 TVレンジ(伸張)      2,956,082色&lt;br /&gt;BT.601 PCレンジ(ストレート) 4,261,687色&lt;br /&gt;BT.709 TVレンジ(伸張)      3,048,157色&lt;br /&gt;BT.709 PCレンジ(ストレート) 4,400,772色&lt;br /&gt;&lt;/pre&gt;となります。&lt;br /&gt;いやぁ、ほんと色数少ないですね。TrueColorRGBの16,777,216色のうち、最大でも4分の1程度しか使われていません。&lt;br /&gt;バンディングが発生するのも当たり前です。&lt;br /&gt;これが10bitYUV-&gt;8bitRGBだとどの程度になるのかは、適当な計算式がとりあえず見当たらなかったのでやってませんが、8bit-&gt;10bitでY,U,Vの精度がそれぞれ4倍になることを考えれば、色数もかなり良い感じに増えそうです。&lt;br /&gt;&lt;br /&gt;てなわけで、10bitエンコードの力を確認するためにバカ高い業務用モニタ等は別に必要ありません。&lt;br /&gt;民生品でもそこそこの品質があれば違いは確実にわかります(もちろん、良いものであればもっとよく分かるでしょうが)。&lt;br /&gt;&lt;br /&gt;つーか、AviUtlのプレビューがやたら綺麗に見える理由って、まさにこれだよね。&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-6461528872484857565?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/6461528872484857565/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2012/01/converttorgb.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6461528872484857565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6461528872484857565'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2012/01/converttorgb.html' title='ConvertToRGB'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-2uhK8Peh0dU/Twcs1D9sEYI/AAAAAAAAAJY/OQNduMpB2vU/s72-c/011.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-7510202338778170628</id><published>2012-01-05T21:54:00.000+09:00</published><updated>2012-01-31T02:47:33.039+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>avs2pipemod その10</title><content type='html'>更新しました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/download.php?nzdmacdygpfug2x"&gt;avs2pipemod-0.1.1.7z&lt;/a&gt;&lt;br /&gt;&lt;a href="https://github.com/chikuzen/avs2pipemod"&gt;https://github.com/chikuzen/avs2pipemod&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;コードの大部分を書き直しました。&lt;br /&gt;&lt;br /&gt;* avisynth.libが要らなくなった。&lt;br /&gt;これまではビルドするためにavisynth.libを使う必要がありましたが、これをやめてLoadLibrary()を使うようにしました。&lt;br /&gt;これにより64bit用もビルド出来るようになりました。&lt;br /&gt;&lt;br /&gt;* avisynth.dllのバージョンを検出し、挙動を切り替えるようにした。&lt;br /&gt;てなわけでavs2pipe26modはなくなりました。&lt;br /&gt;&lt;br /&gt;* おまけ&lt;br /&gt;SetMTModeに応じてDistributor()を自動追加する機能もコードには存在します。&lt;br /&gt;もし、この機能が欲しい人は、make時に'XCFLAGS=-DBLAME_THE_FLUFF'を追加して自ビルドして下さい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-7510202338778170628?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/7510202338778170628/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2012/01/avs2pipemod-10.html#comment-form' title='4 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/7510202338778170628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/7510202338778170628'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2012/01/avs2pipemod-10.html' title='avs2pipemod その10'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-6002542121826046015</id><published>2011-12-31T05:19:00.003+09:00</published><updated>2012-01-06T06:44:33.866+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>avs2pipemod その9</title><content type='html'>更新しました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/download.php?uw2z0pzax1dqnf8"&gt;avs2pipemod-20111230.zip&lt;/a&gt;&lt;br /&gt;&lt;a href="https://github.com/chikuzen/avs2pipemod"&gt;https://github.com/chikuzen/avs2pipemod&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;*ビデオ出力処理をavs2pipeの最新のものから移植。&lt;br /&gt;&lt;br /&gt;久しぶりにdoobry氏がDoom9に現れgithubのレポを公開しました。&lt;br /&gt;さっそく最新のコードを見てみると…うーむ、こんな手があったのか。&lt;br /&gt;手元のベンチマーク結果をみてもこれのほうが速かったので、早速パクりました。&lt;br /&gt;つくづく彼のコードは自分にとって素晴らしい教材です。&lt;br /&gt;&lt;br /&gt;追記&lt;br /&gt;&lt;a href="http://k4095-takuan.blogspot.com/"&gt;たくあん氏&lt;/a&gt;から、以前のバージョンより遅くなっているとの報告を受けたので、検証して見ました。&lt;br /&gt;&lt;pre name=code class=python&gt;#sample.avs&lt;br /&gt;LoadPlugin("DGDecode.dll")&lt;br /&gt;MPEG2Source("1400x1080x2990frames.d2v", idct=3)&lt;br /&gt;&lt;br /&gt;これを前回(20110911)と今回(20111230)で比較&lt;br /&gt;pattern1:&lt;br /&gt; $ time avs2pipemod -y4mp sample.avs &gt; sample.y4m&lt;br /&gt;pattern2:&lt;br /&gt; $ time avs2pipemod -y4mp sample.avs | x264 - --demuxer y4m --preset ultrafast -o sample.264&lt;br /&gt;pattern3:&lt;br /&gt; $ time avs2pipemod -y4mp sample.avs | x264 - --demuxer y4m --preset medium -o sample.264&lt;br /&gt;&lt;br /&gt;それぞれを3回ずつ回すと(数値はエンコード終了までの時間)&lt;br /&gt;              pattern 1      |      pattern2      |      pattern3&lt;br /&gt;          20110911  20111230 | 20110911  20111230 | 20110911  20111230&lt;br /&gt;1st(sec)   122.094   112.451 |   39.919    42.416 |  181.153   183.238&lt;br /&gt;2nd(sec)   122.200   113.405 |   40.099    42.426 |  183.994   182.490&lt;br /&gt;3rd(sec)   118.490   114.094 |   39.976    42.716 |  184.112   182.664&lt;br /&gt;avg(sec)   120.928   113.317 |   39.998    42.519 |  183.086   182.797&lt;br /&gt;&lt;/pre&gt;他のエンコーダにpipeせず、直接y4mやrawで保存する場合は20111230のほうが速いです。&lt;br /&gt;そして、他のエンコーダにpipeした場合は、以前の方が速くなります。&lt;br /&gt;エンコーダ側の設定がある程度重くなると律速する…どうしようかなぁ…。&lt;br /&gt;&lt;br /&gt;現実的な使用例を考えるとpattern2よりも1か3の使い方のほうが多いと思いますので、このまま行くことにします。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-6002542121826046015?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/6002542121826046015/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/12/avs2pipemod-9.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6002542121826046015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6002542121826046015'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/12/avs2pipemod-9.html' title='avs2pipemod その9'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-8684230000055254619</id><published>2011-12-09T21:00:00.001+09:00</published><updated>2011-12-10T12:18:47.293+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>AviSynth Script Reader for AviUtl</title><content type='html'>VFR_maniac改めMP4_maniac氏がlsmashinput.aui(L-SMASHとLibavを利用したAviUtl用入力プラグイン)を発作的に書き始めてしまったのに付き合っていた流れで、AviUtlの入力プラグインの書き方が少しだけ理解できるようになった。&lt;br /&gt;&lt;br /&gt;AviUtlといえば前から不思議に思っていたのが「なぜavsを読むのにわざわざ別に入力プラグインが必要なのか」である。&lt;br /&gt;そもそもAviSynthはスクリプトをAVIに偽装するソフトウェアである。&lt;br /&gt;もし任意のソフトウェアがVFWのAVIFileOpen関数を使って拡張子がavsのファイルを開こうとすれば、レジストリ登録情報によりavisynth.dllが動いて、ただのテキストはAVIとして扱われるような仕組みになっている。&lt;br /&gt;AviUtlにはVFWを使用する入力プラグイン(AVI File Reader)が内蔵されているのだから、本来外部プラグイン(avsinp.aui)は必要ないはずなのだ。&lt;br /&gt;&lt;br /&gt;で、このたびPluginSDKのサンプルコード(avi_input.cpp)を読んでみたら、疑問はすぐに解決した。&lt;br /&gt;AviUtlは、まずファイルの拡張子を見てプラグインが対応しているかどうかを判別するため、*.avsというファイルはAVI File Readerには渡されないというだけのことだった。&lt;br /&gt;&lt;br /&gt;てなわけで、ちょっと実験。&lt;br /&gt;まず、avi_input.cppのINPUT_PLUGIN_TABLE構造体のfilefilter変数の中身を*.aviから*.avsに変更。&lt;br /&gt;入力プラグイン名をAviSynth Script Reader (VFW)にして、コメント以外の日本語文字を除去(CP932は色々面倒)、ついでにファイル名を.cppから.cにして(avi_input.cppはC++ではなくCで書かれている)、あとはGCCでコンパイルしてやれば…&lt;br /&gt;&lt;pre name=code class=python&gt;gcc -c avi_input.c -o avsread.o&lt;br /&gt;gcc -o avsread.aui -shared -Wl,--dll,--add-stdcall-alias avsread.o -lavifil32&lt;br /&gt;&lt;/pre&gt;ああ、読めた。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-szNTof1fa6c/TuH-MAgseHI/AAAAAAAAAJE/ojdSmO_vc3U/s1600/avsread.aui.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="308" width="320" src="http://4.bp.blogspot.com/-szNTof1fa6c/TuH-MAgseHI/AAAAAAAAAJE/ojdSmO_vc3U/s320/avsread.aui.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;つまり、KENくん氏が内蔵のAVI File Readerに拡張子*.avsを追加してくれれば、avsinp.auiは要らなくなるんだよなぁ…。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-8684230000055254619?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/8684230000055254619/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/12/avisynth-script-reader-for-aviutl.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8684230000055254619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8684230000055254619'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/12/avisynth-script-reader-for-aviutl.html' title='AviSynth Script Reader for AviUtl'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-szNTof1fa6c/TuH-MAgseHI/AAAAAAAAAJE/ojdSmO_vc3U/s72-c/avsread.aui.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-4098228265001984882</id><published>2011-10-15T02:46:00.000+09:00</published><updated>2011-11-05T10:41:03.242+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='活動記録'/><title type='text'>Oneiric入れてみた</title><content type='html'>&lt;a href="https://wiki.ubuntu.com/OneiricOcelot/ReleaseNotes/ja"&gt;Ubuntu11.10(OneiricOcerot)&lt;/a&gt;が出たのでWindows7上のVMWarePlayer3.1.4(4.0は様子見中)に入れてみました。&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;&lt;span style="font-size: large;"&gt;インターフェース&lt;/span&gt;&lt;/div&gt;とうとうVMWarePlayerでもUnityになってしまいました。&lt;br /&gt;まあ、UbuntuのUIは最初に9.10を入れたときの感想が「なんか林檎臭くてやな感じ」で特に気に入っていたわけでもありませんし、別にどうということもありません。&lt;br /&gt;メインで使ってるわけでもないし、多分一ヶ月もすれば慣れてるんじゃないかと思います。&lt;br /&gt;それに当たり前のことではありますが、Terminalの使い勝手はMSYSやCygwinよりも遥かにいいわけですしね。&lt;br /&gt;(でも、画面左のランチャーは、Windows7のタスクバーに比べて遥かに糞だと思います)&lt;br /&gt;&lt;br /&gt;さて、自分にとってとりあえず重要なのはwine(というか、avisynthが動くこと)とmingwですので、早速試してみることにしましょう。&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;&lt;span style="font-size: large;"&gt;wineとavisynth&lt;/span&gt;&lt;/div&gt;wineは使い始めた当初よりLatest official releaseのPPAを利用しています。&lt;br /&gt;launchpadに行ってみたら、Oneiric用のパッケージも既に配布されていました。&lt;br /&gt;今後は1.3だけの配布になるのかな？&lt;br /&gt;&lt;pre class="python" name="code"&gt;$ sudo add-apt-repository ppa:ubuntu-wine/ppa&lt;br /&gt;$ sudo apt-get update&lt;br /&gt;$ sudo apt-get install wine1.3&lt;br /&gt;&lt;/pre&gt;あとはsourceforgeからavisynth2.6.0α3とVirtualDubをDLして、avisynthはwine経由でインストール、VirtualDubは~/.wine/drive_c/Program Files以下に展開。&lt;br /&gt;&lt;br /&gt;さて、ここで注意したいのは、最近のwine1.3ではそのままではavisynthが動かないこと。&lt;br /&gt;どうやらmsvcrt関連に1.3.1xのあたりで大きな変更があったらしく、runtimeの追加が必要になっています。&lt;br /&gt;と言ってもやることは簡単で、Winetricks-&amp;gt;Select the default wineprefix-&amp;gt;Install a Windows DLL or componentでvcrun6をインストールするだけです。&lt;br /&gt;Windows実機でMicrosoftからVC++XX再頒布可能パッケージとかをDLしてインストールするよりも遥かに速くて楽ですし、どのWindowsアプリケーションでどのruntimeが要求されるかもわかりませんので、vcrun*は全て入れてしまってもいいかも知れません。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-DRO01EjpnhY/TphchtseVmI/AAAAAAAAAIk/yqcX1th-Q6s/s1600/winetricks_msvcrt.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="217" src="http://3.bp.blogspot.com/-DRO01EjpnhY/TphchtseVmI/AAAAAAAAAIk/yqcX1th-Q6s/s320/winetricks_msvcrt.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;これでavisynthは動きます。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;&lt;span style="font-size: large;"&gt;mingw&lt;/span&gt;&lt;/div&gt;GCCを使ったWindows用アプリケーションのビルドは、MSYSやCygwinよりもLinux上でクロスコンパイルしたほうが速いです。&lt;br /&gt;特にconfigureのスピードは桁違いで、MSYS環境だと3分はかかるffmpegのconfigureが、LinuxだとVM上でも15秒で終わります。&lt;br /&gt;ただ11.04までのUbuntuのmingw関連は、mingw32はGCC4.2.1のまま放置、mingw-w64はGCCこそ4.4.3と少しはマシのようだけどいろいろぶっ壊れていたりして、使いものになりませんでした(getopt.hとかが無いってどーいうことよ？)&lt;br /&gt;&lt;br /&gt;さて、今回のパッケージはどうでしょうか？&lt;br /&gt;とりあえずmingw32のほうは相変わらず放置のままのようですが、mingw-w64はGCC4.6.1に更新されていて抜けていたヘッダーもちゃんとあります。&lt;br /&gt;triplexもi586-mingw32msvc/amd64-mingw32msvcという「お前はGCCなのかMSVCなのかはっきりしろ」と言いたくなるようなDebian流のものから、i686-w64-mingw32/x86_64-w64-mingw32というmingw-w64の標準的なものに変更されてていい感じです。&lt;br /&gt;&lt;br /&gt;しかし、ここで一つ問題に気づきました。&lt;br /&gt;このパッケージにはlibvfw32.aが入っていません。&lt;br /&gt;mingw-w64はmingw32よりも開発が活発でどんどん良くなっていってはいるのですが、まだまだいくつかライブラリに抜けがあったりして、ときどきハマることがあります。&lt;br /&gt;libvfw32.aが追加されたのはたしか7月の終わりあたり…そしてこのパッケージはバージョンを見ると5月終わり頃のもののよう。&lt;br /&gt;折りしもmingw-w64は数日前にv2.0をリリースしたばかりだし、GCCも4.6.2がすぐに出ます(っていうか、たしか今月頭に出るはずだったんだが)…結局今回も11.04同様、自ビルドすることになりそうですorz&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-4098228265001984882?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/4098228265001984882/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/10/oneiric.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4098228265001984882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4098228265001984882'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/10/oneiric.html' title='Oneiric入れてみた'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-DRO01EjpnhY/TphchtseVmI/AAAAAAAAAIk/yqcX1th-Q6s/s72-c/winetricks_msvcrt.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-4129708503454269452</id><published>2011-10-11T03:26:00.000+09:00</published><updated>2011-10-15T15:26:00.101+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='活動記録'/><title type='text'>GPL violation?</title><content type='html'>「&lt;a href="http://www.x264licensing.com/"&gt;x264LLC&lt;/a&gt;と契約した某社が、libx264を使うBD用エンコードソフトのベータ版を出した」とkierank氏に聞いたので、ダウンロードしてみることにした。&lt;br /&gt;まずは配布ページに行ってユーザー登録。次にインストーラをDL。&lt;br /&gt;商用ソフトのベータ版というだけあってインストーラはinnoやmsiではなく最新のInstall Shieldだった。うーむ、これでは7zipでは解凍できないね。&lt;br /&gt;仕方ないのでインストーラをダブルクリックしてみると、EULAの次に表示されたのがこれ。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-IGgGFBojETk/TpLlIWQbVZI/AAAAAAAAAIY/WzjBpV-FxR8/s1600/gplv3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="242" src="http://1.bp.blogspot.com/-IGgGFBojETk/TpLlIWQbVZI/AAAAAAAAAIY/WzjBpV-FxR8/s320/gplv3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;えー、なんでー？　これって商用なんでしょ？&lt;br /&gt;正式リリース後はお金払わなきゃ使えなくなるんでしょ？&lt;br /&gt;開いたままふさがらない口を閉めつつ、早速カスタマーサポートに次のようなメールを送ってみることにした。&lt;br /&gt;&lt;pre style="color: #38761d;"&gt;この度御社のhogehogeベータ版をインストールしたところ、fugafuga.dllのライセンスに関して、&lt;br /&gt;GNU General Public License Version3であるとの提示がありました。&lt;br /&gt;GPLなプログラムを配布する場合は、そのプログラム自体のソースコードはもとより、プログラムをプラグインとして&lt;br /&gt;使用するアプリケーション本体等に関しても、OSやコンパイラが提供する「システムライブラリ」以外は全て&lt;br /&gt;ソースコードの開示義務が発生することはご存知であると思います。&lt;br /&gt;つきましては、GPLで保護された配布物の受領者として、全ソースコードの開示請求の権利を行使いたしたく思います&lt;br /&gt;ので、よろしくお取り計らいいただけますようお願いいたします。&lt;/pre&gt;でもって数日後に返ってきたお返事はこんな感じ&lt;br /&gt;&lt;pre style="color: #38761d;"&gt;お問い合わせの件ですが、まず、fugafuga.dllについては、GPLライセンス下のプログラムとなりますので、&lt;br /&gt;ご要望とあれば、ソースコードを郵送でお送りさせていただきます。お届け先のお名前、ご住所、お電話番号を&lt;br /&gt;お知らせください。&lt;br /&gt;また、「（GPL）プログラムをプラグインとして使用するアプリケーション本体等に関しても、OSやコンパイラが&lt;br /&gt;提供する「システムライブラリ」以外は全てソースコードの開示義務が発生すること」については、過去の例を含めて&lt;br /&gt;再度確認いたしましたが、開示義務があると断定することはできません。&lt;br /&gt;ただ、今後もこのようなご意見を頂戴することも考えられますので、本日よりfugafuga.dllの提供を停止させて&lt;br /&gt;いただきました。&lt;br /&gt;今後とも、hogehogeをよろしくお願いいたします。&lt;/pre&gt;&lt;br /&gt;そりゃあ、義務があると断定するためには裁判所の判決が必要になるでしょうが、少なくともGPLの条文には&lt;a href="http://www.gnu.org/licenses/gpl-faq.ja.html#GPLInProprietarySystem"&gt;義務が生じると書かれています&lt;/a&gt;。&lt;br /&gt;&lt;span style="color: #660000;"&gt;foobar2000とSecretRabitCodeの一件*&lt;/span&gt;とか、裁判まではいかなくても揉めた事例はいくつもあるわけで。&lt;br /&gt;もし誰かがFSFに垂れ込んだら、ひょっとすると本気で食いついてくるかも知れないよ？&lt;br /&gt;動画編集用Free-softwareの開発は、&lt;a href="http://www.fsf.org/campaigns/priority-projects/"&gt;GNUのHigh Priority Free Software Projectsの一つ&lt;/a&gt;としてここ数年間、ずっと掲げられているのを知ってる？&lt;br /&gt;そもそもGPLなライブラリを簡単に使えるんだったら、なんであんたらx264LLCと契約したの？&lt;br /&gt;&lt;a href="http://www.gnu.org/licenses/why-not-lgpl.ja.html"&gt;LGPLと勘違いしてないか？&lt;/a&gt;&lt;br /&gt;まあ、自分は当初の目的(この会社をからかって遊ぶこと、及びこのライブラリの使用を即刻やめさせること)は果たしたので、これ以上何かするつもりはないんですけどね。&lt;br /&gt;&lt;br /&gt;なんで使用をやめさせたかったかといえば、このソフトが商売としてちゃんと成功して欲しいと思っているから(自分が買う予定はまったくないけど)。&lt;br /&gt;x264LLCに入った利益はlibx264の開発に貢献した度合いに応じて各開発者に分配されることになっており、現にPegasysの&lt;a href="http://tmpgenc.pegasys-inc.com/ja/product/tvmw5.html"&gt;TMVW5&lt;/a&gt;やSplitMediaLabsの&lt;a href="http://www.xsplit.com/"&gt;XSplit&lt;/a&gt;といった商用ソフトのライセンス料の分配は始まっている。&lt;br /&gt;日本人の自分から見ればそれほどたいした金額ではないみたいなんだけど、例えばロシア人の某氏が受け取ったお金は、彼の本職のサラリー数カ月分に相当するそうである(JEEB氏によれば、彼の給料はロシアでは結構もらってるほうらしい)。&lt;br /&gt;ソフトウェアの共同開発を楽しみながらそこそこの小遣い稼ぎも出来るのであれば、特に物価の安いロシア/東欧/南米といった地域から生きの良い開発者が新たに出現する可能性は高くなるだろう。&lt;br /&gt;そして、そういう仕組みが出来上がったところでH.265が正式に勧告され、x264がx265になったら(もちろん彼らはそれくらいのことは既に考え始めている)、かなり面白いことになるんじゃないかな？&lt;br /&gt;そういう夢をみるためには、一つでも多くの成功事例が必要なのです。&lt;br /&gt;&lt;br /&gt;で、それはそれとして一人でニヤニヤしてればいいのに、なんでわざわざこんなのを書いているかといえば、似たようなライセンス爆弾を抱えているツールだのプラグインだのを結構見かけたりするから。&lt;br /&gt;すでにそのようなバイナリを配布しているあなたや、これから配布しようと思っているあなた、ホントにそれで大丈夫ですか？&lt;br /&gt;不注意から起こったトラブルでストレス貯めこんでハゲても知りませんよ？&lt;br /&gt;まあ、&lt;a href="http://sourceforge.jp/magazine/11/08/01/0448227"&gt;うっかりなんてことはそれこそ誰でもやっちゃうものですから&lt;/a&gt;、直せるなら早めに直したほうがいいでしょう。&lt;br /&gt;&lt;br /&gt;*&lt;a href="http://www.foobar2000.org/"&gt;foobar2000&lt;/a&gt;&lt;span style="color: #741b47;"&gt;は無料で配布されているWindows用オーディオプレーヤー(プラグインSDK以外のコードは非公開)。&lt;/span&gt;&lt;br /&gt;&lt;div style="color: #741b47;"&gt;&lt;a href="http://www.mega-nerd.com/SRC/index.html"&gt;SecretRabitCode&lt;/a&gt;(別名libsamplerate)は現在最も高品質と言われているオーディオリサンプル用ライブラリ(x264と同様のGPLv2又は商用の二重ライセンス)。&lt;/div&gt;&lt;div style="color: #741b47;"&gt;かつてSRCを使用したfoobar2000用リサンプラープラグインが書かれたことがあるが、これを見つけたSRCの作者Erik氏はプラグイン作者にfoobar2000の全コード、もしくはSRCの商用ライセンス料の支払いを要求し、件のプラグインは開発/配布の永久停止となった(まあ、探せばどこかで拾えるでしょうが)。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-4129708503454269452?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/4129708503454269452/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/10/gpl-violation.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4129708503454269452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4129708503454269452'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/10/gpl-violation.html' title='GPL violation?'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-IGgGFBojETk/TpLlIWQbVZI/AAAAAAAAAIY/WzjBpV-FxR8/s72-c/gplv3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-1506244066964789867</id><published>2011-09-26T09:41:00.000+09:00</published><updated>2011-09-27T04:54:02.452+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>RawSource.dll その6</title><content type='html'>RawSource26(avisynth2.6.0以降専用)を更新しました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/download.php?a6e6bqxbmrt9uge"&gt;rawsource_26_dll_20110925.zip&lt;/a&gt;&lt;br /&gt;&lt;a href="https://github.com/chikuzen/RawSource_2.6x"&gt;https://github.com/chikuzen/RawSource_2.6x&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;*widthの最大値を65536に変更。&lt;br /&gt;*あらたに最大解像度を設定(width x height &amp;lt;= 134217728)。&lt;br /&gt;*その他少々の手直し(出力には影響なし)&lt;br /&gt;&lt;br /&gt;必要なもの&lt;br /&gt;avisynth2.6.0α2以降&lt;br /&gt;sseが使えるマシン&lt;br /&gt;msvcr100.dll (Microsoft Visual C++ 2010 再頒布可能パッケージのことです)&lt;br /&gt;&lt;br /&gt;以前、読み込み用のバッファの確保をオリジナルのMAX_WIDTH x 4から動的確保に変更したので、現在のコードベースにおけるwidth及び解像度の上限は、単に非常識に大きな数値を入力された場合のout of memory回避のために設けてあります。&lt;br /&gt;とりあえず最大width4096で十分だろうと思っていたのですが、&lt;a href="http://forum.doom9.org/showthread.php?p=1528526#post1528526"&gt;一部の変な人達&lt;/a&gt;にはそれでは足りないらしいので増やしました。&lt;br /&gt;まあ、たとえwidth=65536, height=2048の場合でも、&lt;br /&gt;読み込み用バッファのサイズは65536*4=256KiB (RGB32の場合)&lt;br /&gt;avisynthが用意する1フレーム分のメモリは134217728x4=512MB(RGB32の場合)&lt;br /&gt;なので、とりあえずこれだけでクラッシュすることは無い(はず)です......大丈夫だといいなぁ&lt;br /&gt;&lt;br /&gt;それにしても最近のDoom9はMTとhigh-bit-colorと64bitでグチャグチャになっておりますな。&lt;br /&gt;自分はそういうハックに夢中になる暇があるなら、とりあえずさっさと2.6.0の正式リリースに漕ぎ着けられるよう、協力体制を取って欲しいものですが。&lt;br /&gt;2.6.0が正式リリースになれば2.5.8なんて誰も使わないのは目に見えてるんですから、もはや2.5.8でも使えるような配慮は単なる時間の無駄だと思っています。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-1506244066964789867?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/1506244066964789867/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/09/rawsourcedll-6.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1506244066964789867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1506244066964789867'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/09/rawsourcedll-6.html' title='RawSource.dll その6'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-2120487591867693793</id><published>2011-09-20T08:51:00.002+09:00</published><updated>2011-10-23T02:19:06.057+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ビルド'/><title type='text'>xvidcore-1.4.0</title><content type='html'>今月に入ってxvidのMLに幾つかビルド関連のパッチを投げたりしてみた。&lt;br /&gt;&lt;a href="http://list.xvid.org/pipermail/xvid-devel/2011-September/thread.html"&gt;http://list.xvid.org/pipermail/xvid-devel/2011-September/thread.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;もともと自分はただビルドするだけなのにパッチを当てたりするのは嫌いである。&lt;br /&gt;第一に、パッチの存在を知らない人間にはパッチは役に立たない。&lt;br /&gt;第二に、パッチを管理するのはめんどくさい。&lt;br /&gt;第三に、殆どの場合ビルドエラーの原因はあほらしい理由によるものなので、原因が分かったときに激しい虚しさに襲われることになる。&lt;br /&gt;&lt;br /&gt;たしかに開発本家にパッチ投げるのってパッチ書く以上にめんどいけど、やらないといつまでもその状態が続いてしまうので、とりあえず出来そうなところは修正してもらったほうがいいだろう。&lt;br /&gt;&lt;br /&gt;で、まあ、結果としていくつか採用されてsvnにコミットされたので、いままで必要だった手間は幾分減ることになった。&lt;br /&gt;次のstable release予定の1.4.0では、インストール時にライブラリを別名でコピーするくらいで済むのかな。&lt;br /&gt;&lt;br /&gt;追記 2011年10月22日&lt;br /&gt;Ubuntu11.10上でクロスコンパイルしようかと思いsvnのログを確認してみたら、ライブラリ名変更のリクエストもちゃんと受理してもらえてました。&lt;br /&gt;&lt;a href="http://websvn.xvid.org/cvs/viewvc.cgi?view=rev&amp;amp;revision=2044"&gt;http://websvn.xvid.org/cvs/viewvc.cgi?view=rev&amp;amp;revision=2044&lt;/a&gt;&lt;br /&gt;これで自分としてはパッチは完全に不要になりました。&lt;br /&gt;Isibaarさん、ありがとうございました！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-2120487591867693793?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/2120487591867693793/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/09/xvidcore-140.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/2120487591867693793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/2120487591867693793'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/09/xvidcore-140.html' title='xvidcore-1.4.0'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-5813584261895941643</id><published>2011-09-19T11:40:00.001+09:00</published><updated>2011-09-19T18:06:38.632+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>avs2pipemod その8</title><content type='html'>更新しました。&lt;br&gt;&lt;br&gt;&lt;a href="http://www.mediafire.com/download.php?p2iyweklw0tp76a"&gt;avs2pipemod-20110919.zip&lt;/a&gt;&lt;br&gt;&lt;a href="https://github.com/chikuzen/avs2pipemod"&gt;https://github.com/chikuzen/avs2pipemod&lt;/a&gt;&lt;br&gt;&lt;br&gt;*新機能'trim'を追加。&lt;br&gt;&lt;br&gt;Doom9で「avs2yuvみたいに-seekや-framesをサポート出来ないか」とリクエストを受けたので追加してみました。&lt;br&gt;内部でavisynthのTrim()を呼び出すだけの簡単なお仕事だし、まああっても邪魔にはならないと思ったので。&lt;br&gt;&lt;br&gt;使い方&lt;br&gt;avs2pipemod -y4mp -trim=100,200 input.avs &gt; output.y4m&lt;br&gt;というふうにすれば、avsの最後にTrim(100,200)を書いたのと同じようになります。&lt;br&gt;-infoと-x264bdでは無視されます。&lt;br&gt;&lt;br&gt;ところでリクエストしてきたStephen R. Savage氏は別名thewebchatというファンサブ界の厄介者らしい。&lt;br&gt;そーいや昔120fpsAVIの作り方とか調べてたな…物好きなこと。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-5813584261895941643?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/5813584261895941643/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/09/avs2pipemod-8.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/5813584261895941643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/5813584261895941643'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/09/avs2pipemod-8.html' title='avs2pipemod その8'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-5769449870344824847</id><published>2011-09-04T03:18:00.004+09:00</published><updated>2011-09-04T14:13:14.798+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ビルド'/><title type='text'>コンパイラによる最適化の押し付けにむかついた件について</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/syohex/20110616/1308237655"&gt;GCCの各オプティマイズレベルで有効になる最適化を調べる&lt;/a&gt;を読んでちょっと興味がわいたので、いろいろ手元の環境でも確認してみた。&lt;br /&gt;試したマシンはQ9450とT7300のせいかどれもリンク先と同じ結果になったわけですが、とにかく意外だったのは&lt;br /&gt;*-O2と-Osの違いは-finline-functionsの有無だけ(-Osは有り、-O2は無し)。&lt;br /&gt;&lt;br /&gt;-Osはサイズ優先の最適化のはずだけど、-O3(とにかくスピード優先)でも-finline-functionsがつくのであれば、これを有効にすればそこそこスピードアップの可能性があるということだろう。&lt;br /&gt;じゃあ、-O2の存在意義って一体なあに？&lt;br /&gt;-O3程ではないが、それなりにスピード優先のはずなんだけど…。&lt;br /&gt;&lt;br /&gt;とまあ、前置きはこのくらいにして、今度は各プロジェクトが設定しているデフォルトの最適化設定を調べてみた。&lt;br /&gt;&lt;br /&gt;例えばx264は--extra-cflagsを設定しなければ&lt;br /&gt;&lt;div style="background-color: #666666; color: white;"&gt;"-O3 -ffast-math -march=i686 -mfpmath=sse -msse -fomit-frame-pointer -fno-tree-vectorize -fno-zero-initialized-in-bss"&lt;/div&gt;がつく(x86の場合)。&lt;br /&gt;いかにも互換性を気にしつつも速そうな設定という感じですね。&lt;br /&gt;まあ、クリティカルな部分はほぼすべてasmで書かれてCPU検出で自動的に有効にするので、コンパイラによるCコードの最適化はあまり影響しないそうですが。&lt;br /&gt;&lt;br /&gt;これがxvidだと&lt;br /&gt;&lt;div style="background-color: #666666; color: #f3f3f3;"&gt;"-O2 -fstrength-reduce -finline-functions -ffast-math -fomit-frame-pointer"&lt;/div&gt;となっている。&lt;br /&gt;configure.inには&lt;br /&gt;&lt;pre style="background-color: #666666; color: #f3f3f3;"&gt;First we test if CFLAGS have been passed on command line&lt;br /&gt;I do that because autoconf defaults (-g -O2) suck and they would kill performance.&lt;br /&gt;To prevent that we define a good defult CFLAGS at the end of the script if and only&lt;br /&gt;if CFLAGS has not been passed on the command line&lt;/pre&gt;なんて書かれてますが、それにしては中途半端という印象が否めない。&lt;br /&gt;現在でも更新は続いているんだから、いい加減sseをデフォルトにするくらいはしてもいいのでは？ &lt;br /&gt;configure.inにはこのデフォルト値に対して&lt;span style="background-color: #666666; color: #f3f3f3;"&gt;"Default CFLAGS -- Big impact on overall speed"&lt;/span&gt;とも書かれているあたり、コンパイラによる最適化はかなり重要みたいなんだけど…自分で設定したほうがよさそうですな。&lt;br /&gt;&lt;br /&gt;さて問題はa52dec。&lt;br /&gt;これのconfigure.inは以下のような感じになっている。&lt;br /&gt;&lt;pre class="python" name="code"&gt;if test x"$GCC" = x"yes"; then&lt;br /&gt;    changequote(&amp;lt;&amp;lt;,&amp;gt;&amp;gt;)&lt;br /&gt;    OPT_CFLAGS=`echo "$CFLAGS"|sed "s/-O[0-9]*//g"`&lt;br /&gt;    changequote([,])&lt;br /&gt;    OPT_CFLAGS="$OPT_CFLAGS -O3"&lt;br /&gt;    AC_TRY_CFLAGS([$OPT_CFLAGS],[CFLAGS=$OPT_CFLAGS])&lt;/pre&gt;なんとコンパイラがGCCだったら有無を言わさず-O3強制です。&lt;br /&gt;たとえば何らかの理由でデバッグビルドしようと思ってCFLAGS="-O0 -g"しても、-O0は削除されて"-g -O3"なんていうへんてこりんなコードが出力されてしまいます。&lt;br /&gt;しかも-O3は勝手につけるのに、-fno-tree-vectorizeはなし。&lt;br /&gt;liba52はとても古いプロジェクトでCVSの最終更新は7年前。もはや死んだといってもおかしくない。&lt;br /&gt;当時は-O3だけでも問題なかったのかも知れませんが、現在ではまともな出力が得られるかどうか非常に疑わしい、地雷コードと化しています。&lt;br /&gt;これは不安定な-ftree-vectorizeを-O3で有効にしたままなかなか直さない(直せない?)GCCが悪いとも言えるかも知れないけど、素人がコードいじらなきゃいけないような自体はなるべく避けて欲しいなぁ。&lt;br /&gt;とりあえず&lt;a href="http://code.google.com/p/handbrake/source/browse/contrib/a52dec/A02-a52dec_configure.patch"&gt;こんなパッチ&lt;/a&gt;を書いてみたので、何かの事情で今時a52decをビルドしなければならない人は当てたほうがいいかもしれません。&lt;br /&gt;&lt;br /&gt;あともう一つ、openjpegプロジェクト。&lt;br /&gt;現在のstable release?であるはずのopenjpeg_v1_4_sources_r697.tgzをビルドしてみたら、設定したCFLAGSが全く反映されません。&lt;br /&gt;なんでかな？とlibopenjpeg/Makefile.amを見てみたら&lt;br /&gt;&lt;pre class="python" name="code"&gt;INCLUDES = -I.. -I.&lt;br /&gt;COMPILERFLAGS = -Wall -O3 -ffast-math -std=c99&lt;br /&gt;if with_sharedlibs&lt;br /&gt;COMPILERFLAGS += -DOPJ_EXPORTS&lt;br /&gt;else&lt;br /&gt;COMPILERFLAGS += -DOPJ_STATIC&lt;br /&gt;libopenjpeg_la_LDFLAGS += -static&lt;br /&gt;endif&lt;br /&gt;CFLAGS = $(COMPILERFLAGS) $(INCLUDES)&lt;/pre&gt;お前もかよ(そしてこれも-fno-tree-vectorizeなし)。&lt;br /&gt;svnの最新コードなら直ってるかなと見てみると今度はcomfigure.acのほうで&lt;br /&gt;&lt;pre class="python" name="code"&gt;if test "x${want_debug}" = "xyes" ; then&lt;br /&gt;   OPJ_COMPILER_FLAG([-g])&lt;br /&gt;   OPJ_COMPILER_FLAG([-O0])&lt;br /&gt;else&lt;br /&gt;   OPJ_COMPILER_FLAG([-O3])&lt;br /&gt;fi&lt;/pre&gt;あくまでも-O3は決定ですかそーですか...........むかつくわホント&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-5769449870344824847?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/5769449870344824847/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/09/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/5769449870344824847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/5769449870344824847'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/09/blog-post.html' title='コンパイラによる最適化の押し付けにむかついた件について'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-5265065009479726127</id><published>2011-07-09T14:05:00.000+09:00</published><updated>2011-10-09T00:01:26.325+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>バッファサイズ</title><content type='html'>前回の記事で筆者は「avs2yuvはバッファが512Bしかないから、256KiBのavs2pipemodよりも遅い」と書いたわけですが、これを読んだ人なら誰でも「じゃあ、avs2yuvのほうもバッファを増やせば速くなるんじゃね？」と考えるのではないでしょうか？&lt;br /&gt;&lt;br /&gt;はい、もちろん速くなります。&lt;br /&gt;&lt;br /&gt;バッファの拡張なんていうとなにやら大げさですが、やることといえば単にsetvbuf()というCの標準関数を使うだけです。&lt;br /&gt;試しにavs2yuvの書き込みバッファを128KiBに増やして前回のベンチマークをもう一度回してみると…平均284.48fps。&lt;br /&gt;ぐは、今度はavs2pipemodが負けた…orz&lt;br /&gt;&lt;br /&gt;悔しいので、avs2pipemodのほうのバッファサイズを256KiBから128KiBに減らしてみると…平均285.05fps。 どうやら引き分けといったところでしょうか。 &lt;br /&gt;&lt;pre class="python" name="code"&gt;             avs2yuv     avs2pipemod     avs2pipemod&lt;br /&gt;buffsize     128KiB         256KiB          128KiB&lt;br /&gt;1st (fps)    285.18         279.97          281.66&lt;br /&gt;2nd (fps)    283.45         274.59          285.96&lt;br /&gt;3rd (fps)    281.75         272.27          286.85&lt;br /&gt;4th (fps)    285.86         271.92          285.63&lt;br /&gt;5th (fps)    286.16         274.00          285.18&lt;br /&gt;avg (fps)    284.48         274.55          285.05&lt;br /&gt;&lt;/pre&gt;このように、バッファサイズは少なすぎてはいけませんが、かといって多ければいいというものでもない。&lt;br /&gt;ハードや扱う素材等によっても最適値は変化するでしょう。&lt;br /&gt;でもそこらへんまで追求を始めると「湾岸ミッドナイト」な世界に突入してしまいそうです。&lt;br /&gt;まあ、64KiB～256KiBくらいにしておくのが無難じゃないですかね。&lt;br /&gt;&lt;br /&gt;てなわけで、このへんでお開き。&lt;br /&gt;とりあえずバッファを128KiBにしたavs2yuv(MasterNobody版ベース)とavs2pipemodを置いときます。&lt;br /&gt;&lt;a href="http://www.mediafire.com/download.php?jso311qhzc6ms0l"&gt;avs2yuv_c99-mod.zip&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mediafire.com/download.php?4dy75g2lsy1cmxq"&gt;avs2pipemod-20110709.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;追記 2011.09.21&lt;br /&gt;Doom9でこのことについて少し書いたら、MasterNobody氏がこれを取り込んだバージョンを出しました。&lt;br /&gt;&lt;a href="http://forum.doom9.org/showthread.php?t=162578"&gt;http://forum.doom9.org/showthread.php?t=162578&lt;/a&gt;&lt;br /&gt;&lt;a href="http://komisar.gin.by/tools/avs2yuv/avs2yuv-0.24bm2.zip"&gt;avs2yuv-0.24bm2.zip&lt;/a&gt;&lt;br /&gt;追加機能でi422/i444対応も入っているので、自分の改造板avs2yuvを使うメリットはもはやありません。&lt;br /&gt;MasterNobody氏のavs2yuvを使うことをおすすめします。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-5265065009479726127?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/5265065009479726127/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/07/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/5265065009479726127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/5265065009479726127'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/07/blog-post.html' title='バッファサイズ'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-1691370865222506778</id><published>2011-07-09T03:43:00.003+09:00</published><updated>2011-07-10T12:09:08.493+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>avs2yuv その２</title><content type='html'>前回avs2yuvの修正/改造版をリリースしたら、直後に今度はMasterNobody(Anton Mitrofanov、別名BugMaster)氏が&lt;a href="http://forum.doom9.org/showthread.php?t=145912"&gt;C言語版のavs2yuv&lt;/a&gt;を出した。&lt;br&gt;avsからy4mで出力するツールが一気に増えてしまったので、ここらへんで整理してみようかと思う。&lt;br&gt;&lt;br&gt;まずavs2yuvを使うならどれがいいのか？&lt;br&gt;avs2yuvは本家(pengvado版)、kemuri-_9版、MasterNobody版、そして筆者のものの4種類がありますが、一番のオススメは&lt;a href="http://forum.doom9.org/showpost.php?p=1512173&amp;postcount=13"&gt;MasterNobody氏の最新版&lt;/a&gt;です。&lt;br&gt;スピードや出力自体はどれもたいして変わりませんが、終了時、及びエラー時の処理が一番丁寧に行われています。&lt;br&gt;加えてバイナリのサイズも一番小さく、筆者版のように追加で必要なランタイムもありません。&lt;br&gt;さらにavisynthMTを使っている場合は自動でavsの最後にDistributor()を追加するようにもなっています。&lt;br&gt;おまけにmingw用のコードなので、LinuxやMacでも簡単にクロスコンパイル出来ます。&lt;br&gt;ついでに言えば、64bit用バイナリも同梱されています。&lt;br&gt;avs2yuvを使うなら、多分これが一番いいでしょう。&lt;br&gt;&lt;br&gt;では他のツールも含めた場合ならどれがいいのか？&lt;br&gt;とりあえず使用目的が32bitのavisynthの出力をpipeで64bitのx264に渡すこと、もしくはwineでavisynthを使うことなら、現状ではavs2pipemodが一番いいです。&lt;br&gt;理由は単純に一番速いから。&lt;br&gt;avs2yuvの現在配布されているバイナリすべて、そしてavs2pipe-0.0.3は、ファイル書き込み用バッファを512Byteしか持っていません(stdio.hで定義されている値をそのまま使っています)。&lt;br&gt;非圧縮フォーマットであるy4mにとって、これはいささか少なすぎます。&lt;br&gt;ffmpegに至っては、avs2yuvよりもさらに遅い上にオプションがやたら長くなります。&lt;br&gt;&lt;br&gt;ffmpeg -v 0 -i foo.avs -pix_fmt yuv420p -vcodec rawvideo -an -f yuv4mpegpipe - | x264 - --demuxer y4m ...&lt;br&gt;&lt;br&gt;一方avs2pipemodは、&lt;a href="http://csbarn.blogspot.com/2011/04/avs2pipemod.html"&gt;以前書いたように&lt;/a&gt;書き込み用バッファを拡張しています(20110703版の時点では256KiByte)。&lt;br&gt;これにより発生するスピード差は次のようなベンチマークをしてみれば一目瞭然です。&lt;br&gt;&lt;pre name=code class=python&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;echo ColorBars\(1280,720,\"YV12\"\).Trim\(0,4999\) &gt; ./ColorBars.avs&lt;br /&gt;&lt;br /&gt;#avs2yuvとavs2pipemodで同じavs(5000フレーム)をそれぞれ5回ずつ回してみる。&lt;br /&gt;#avs2yuvはMasterNobody版を使用&lt;br /&gt;&lt;br /&gt;for i in {1..5}; do&lt;br /&gt;avs2yuv ./ColorBars.avs -o - | x264 - --demuxer y4m --preset ultrafast -o /dev/null&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;for i in {1..5}; do&lt;br /&gt;avs2pipemod -y4mp ./ColorBars.avs | x264 - --demuxer y4m --preset ultrafast -o /dev/null&lt;br /&gt;done&lt;br /&gt;&lt;/pre&gt;さて、自分の環境での結果は以下の通りでした。&lt;pre name=code class=python&gt;&lt;br /&gt;        avs2yuv     avs2pipemod&lt;br /&gt;1st    213.04fps     276.53fps&lt;br /&gt;2nd    211.18fps     273.69fps&lt;br /&gt;3rd    213.53fps     275.32fps&lt;br /&gt;4th    213.69fps     276.53fps&lt;br /&gt;5th    213.07fps     276.59fps&lt;br /&gt;avg    212.90fps     275.73fps&lt;/pre&gt;実際のエンコードにおいてはこんなに軽いavsを使うことはないでしょうし、x264の設定もずっと重くなりますから、差はかなり縮まるでしょう。&lt;br&gt;しかし、avs2pipemodがavs2yuvよりも遅くなることは、まずありえない話です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-1691370865222506778?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/1691370865222506778/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/07/avs2yuv_09.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1691370865222506778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1691370865222506778'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/07/avs2yuv_09.html' title='avs2yuv その２'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-4077925066218298897</id><published>2011-07-04T23:26:00.002+09:00</published><updated>2011-07-05T10:52:06.434+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>avs2yuv</title><content type='html'>Windows7を使い始めてからしばらくした頃、avs2yuvがクラッシュするようになった。&lt;br&gt;Doom9とかでは特に問題になっていなかったので自分の環境だけかと思っていたのだが、しばらくしてdoom10のほうに&lt;a href="http://doom10.org/index.php?topic=199.msg4126#msg4126"&gt;こんなスレッド&lt;/a&gt;が立ち、自分以外にも同じ問題を抱えている人がいることを知った。&lt;br&gt;&lt;br&gt;解決策が見つからないので、しばらくの間はavs2yuvのかわりにffmpegを使っていた。&lt;br&gt;そのうちにdoobry氏がavs2pipeをリリースしたので自分はこちらに乗り換え、さらにこれをより自分好みなツールに改造すべくC/C++の学習を本格的に始めてしまったわけだが、avs2yuvの件はずっと脳内の片隅に引っ掛かっていた。&lt;br&gt;&lt;br&gt;さて、今日になって&lt;a href="http://forum.doom9.org/showthread.php?t=84481"&gt;このスレッド&lt;/a&gt;を何気なく読んでいたら、とても気になる記述が…。&lt;br&gt;&lt;pre&gt;avs2yuv 0.24 fix: http://forum.doom9.org/showthread.php?t=145912&lt;/pre&gt;&lt;br&gt;&lt;br&gt;まさか２年以上前に、すでに解決策が出ていたとはなぁ…不覚orz&lt;br&gt;とりあえず、このパッチを適用したバイナリはどこにもないようなので、ビルドして配布することにした。&lt;br&gt;ついでに-hfyu用のエンコーダーをmencoderからffmpegに変更(現在のmencoderはffmpeg以上に信用出来ない地雷ツールなので)したので、もうちょっと便利になったと思う。&lt;br&gt;&lt;br&gt;&lt;a href="http://www.mediafire.com/download.php?ci6b597547yuxcj"&gt;avs2yuv-0.24m.zip&lt;/a&gt; (要msvcr100.dll)&lt;br&gt;&lt;a href="https://github.com/chikuzen/avs2yuv"&gt;https://github.com/chikuzen/avs2yuv&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-4077925066218298897?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/4077925066218298897/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/07/avs2yuv.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4077925066218298897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4077925066218298897'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/07/avs2yuv.html' title='avs2yuv'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-926395049653660810</id><published>2011-07-03T14:28:00.004+09:00</published><updated>2011-07-04T13:14:41.379+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>avs2pipemod その7</title><content type='html'>更新。&lt;br&gt;この前waviのコードを読んだのをきっかけに、RIFF-WAVEフォーマットについていろいろ調べてみました。&lt;br&gt;どうやらものに出来たようなので、avs2pipemodに新機能を追加。&lt;br&gt;&lt;br&gt;&lt;a href="http://www.mediafire.com/download.php?aa43daakid35kaa"&gt;avs2pipemod-20110703.zip&lt;/a&gt;&lt;br&gt;&lt;a href="https://github.com/chikuzen/avs2pipemod"&gt;https://github.com/chikuzen/avs2pipemod&lt;/a&gt;&lt;br&gt;&lt;br&gt;*'-audio'オプションを廃止し、'-wav'と'-extwav'オプションを追加&lt;br&gt;'-wav'は、一般的なriff-wave(.wav)フォーマットで出力します。&lt;br&gt;'-extwav'は、チャンネルマスク付きのwave extensible formatで出力します。&lt;br&gt;チャンネルマスクはチャンネル数に応じて決め打ちになるので、特殊なスピーカー配置の場合はwaviを使ったほうが良いでしょう。&lt;br&gt;PCM音声の場合、wave extensible formatが普通のwavよりいいところはチャンネルマスクを付けられる点だけなわけですが、これをサポートしているソフトはそれほど多くはないようです。&lt;br&gt;よく分からない場合は'-wav'を使いましょう。&lt;br&gt;ちなみにこれまでの'-audio'は「チャンネルマスク無しのwave extensible format」という微妙すぎるものしか出力できませんでした。&lt;br&gt;&lt;br&gt;*'-rawvideo'の引数にvflipを追加&lt;br&gt;avs2pipemod -rawvideo=vflip input.avs とすれば、映像の上下を反転して出力します。&lt;br&gt;RGB出力時の反転対策です。&lt;br&gt;&lt;br&gt;追記&lt;br&gt;Doom9に投稿したらIanB氏にオプションを変えたことでお小言をくらってしまったので、-audioでも-extwavと同じ挙動をするように変更しました。&lt;br&gt;&lt;a href="http://www.mediafire.com/download.php?9x0du58bii28t27"&gt;avs2pipemod-20110703-2.zip&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-926395049653660810?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/926395049653660810/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/07/avs2pipemod-7.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/926395049653660810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/926395049653660810'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/07/avs2pipemod-7.html' title='avs2pipemod その7'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-4116780949512328214</id><published>2011-06-23T01:16:00.002+09:00</published><updated>2011-06-23T12:00:28.821+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>ARDeformation.dll その２</title><content type='html'>さて、この前公開してみたARDeformation.dllですが、よく考えてみると設計ミスをしていることに気づきました。&lt;br&gt;ARResizeの引数の順番が、どう考えてもおかしい。&lt;br&gt;modeを一番最初にもってきてしまっているため、使用時は"dar"であれ"sar"であれ、常にmodeを指定するか、引数を名前付きで指定しなければならなくなってしまっています。&lt;br&gt;&lt;br&gt;例)&lt;br&gt;DAR16:9にリサイズしたい場合　…　ARResize("dar", 16, 9)　もしくは　ARResize(ar_x=16, ar_y=9)&lt;br&gt;SAR40:33にリサイズしたい場合 …　ARResize("sar", 40, 33)&lt;br&gt;&lt;br&gt;これでは使いにくいので、引数の順番を変更しました。&lt;br&gt;とりあえずmodeは一番最後に変更したため、sar/parの場合は常にmode="sar"(or "par")とするようになりました。&lt;br&gt;&lt;br&gt;例)&lt;br&gt;DAR16:9にリサイズしたい場合　…　ARResize(16, 9)&lt;br&gt;SAR40:33にリサイズしたい場合 …　ARResize(40, 33, mode="sar")&lt;br&gt;&lt;br&gt;他の順番も少し変更したので、詳細は&lt;a href="https://github.com/chikuzen/ARDeformation/blob/master/readme.txt"&gt;readme&lt;/a&gt;を読んでください。&lt;br&gt;&lt;br&gt;&lt;a href="http://www.mediafire.com/download.php?6sx01rj17wlp72z"&gt;ARDeformation_20110622.zip&lt;/a&gt;&lt;br&gt;&lt;a href="https://github.com/chikuzen/ARDeformation"&gt;https://github.com/chikuzen/ARDeformation&lt;/a&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-4116780949512328214?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/4116780949512328214/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/06/ardeformationdll_23.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4116780949512328214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4116780949512328214'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/06/ardeformationdll_23.html' title='ARDeformation.dll その２'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-7589496862539827188</id><published>2011-06-17T02:55:00.003+09:00</published><updated>2011-06-17T05:50:28.611+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>Fix wavi</title><content type='html'>昨日、ちょっとしたきっかけで、&lt;a href="http://sourceforge.net/projects/wavi-avi2wav/"&gt;wavi.exe&lt;/a&gt;がクラッシュすることがあるのに気づいた。&lt;br&gt;なぜか音声ファイル(.wav)の書き出し終了時に落ちるのである。&lt;br&gt;&lt;br&gt;(Chikuzen) wavi.exeが何故かクラッシュするのでコードを覗いてみたが&lt;br&gt;(Chikuzen) あまりにも汚いので10分の1で投げ出してしまった&lt;br&gt;(VFRmaniac) 笑&lt;br&gt;(Chikuzen)とりあえずCleanupAndExit()でクラッシュするみたいなので、そのあたりにfprintfを大量に仕込んでみると&lt;br&gt;(Chikuzen) LocalFree()で失敗することがわかった&lt;br&gt;(VFRmaniac) いきなり長文のstderrで吹いた&lt;br&gt;(VFRmaniac) 二重解放？&lt;br&gt;(Chikuzen) 多分そう　＞二重開放&lt;br&gt;(Chikuzen) そもそもどこでバッファ確保してるんだろ、これ&lt;br&gt;(VFRmaniac) ちょっとまて...&lt;br&gt;(VFRmaniac) LPBYTE        buffer[2][BUFFER_SIZE];&lt;br&gt;(VFRmaniac) これ、動的に確保してなくね？&lt;br&gt;(VFRmaniac) LocalAlloc も LocalReAllocもみつかんねーぞ！&lt;br&gt;(VFRmaniac) http://msdn.microsoft.com/ja-jp/library/cc430156.aspx&lt;br&gt;(VFRmaniac) この行 不要じゃね？&lt;br&gt;(Chikuzen) そうよね、配列使って静的に確保してるよね&lt;br&gt;&lt;br&gt;てなわけで直ったので、ついでにtebasuna51氏のパッチあててDoom9に置いてきました&lt;br&gt;&lt;a href="http://forum.doom9.org/showthread.php?t=161639"&gt;http://forum.doom9.org/showthread.php?t=161639&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-7589496862539827188?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/7589496862539827188/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/06/fix-wavi.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/7589496862539827188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/7589496862539827188'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/06/fix-wavi.html' title='Fix wavi'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-3421846826803232673</id><published>2011-06-15T05:43:00.000+09:00</published><updated>2011-06-15T05:43:57.403+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>RawSource.dll その5</title><content type='html'>AviSynth2.6用に大幅に書き直したものです。&lt;br&gt;&lt;br&gt;&lt;a href="http://www.mediafire.com/download.php?9jkkc7h8ch9lglt"&gt;RawSource_26_dll_20110614.zip&lt;/a&gt;&lt;br&gt;&lt;a href="https://github.com/chikuzen/RawSource_2.6x"&gt;https://github.com/chikuzen/RawSource_2.6x&lt;/a&gt;&lt;br&gt;&lt;br&gt;*I444,YV24の読み込みに対応。&lt;br&gt;*YUV411をYUY2ではなくYV411で読み込むように変更。&lt;br&gt;*I422,YV16はYV16で読み込むように変更。&lt;br&gt;*Y8はYV12ではなくY8で読み込むように変更(これにより奇数解像度に対応)。&lt;br&gt;&lt;br&gt;必要なもの&lt;br&gt;AviSynth2.6.0alpha2以降&lt;br&gt;SSEマシン&lt;br&gt;msvcr100.dll&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-3421846826803232673?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/3421846826803232673/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/06/rawsourcedll-5.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/3421846826803232673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/3421846826803232673'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/06/rawsourcedll-5.html' title='RawSource.dll その5'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-926430107248261895</id><published>2011-06-14T21:06:00.003+09:00</published><updated>2011-06-23T05:48:19.032+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>ARDeformation.dll</title><content type='html'>さて、前回のコードにさらに手を加えてみたのがこのプラグインです。&lt;br&gt;&lt;br&gt;&lt;a href="http://csbarn.blogspot.com/2011/06/ardeformationdll_23.html"&gt;更新しました&lt;/a&gt;&lt;br&gt;&lt;a href="https://github.com/chikuzen/ARDeformation"&gt;https://github.com/chikuzen/ARDeformation&lt;/a&gt;&lt;br&gt;&lt;br&gt;使い方&lt;br&gt;&lt;br&gt;DARPadding(clip, float "dar_x", float "dar_y", int "align", int "color")&lt;br&gt;&lt;br&gt;　　指定したDARにあわせて、左右または上下にベタを付与します。&lt;br&gt;　　dar_x: DARの分子(水平方向)の値　(デフォルト：clip.width)&lt;br&gt;　　dar_y: DARの分母(垂直方向)の値　(デフォルト：clip.height)&lt;br&gt;　　align：左(または上)にパディングされるベタの幅を、この値の倍数になるように調整する(デフォルト：16)&lt;br&gt;　　color：ベタの色指定　(デフォルト：$00000000(黒))&lt;br&gt;&lt;br&gt;なんらかの理由でレターボックス/ピラーボックスにしてエンコしないといけない場合に使うといいかも知れません(もちろん使わないにこしたことはありませんが)。&lt;br&gt;alignのデフォルトは16なので、そのまま使えば若干左寄り(若しくは上寄り)になります。それが嫌な場合はalignを1にすれば、(ほぼ)ど真ん中になります。&lt;br&gt;&lt;br&gt;ARResize(clip, string "mode", float "ar_x", float "ar_y", bool "expand", float "src_left", float "src_top",&lt;br&gt;　　　　　float "src_right", float "src_bottom", string "resizer", float "ep0", float "ep1", int "dest_w", int "dest_h")&lt;br&gt;&lt;br&gt;　　指定したアスペクト比にあわせて、本体内蔵のリサイザを使ってリサイズします。&lt;br&gt;　　mode: アスペクト比のタイプ("dar","sar","par")を指定します。(デフォルト："dar")&lt;br&gt;　　ar_x: アスペクト比の分子(水平方向)の値 。(デフォルト：clip.width(dar) or 1(sar/par))&lt;br&gt;　　ar_y: アスペクト比の分母(垂直方向)の値 。(デフォルト：clip.height(dar) or 1(sar/par))&lt;br&gt;　　expand: 拡大するか縮小するかを選びます 。(デフォルト：true(拡大))&lt;br&gt;　　src_*：avisynthの各リサイザの引数と同じです。 (デフォルト：0)&lt;br&gt;　　resizer: 呼び出すリサイザを指定します 。(デフォルト："Bicubic")&lt;br&gt;　　ep0: 各リサイザ固有の引数その1。lanczosの"taps"やBicubicの"b"を指定します。 (デフォルト：各リサイザの規定値)&lt;br&gt;　　ep1: 各リサイザ固有の引数その2。Bicubicの"c"がこれにあたります。(デフォルト：1.0/3)&lt;br&gt;　　dest_w: 出力のwidthをこの値に矯正します。(デフォルト：0(無効))&lt;br&gt;　　dest_h: 出力のheightをこの値に矯正します。dest_wが0以外の場合は無視されます。(デフォルト：0(無効))&lt;br&gt;　　なおdest_w,dest_hを設定した場合は、expandは無視されます。&lt;br&gt;&lt;br&gt;例えばDVDソースにARResize("dar",16,9,true,8,0,-8,0,"lanczos4")とすれば、無効領域を削ってLanczos4Resizeで16:9に拡大(854x480、PALなら1024x576)します。&lt;br&gt;&lt;br&gt;二つとも必要な計算を行って、avisynth.dll内の関数を呼び出しているだけなので、スクリプトでも可能でしょう。&lt;br&gt;しかし、ARResizeのほうは…これと同等のものをスクリプトで書きたいとは思いませんね。めんどすぎます。そもそもavsのfloatでの計算だと精度が落ちるような気もするし。&lt;br&gt;&lt;br&gt;興味がある人は、自分でもなにかやってみてください。&lt;br&gt;結構面白いです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-926430107248261895?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/926430107248261895/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/06/ardeformationdll.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/926430107248261895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/926430107248261895'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/06/ardeformationdll.html' title='ARDeformation.dll'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-6990160227227402686</id><published>2011-06-14T06:31:00.007+09:00</published><updated>2011-06-17T13:10:47.748+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>スクリプトをプラグインにしてみる</title><content type='html'>前回は簡単な関数をプラグインにしたので、今回は簡単なユーザースクリプト関数をプラグインにしてみることにしました。&lt;br&gt;&lt;br&gt;まずこんなスクリプトを用意してみます。&lt;br&gt;&lt;pre name="code" class="python"&gt;&lt;br /&gt;#DAR_Padding.avs&lt;br /&gt;function DAR_Padding(clip c, float "dar_x", float "dar_y", int "color", int "align") {&lt;br /&gt;    dar_x = default(float(dar_x), float(c.width))&lt;br /&gt;    dar_y = default(float(dar_y), float(c.height))&lt;br /&gt;    color = default(color, $000000)&lt;br /&gt;    align = default(align, 16)&lt;br /&gt;&lt;br /&gt;    Assert(dar_x &gt; 0 &amp;&amp; dar_y &gt; 0, "\"dar_x\" and \"dar_y\" need to be positive values.")&lt;br /&gt;    Assert(align &gt;= 1, "align needs to be 1 or heigher integer.")&lt;br /&gt;&lt;br /&gt;    flag = c.width * dar_y - c.height * dar_x&lt;br /&gt;    subsample_h = c.IsYUY2 || c.IsYV16 || c.IsYV12 ? 2 : 1&lt;br /&gt;    #IsYV411は現時点(avisynth2.6.0a3)ではまだ作られてないので、YV411非対応&lt;br /&gt;    subsample_v = c.IsYV12 ? 2 : 1&lt;br /&gt;&lt;br /&gt;    dest_width  = flag &lt; 0 ? int(ceil(c.height * dar_x / dar_y)) : c.width&lt;br /&gt;    dest_width  = dest_width + (dest_width % subsample_h)&lt;br /&gt;&lt;br /&gt;    dest_height = flag &gt; 0 ? int(ceil(c.width * dar_y / dar_x)) : c.height&lt;br /&gt;    dest_height = dest_height + (dest_height % subsample_v)&lt;br /&gt;&lt;br /&gt;    pad_left = (dest_width - c.width) / 2&lt;br /&gt;    pad_left = pad_left - (pad_left % subsample_h)&lt;br /&gt;    pad_left = adjust_align(pad_left, align, subsample_h)&lt;br /&gt;&lt;br /&gt;    pad_right = dest_width - (c.width + pad_left)&lt;br /&gt;&lt;br /&gt;    pad_top = (dest_height - c.height) / 2&lt;br /&gt;    pad_top = pad_top - (pad_top % subsample_v)&lt;br /&gt;    pad_top = adjust_align(pad_top, align, subsample_v)&lt;br /&gt;&lt;br /&gt;    pad_bottom = dest_height - (c.height + pad_top)&lt;br /&gt;&lt;br /&gt;    return c.AddBorders(pad_left, pad_top, pad_right, pad_bottom, color)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function adjust_align(int pad, int align, int subsample) {&lt;br /&gt;    return pad % align == 0 ? pad : adjust_align(pad - subsample, align, subsample)&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;はやい話が指定したDARにあわせて左右（または上下)に自動的にAddBordersでパディングするという関数です。&lt;br&gt;さて、これをC++で書いてみるとこうなりました。&lt;br&gt;&lt;pre name="code" class="cpp"&gt;&lt;br /&gt;//DAR_Padding.dll&lt;br /&gt;#include &amp;ltmath.h&amp;gt&lt;br /&gt;#include "windows.h"&lt;br /&gt;#include "avisynth26.h"&lt;br /&gt;&lt;br /&gt;#pragma  warning(disable:4996)&lt;br /&gt;&lt;br /&gt;class DAR_Padding : public GenericVideoFilter {&lt;br /&gt;&lt;br /&gt;    PClip padded;&lt;br /&gt;&lt;br /&gt;public:&lt;br /&gt;    DAR_Padding(PClip _child, const float _dar_x, const float _dar_y,&lt;br /&gt;                const int align, const int color, IScriptEnvironment* env);&lt;br /&gt;    ~DAR_Padding() { }&lt;br /&gt;    PVideoFrame __stdcall GetFrame(int n, IScriptEnvironment* env);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;DAR_Padding::&lt;br /&gt;DAR_Padding(PClip _child, const float _dar_x, const float _dar_y, const int color,&lt;br /&gt;            const int align, IScriptEnvironment* env) : GenericVideoFilter(_child)&lt;br /&gt;{&lt;br /&gt;    double dar_x = !_dar_x ? (double)vi.width : (double)_dar_x;&lt;br /&gt;    double dar_y = !_dar_y ? (double)vi.height : (double)_dar_y;&lt;br /&gt;&lt;br /&gt;    double flag = vi.width * dar_y - vi.height * dar_x;&lt;br /&gt;    int dest_width = flag &lt; 0 ? (int)ceil(vi.height * dar_x / dar_y) : vi.width;&lt;br /&gt;    int dest_height = flag &gt; 0 ? (int)ceil(dest_width * dar_y / dar_x) : vi.height;&lt;br /&gt;&lt;br /&gt;    int subsample_h = vi.SubsampleH();&lt;br /&gt;    int subsample_v = vi.SubsampleV();&lt;br /&gt;    //SubsampleH(),SubsampleV()は、自分で作ってavisynth.hに追加した関数(YV411対応)。&lt;br /&gt;    dest_width += dest_width % subsample_h;&lt;br /&gt;    dest_height += dest_height % subsample_v;&lt;br /&gt;&lt;br /&gt;    int pad_left = (dest_width - vi.width) &gt;&gt; 1;&lt;br /&gt;    pad_left -= (pad_left % subsample_h);&lt;br /&gt;    while(pad_left % align)&lt;br /&gt;        pad_left -= subsample_h;&lt;br /&gt;&lt;br /&gt;    int pad_right = dest_width - (vi.width + pad_left);&lt;br /&gt;&lt;br /&gt;    int pad_top = (dest_height - vi.height) &gt;&gt; 1;&lt;br /&gt;    pad_top -= (pad_top % subsample_v);&lt;br /&gt;    while(pad_top % align)&lt;br /&gt;        pad_left -= subsample_h;&lt;br /&gt;&lt;br /&gt;    int pad_bottom = dest_height - (vi.height + pad_top);&lt;br /&gt;&lt;br /&gt;    vi.width = dest_width;&lt;br /&gt;    vi.height = dest_height;&lt;br /&gt;&lt;br /&gt;    try {&lt;br /&gt;        AVSValue padargs[6] = {child, pad_left, pad_top, pad_right, pad_bottom, color};&lt;br /&gt;        padded = env-&gt;Invoke("AddBorders", AVSValue(padargs, 6)).AsClip();&lt;br /&gt;    } catch (IScriptEnvironment::NotFound) {&lt;br /&gt;        env-&gt;ThrowError("DAR_Padding: Couldn't Invoke AddBorders.");&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;PVideoFrame __stdcall DAR_Padding::&lt;br /&gt;GetFrame(int n, IScriptEnvironment* env)&lt;br /&gt;{&lt;br /&gt;    return padded-&gt;GetFrame(n, env);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;AVSValue __cdecl Create_DAR_Padding(AVSValue args, void* user_data, IScriptEnvironment* env)&lt;br /&gt;{&lt;br /&gt;    const float dx = args[1].AsFloat(0.0);&lt;br /&gt;    const float dy = args[2].AsFloat(0.0);&lt;br /&gt;    const int cl = args[3].AsInt(0);&lt;br /&gt;    const int al = args[4].AsInt(16);&lt;br /&gt;&lt;br /&gt;    if (dx &lt; 0 || dy &lt; 0)&lt;br /&gt;        env-&gt;ThrowError("DAR_Padding: \"dar_x\" and \"dar_y\" need to be positive values.");&lt;br /&gt;    if (align &lt; 1)&lt;br /&gt;        env-&gt;ThrowError("DAR_Padding: \"align\" needs to be 1 or higher integer.");&lt;br /&gt;&lt;br /&gt;    return new DAR_Padding(args[0].AsClip(), dx, dy, cl, al, env);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;extern "C" __declspec(dllexport) const char* __stdcall AvisynthPluginInit2(IScriptEnvironment* env)&lt;br /&gt;{&lt;br /&gt;    env-&gt;AddFunction("DAR_Padding", "c[dar_x]f[dar_y]f[color]i[align]i", Create_DAR_Padding, 0);&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;わかったこと&lt;br&gt;たしかにC/C++で書くための煩雑な手続き（クラスの宣言とか）は必要になりますが、if/for/whileといったものが使える分、プラグインのほうがむしろ書きやすいかもしれません。&lt;br&gt;それに、AviSynthの内部情報に直接アクセスできる点も有利です。&lt;br&gt;三項演算子や再帰を使ってあれこれ考えるのに飽きた人は挑戦してみるといいかも。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-6990160227227402686?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/6990160227227402686/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/06/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6990160227227402686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6990160227227402686'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/06/blog-post.html' title='スクリプトをプラグインにしてみる'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-3995912310774895661</id><published>2011-06-05T05:59:00.001+09:00</published><updated>2011-06-14T07:20:29.930+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>FCollections.dll</title><content type='html'>RawSource.dllの改造も一段落ついたような気がしたので、なにか新しいものを書いてみたくなりました。&lt;br&gt;&lt;br&gt;あまり難しいものは書けそうにないし、そもそもネタもない。&lt;br&gt;なにか簡単そうなやつがいいということで、あれこれ考えているうちに目をつけたのがfilter script用関数。&lt;br&gt;つまりint()とかstring()とかIsClip()とかの類のことですね。&lt;br&gt;すでに役に立ちそうな関数はあらかた本体の方に揃っているので、それほど役に立つものは書けないだろうけど、初心者の学習用には調度良いような気がしたのでやってみました。&lt;br&gt;&lt;br&gt;&lt;a href="http://www.mediafire.com/download.php?ri8l69r3jho56z3"&gt;FCollections-20110604.zip&lt;/a&gt;&lt;br&gt;&lt;a href="https://github.com/chikuzen/FCollections"&gt;https://github.com/chikuzen/FCollections&lt;/a&gt;&lt;br&gt;&lt;br&gt;以下、説明。&lt;br&gt;&lt;br&gt;必要なもの:&lt;br&gt;AviSynth2.5x or later&lt;br&gt;SSEが使えるマシン(拡張命令セットでSSE有効にしています)&lt;br&gt;msvcr100.dll&lt;br&gt;&lt;br&gt;TimeStringToMilliSecond(string "time string"):&lt;br&gt;時間をあらわす文字列"xx:xx:xx.xxx"をミリ秒単位の整数に変換します。&lt;br&gt;関数名がやたら長いのでTS2MS()でも使えるようにしてあります。&lt;br&gt;最初は秒単位の浮動小数点に変換するつもりだったのですが、AviSynthスクリプトはdouble(倍精度浮動小数点)をfloat(単精度浮動小数点)にキャストしてしまうようで、仕方なく整数で返すようにしました(floatの精度では酷い誤差が出てしまう…orz)&lt;br&gt;SSE搭載マシン(PentiumIII)の発売が1999年、AviSynth2.5の開発はavisynth.hによれば2002年ですから、倍精度をサポートしてないのは首をひねってしまうところですが…。&lt;br&gt;&lt;br&gt;GCD(int val1, int val2, ...):&lt;br&gt;最大公約数を返します。&lt;br&gt;&lt;br&gt;LCM(int val1, int val2, ...):&lt;br&gt;最小公倍数を返します。&lt;br&gt;&lt;br&gt;Fibo(int n):&lt;br&gt;フィボナッチ数を返します。&lt;br&gt;AviSynthスクリプトの扱える整数は(今のところ)int32_t(-2147483648から2147483647)なので、フィボナッチ数は46(1836311903)までしか扱えません(47は2971215073でout of range)。&lt;br&gt;0を含めて全部で47しかないなら、わざわざその場で計算させることもなかろうということで、テーブル化してしまいました。&lt;br&gt;はたしてこれに使い途があるのかどうかはさっぱりわかりません。&lt;br&gt;&lt;br&gt;IsEven(int n):&lt;br&gt;nが偶数ならtrue、奇数ならfalseを返します。&lt;br&gt;(n % 2 == 0)と同じですね。&lt;br&gt;&lt;br&gt;Clamp(val, low, high):&lt;br&gt;StickBoy氏のMinMax.dllのやつと全く同じです。&lt;br&gt;valがlowより小さければlowを、highより大きければhighを、lowとhighの間の値だったらvalをそのまま返します。&lt;br&gt;FCollectionsを書くに当たって参考にしたのがまさにMinMax.dllのコードだったわけですが、Min()とMax()はAviSynth2.5.8で本体にも入ったのにClamp()は入ってないのでついでに入れてしまいました。&lt;br&gt;&lt;br&gt;なにか追加してみたい関数が見つかったら、更新するつもりです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-3995912310774895661?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/3995912310774895661/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/06/fcollectionsdll.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/3995912310774895661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/3995912310774895661'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/06/fcollectionsdll.html' title='FCollections.dll'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-8568902396893233050</id><published>2011-05-30T06:17:00.003+09:00</published><updated>2011-06-14T07:21:04.266+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>RawSource.dll その4</title><content type='html'>さて、これまで色々RawSourceのコードをいじって遊んできたわけですが、考えてみれば原著作者であるWarpEnterprises氏の許可は一切取っていませんでした。&lt;br&gt;avs2pipemodの場合はオリジナルがGPLv3だったのでなんの気兼ねもなくいじってよかったわけですが、RawSourceの場合はライセンスに関する記載が全くありません。&lt;br&gt;AviSynth自体はGPLv2ですが、プラグインに関しては過去の経緯から作者がライセンスを自分で決めてよいことになっています。&lt;br&gt;まあ、コードも公開されているわけですから多分問題は起きないとは思うけど、ほおっておくのも気持ち悪い。&lt;br&gt;てなわけで、とりあえずメールで問い合せてみたら、すぐにお返事が来ました。&lt;br&gt;&lt;br&gt;&lt;pre&gt;&lt;br /&gt;Hi!&lt;br /&gt; The code has no explicit license, so I am glad someone uses it or the ideas behind,&lt;br /&gt;as long as it keeps as open as possible (like GPL describes, I think).&lt;br /&gt; There were also some small contributions by others, if I remember correctly (Wilbert, billou2k),&lt;br /&gt;which I integrated but not mentioned them (shame on me, didn't care and know much about licenses back then).&lt;br /&gt;I hope it's ok for you if I put your version on my filter colllection website occasionally.&lt;br /&gt;&lt;br /&gt;Greetings from Austria,&lt;br /&gt;Ernst / WarpEnterprises&lt;/pre&gt;&lt;br&gt;結局ライセンスは決まらずじまいですがとりあえず許可は貰えたので、これからも好きにやってよさそうですね。&lt;br&gt;よかった、よかった。&lt;br&gt;&lt;br&gt;気を良くしたので更新&lt;br&gt;&lt;a href="http://www.mediafire.com/download.php?3bmwyi1lztt4h1j"&gt;RawSource_25_dll_20110529.zip&lt;/a&gt;&lt;br&gt;*widthの最大値を2880から4096に変更&lt;br&gt;*引数にfpsnumとfpsdenを追加(デフォルトはそれぞれ25と1)&lt;br&gt;*エラーチェックを強化&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-8568902396893233050?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/8568902396893233050/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/05/rawsourcedll-4.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8568902396893233050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8568902396893233050'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/05/rawsourcedll-4.html' title='RawSource.dll その4'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-7612880350056208448</id><published>2011-05-23T20:16:00.003+09:00</published><updated>2011-06-14T07:21:37.944+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>RawSource.dll その3</title><content type='html'>更新。&lt;br&gt;ABGRとNV12/NV21をサポートしました。&lt;br&gt;&lt;br&gt;&lt;a href="http://www.mediafire.com/download.php?f15fxwkkuuif9ha"&gt;RawSource_25_dll_20110523.zip&lt;/a&gt;&lt;br&gt;&lt;br&gt;ソースコード&lt;br&gt;&lt;a href="https://github.com/chikuzen/RawSource_2.5x"&gt;https://github.com/chikuzen/RawSource_2.5x&lt;/a&gt;&lt;br&gt;&lt;br&gt;これでAviSynth2.5でサポートできそうな8bitフォーマットはだいたい網羅できたはず。&lt;br&gt;次は2.6用に書き直してみるかな。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-7612880350056208448?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/7612880350056208448/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/05/rawsourcedll_23.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/7612880350056208448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/7612880350056208448'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/05/rawsourcedll_23.html' title='RawSource.dll その3'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-8721625958550204455</id><published>2011-05-21T23:26:00.004+09:00</published><updated>2011-06-14T07:22:24.062+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>RawSource.dll その２</title><content type='html'>ここ最近、avs2pipemodを色々いじったおかげで、C/C++及びYUV4MPEG2/RAWデータ、そしてAviSynthの内部処理への理解が自分としては結構進んだように思います。&lt;br&gt;なんだかようやく初心者といっても良いレベルになれたかも。&lt;br&gt;&lt;br&gt;さて、&lt;a href="http://csbarn.blogspot.com/2011/01/rawsourcedll.html"&gt;今年の1月にやったRawSource.dllの改造&lt;/a&gt;は、実は結構まずいものでした(YUV422なY4Mに対応したようでいて、実はUとVがswapしてしまったりとか)。&lt;br&gt;どーしたもんかとずっと気にはなっていたけど悲しいことに実力不足で手が付けられなかったわけですが…昨日改めてコードを読みなおしてみたらあらびっくり、理解できるようになっていました。&lt;br&gt;てなわけで早速修正版リリース。&lt;br&gt;あとついでに、YV411の対応とか、Y4Mのインタレ周りの処理(これは元々WarpEnterprises氏のころから変だった)の修正とかもやりました。&lt;br&gt;&lt;br&gt;バイナリ&lt;br&gt;&lt;a href="http://csbarn.blogspot.com/2011/05/rawsourcedll_23.html"&gt;更新した&lt;/a&gt;ので削除しました&lt;br&gt;&lt;br&gt;RawSource_25_dll_20060728(WarpEnterprises最終版)からの変更点&lt;br&gt;*64文字以上のYUV4MPEG2ヘッダーに対応(最大128文字)&lt;br&gt;*I422(YUV422planar)に対応&lt;br&gt;*I411(YUV411planar)、YV411(YVU411planar)に対応(出力は色差補間なしのYUY2)&lt;br&gt;*ARGBに対応&lt;br&gt;*pixel_type指定にYUY2とIYUVを追加(これまではYUYV/I420しか指定できなかった)&lt;br&gt;*I420以外の色空間のYUV4MPEG2に対応(ただし、YUV444/YUV444alphaを除く)&lt;br&gt;*YUV4MPEG2ヘッダーのIタグによるフィールドオーダー指定を修正(これまではなぜかItやIbだとフィールドベースになるという謎仕様だった。なお、Imには未対応のまま)&lt;br&gt;*msvcr100.dllが必要(どーやったらstatic linkに出来るんでしょうね？)&lt;br&gt;&lt;br&gt;ソースコードはこちら&lt;br&gt;&lt;a href="https://github.com/chikuzen/RawSource_2.5x"&gt;https://github.com/chikuzen/RawSource_2.5x&lt;/a&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-8721625958550204455?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/8721625958550204455/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/05/rawsourcedll.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8721625958550204455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8721625958550204455'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/05/rawsourcedll.html' title='RawSource.dll その２'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-1519523752226098662</id><published>2011-05-14T03:30:00.001+09:00</published><updated>2011-05-14T03:30:59.916+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>contributor</title><content type='html'>自分が書いたパッチがx264の公式gitレポにコミットされました。&lt;br&gt;&lt;br&gt;まあ、パッチと言ってもわずか一行、lavf入力時のエラーチェックを増やしただけなんですが。&lt;br&gt;&lt;br&gt;2011年4月28日、#x264dev@freenode&lt;br&gt;(Chikuzen) Dark_Shikari: http://pastebin.com/xxxxxxxx&lt;br&gt;(Dark_Shikari) explain?&lt;br&gt;(Chikuzen) e.g x264 - --demuxer lavf --input-csp yuyv420 --input-res ... &lt;- go to fail&lt;br&gt;(Dark_Shikari) what about ffms?&lt;br&gt;(Dark_Shikari) and why&lt;br&gt;(Chikuzen)  I mistook yuyv420 for yuyv422 a minute ago&lt;br&gt;(Chikuzen) but encoding was done, and i wasted my time&lt;br&gt;(saintdev) yuyvvuy444&lt;br&gt;(Chikuzen) this is a case in raw input&lt;br&gt;(Chikuzen) ffms can't accept raw&lt;br&gt;(Dark_Shikari) ok&lt;br&gt;&lt;br&gt;パッチを書いた理由も効果も取るに足らないものですが、これでもx264のrevは一つ上がり、晴れて自分はcontributorとしてChangelogに名前がのることになったわけです。&lt;br&gt;&lt;br&gt;何が言いたいかといえば、&lt;br&gt;・不具合や不満があるなら開発者本人に伝えること。&lt;br&gt;　英語が苦手？　俺だってそうだよ。&lt;br&gt;　"All your base are belong to us"レベルの間違いは山ほどやってらぁ&lt;br&gt;・どんなつまらないパッチでも、そう変更すべき理由があると思うならちゃんと提出すること。&lt;br&gt;ですかね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-1519523752226098662?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/1519523752226098662/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/05/contributor.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1519523752226098662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1519523752226098662'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/05/contributor.html' title='contributor'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-7756557582688251261</id><published>2011-05-11T10:01:00.010+09:00</published><updated>2011-07-19T19:01:31.313+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='身の回り'/><title type='text'>High-bit-depth AVCデコーダ</title><content type='html'>この度、ついに&lt;a href="http://git.libav.org/?p=libav.git;a=commit;h=d545cf804c4a246285d75aae48741da5d2344993"&gt;libavにH.264/AVCのHigh bit depth対応デコーダがコミット&lt;/a&gt;された。&lt;br&gt;&lt;br&gt;思い起こせばx264がhigh-bit-depthをサポートしたのがr1666(2010年7月)だから、かれこれ10ヶ月前。&lt;br&gt;以来、使いたくてもデコーダがないから使う甲斐が無いというなんとももどかしい状態からやっと開放される時がやって来た！(MainConcept? 悪いけど趣味に合わないんで…)&lt;br&gt;&lt;br&gt;というわけで、以下、色々なところで起こったちょっとしたお祭り騒ぎの記録より。&lt;br&gt;&lt;br&gt;#x264dev@freenode&lt;br&gt;(BBB) irock: 10bit pushed&lt;br&gt;&lt;br&gt;#L-SMASH@freenode&lt;br&gt;(Chikuzen) うお、10bitデコーダがlibavにも入った？&lt;br&gt;(JEEB) yes&lt;br&gt;(Chikuzen) ええい、mplayer2の次のリリースはまだか&lt;br&gt;(Chikuzen) JEEB: ちょっとuau氏かlachs0r氏をぶん殴って新しいの出させてきてよ&lt;br&gt;(JEEB) おう&lt;br&gt;&lt;br&gt;#mplayer2@freenode&lt;br&gt;(JEEB) 10bit H.264 decoding got into libav \o/&lt;br&gt;(JEEB) uau, how much work do you think it'd be to add 10bit H.264 support into mplayer2? libswscale seems to handle 10bit 4:2:0 to "your usual" RGB already :3&lt;br&gt;&lt;br&gt;秘密の某所にて&lt;br&gt;(JEEB) 10bit support getting into libav patch-by-patch gentlemen!&lt;br&gt;(JEEB) YEAAAAAAAH&lt;br&gt;(elenril) all hail BBB&lt;br&gt;(JEEB) all hail BBB!&lt;br&gt;(Dark_Shikari) now we need:&lt;br&gt;(Dark_Shikari) 1) dither&lt;br&gt;(Dark_Shikari) 2) support in ffdshow&lt;br&gt;(Dark_Shikari) 3) make sure normal playback does the dither&lt;br&gt;(elenril) send patches =p&lt;br&gt;(Dark_Shikari) 4) cccp release&lt;br&gt;(Dark_Shikari) elenril: dither patches are already sent&lt;br&gt;(JEEB) also, just kicked uau on the issue :3&lt;br&gt;(jfs) ooooh I know, patch vsfilter to render subs on 16 bit/plane surfaces!&lt;br&gt;(jfs) ._.&lt;br&gt;(Dark_Shikari) when we switch to 10 bit&lt;br&gt;(Dark_Shikari) THIS MEANS YOU HAVE TO STOP ENCODING AT 5 BILLION MBPS OK?&lt;br&gt;(Dark_Shikari) crf 22 is now OK.  No crf 14.&lt;br&gt;(Dark_Shikari) Because you can no longer complain about banding.&lt;br&gt;&lt;br&gt;#libav-devel@freenode&lt;br&gt;*Dark_Shikari join #libav-devel&lt;br&gt;*ChanServ mode +o Dark_Shikari&lt;br&gt;(Dark_Shikari) so, explain to me how this 10-bit h264 templating works&lt;br&gt;(Dark_Shikari) and how it'll apply to asm&lt;br&gt;(Dark_Shikari) and I'll submit some asm patches&lt;br&gt;(kshishkov) Dark_Shikari: it's easy - you just initialize pointer to different functions depending on bits provided&lt;br&gt;(Dark_Shikari) kshishkov: I meant how do I make it compile a file twice?&lt;br&gt;(Dark_Shikari) once with 10-bit, once with 8-bit&lt;br&gt;(Dark_Shikari) also where the fuck did my fate samples folder go&lt;br&gt;(kshishkov) Dark_Shikari: templating - define things, include file, redefint things, include file again&lt;br&gt;(Dark_Shikari) in asm?&lt;br&gt;(kshishkov) why not?&lt;br&gt;(kshishkov) even Nasm has %include&lt;br&gt;(Dark_Shikari) where's the rsync command to download fate samples?&lt;br&gt;(Dark_Shikari) I lost mine&lt;br&gt;(lu_zero) Dark_Shikari: there is a make target that should work&lt;br&gt;(lu_zero) make fate-rsync&lt;br&gt;(lu_zero) rsync -vaLW rsync://fate-suite.libav.org/fate-suite/ $place&lt;br&gt;(Dark_Shikari) lu_zero: thx, running&lt;br&gt;(BBB) Dark_Shikari you're awesome if you do the asm&lt;br&gt;(Jumpyshoes) has 10-bit been pushed?&lt;br&gt;(Dark_Shikari) yes&lt;br&gt;(Jumpyshoes) oh&lt;br&gt;(Jumpyshoes) well there goes my excuse&lt;br&gt;(Dark_Shikari) ｗｗｗｗ&lt;br&gt;(Dark_Shikari) so yeah, time to asm&lt;br&gt;&lt;br&gt;#L-SMASH&lt;br&gt;(Chikuzen) 10bitがコミットされるやいなや#libav-develにjoinするD_S&lt;br&gt;(Chikuzen) ホント、現金なアンチャンだこと&lt;br&gt;(JEEB) ですな&lt;br&gt;(silverfilain) その貪欲さが彼をあそこまでにしてるんだろうなぁ&lt;br&gt;(Chikuzen) この前#libav-develでわめき散らしたのはなんだったのかと&lt;br&gt;(Chikuzen) まあ、君子豹変と言えなくもないが…&lt;br&gt;&lt;br&gt;#mplayer2&lt;br&gt;(lachs0r) http://**********/mplayer2-high-bit-depth-20110510.7z&lt;br&gt;&lt;br&gt;#L-SMASH&lt;br&gt;(Chikuzen) もう来たのか&lt;br&gt;(JEEB) いぇす&lt;br&gt;(Chikuzen) やっぱ、みんな待ち焦がれてたのね&lt;br&gt;&lt;br&gt;&lt;br&gt;なんで騒いでるのかわからない？&lt;br&gt;ならばあなたはまだ動画エンコードの泥沼に浸かってない(もしくは足を洗った)一般人ってことですね。&lt;br&gt;それはとても良いことですから、気にしなくてもいいですよ、いやほんとに。&lt;br&gt;&lt;br&gt;追記、というか登場人物紹介&lt;br&gt;BBB　　Ronald S. Bultje、Libav developerのリーダー格、ffmpeg-mtや今回のデコーダの不具合解消に大活躍中の人&lt;br&gt;Chikuzen　　筆者&lt;br&gt;Dark_Shikari　　Jason Garrett-Glaser、x264 lead developer&lt;br&gt;elenril　　Anton Khirnov、Libav developer/committer&lt;br&gt;irock　　Oskar Arvidsson、x264のhigh-bit-depthエンコーダ、そして今回のデコーダを書いた人&lt;br&gt;Jumpyshoes　　Daniel Kang、x264 / Libav developer&lt;br&gt;JEEB　　アニオタフィンランド人 兼 二代目CCCP maintainer?&lt;br&gt;jfs　　Niels Martin Hansen、Aegisub main developer&lt;br&gt;kshishkov　　Kostya Shishkov、Libav developer/committer&lt;br&gt;lachs0r　　mplayer2 project member、Windows用ビルド担当&lt;br&gt;lu_zero　　Luca Barbato、Gentoo developer、Libav developer/committer&lt;br&gt;silverfilain　　L-SMASH developer、猫科研究所の中の人&lt;br&gt;uau　　Uoti Urpala、mplayer2 project leader&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-7756557582688251261?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/7756557582688251261/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/05/high-bit-depth-avc.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/7756557582688251261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/7756557582688251261'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/05/high-bit-depth-avc.html' title='High-bit-depth AVCデコーダ'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-4351644957301390297</id><published>2011-05-10T13:08:00.005+09:00</published><updated>2011-06-14T07:18:58.591+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>avs2pipemod その6</title><content type='html'>…更新。&lt;br&gt;&lt;br&gt;x264のchangelogを眺めていたらr1939でbluray-compat+fake-interlacedのときはpic-structが要らなくなったと書いてあったので、こっちも削っておくかとコードを見直してみたら…なんか色々、avs2pipe0.0.3の時点で間違ってるようです。&lt;br&gt;&lt;br&gt;とりあえずNTSC/PALのSDでDARが4：3なソースの場合の対応のために、オプションをまた変更。&lt;br&gt;これまでのx264bd=tffをx264bdtにしてしまい、=4:3を付けた場合はDAR4:3のソースとみなすことにしました。&lt;br&gt;具体的には`avs2pipemod.exe -x264bdt=4:3 720x480x60i.avs`といった感じです。&lt;br&gt;それとBD規格ではやはりBFFはないようなので、x264bdbは作りませんでした。&lt;br&gt;BFFなソースは事前にDoubleWeave().SelectOdd()でもして、フィールドオーダーをTFFにしてください。&lt;br&gt;&lt;br&gt;バイナリ&lt;br&gt;追記：バグあったわ…自分の書いたところでorz&lt;br&gt;最新は20110510.zipです。&lt;br&gt;&lt;a href="http://www.mediafire.com/download.php?pl0lx57i7dqsin7"&gt;avs2pipemod-20110510.zip&lt;/a&gt;&lt;br&gt;&lt;br&gt;ソース&lt;br&gt;&lt;a href="http://github.com/chikuzen/avs2pipemod"&gt;http://github.com/chikuzen/avs2pipemod&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-4351644957301390297?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/4351644957301390297/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/05/avs2pipemod-6.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4351644957301390297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4351644957301390297'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/05/avs2pipemod-6.html' title='avs2pipemod その6'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-7036431227749066312</id><published>2011-05-07T20:47:00.002+09:00</published><updated>2011-06-14T07:18:58.591+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>avs2pipemod その5</title><content type='html'>しつこく更新。&lt;br&gt;一つ一つの関数が長すぎるのをなんとかしようと、分割したり色々していたら、いつの間にか一部の機能が変わってしまった。&lt;br&gt;&lt;br&gt;　*'packedraw'を廃止して'rawvideo'に変更&lt;br&gt;　これまでは映像のraw出力はpacked formatのみでしたが、planar formatでも出来るようにしました。&lt;br&gt;　planar YUVの出力部はYUV4MPEG2と共通なので、planeの並び方はY-&gt;U-&gt;Vに限定されています。&lt;br&gt;　この並び方はffmpeg/libavのpix_fmt(YUV444pとかYUV422pとか)と同じなので、使用上の都合はYV16やYV24(並び方がY-&gt;V-&gt;U)より良いのですが、いくら探してもFourCCみたいなものが見つかりません。&lt;br&gt;　x264のfullhelpでは、これをi422とかi444と書いていますが…そんな呼び方、他所では聞いたことがない。&lt;br&gt;　どうもkemuri_-9氏が、i420を真似て自分で作ってしまったのではないだろうか…。&lt;br&gt;&lt;br&gt;追記：Y8の処理でバグがあったので修正、バイナリを更新しました。&lt;br&gt;&lt;br&gt;バイナリ&lt;br&gt;更新しました&lt;br&gt;&lt;br&gt;ソース&lt;br&gt;&lt;a href="http://github.com/chikuzen/avs2pipemod"&gt;http://github.com/chikuzen/avs2pipemod&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-7036431227749066312?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/7036431227749066312/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/05/avs2pipemod-5.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/7036431227749066312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/7036431227749066312'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/05/avs2pipemod-5.html' title='avs2pipemod その5'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-8783988029842553751</id><published>2011-05-04T23:41:00.007+09:00</published><updated>2011-06-14T07:18:58.592+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>avs2pipemod その４</title><content type='html'>更新。いろいろオプションを増やしすぎた感じがしたのでgetoptを使うことにしました。&lt;br&gt;その他、いろいろ書きなおしたりヘッダーファイルを追加したりあれこれ…かえってカオスな感じになったような…&lt;br&gt;&lt;br&gt;使い方は以下のようになります。&lt;pre name=code class=python&gt;&lt;br /&gt;avs2pipemod -audio=24bit input.avs | neroAacEnc -q 0.3 -if - -of output.mp4&lt;br /&gt;avs2pipemod -y4mt=40:33 input.avs | x264 - --demuxer y4m -o output.mkv&lt;br /&gt;&lt;/pre&gt;aud16やrawaud24とかはなくなり、かわりにオプションの後ろに'=16bit'とかを付けるようにしました。&lt;br&gt;付けない場合は、音声出力なら変更なし、y4m出力ならアスペクト比の指定なし(0:0)として扱われます。&lt;br&gt;&lt;br&gt;あと、x264bdの出力をx264のr1936以降(--bluray-compatあり)用に変更（正直、自分にはほとんど興味のない分野だけど…この機能、使ってる人いるのかな？）。&lt;br&gt;こちらもこれまでのように、avsのフィールドベース/フレームベースによる判定ではなく、'=tff(bff)'で、インタレの判定を行います（ところでBDでbottom firstってありえるのかいな？）。&lt;br&gt;&lt;br&gt;バイナリはこちら&lt;br&gt;更新したので削除&lt;br&gt;&lt;br&gt;ソースはこちら&lt;br&gt;&lt;a href="https://github.com/chikuzen/avs2pipemod"&gt;https://github.com/chikuzen/avs2pipemod&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-8783988029842553751?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/8783988029842553751/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/05/avs2pipemod_04.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8783988029842553751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8783988029842553751'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/05/avs2pipemod_04.html' title='avs2pipemod その４'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-1785622369449504075</id><published>2011-05-01T15:39:00.005+09:00</published><updated>2011-06-14T07:18:58.592+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>avs2pipemod その３</title><content type='html'>更新しました。&lt;br&gt;&lt;br&gt;　*YUV4MPEG2出力時の色空間変換を改良&lt;br&gt;　これまでの色空間変換はインタレやBT.709は特に考慮されていませんでしたが、今回の更新で対応しました。&lt;br&gt;　高さが720以上のRGBはRec.709でYUVに、またy4mt/y4mbの際に他の色空間からYUV420で出力する場合はConvertToYV12(interlaced=True)の処理が入ります(これまではすべてinterlaced=falseで処理されています)。&lt;br&gt;&lt;br&gt;追記：&lt;br&gt;さらに更新。&lt;br&gt;&lt;br&gt;　*新オプション'rawaudio''rawaud16''rawaud24'を追加&lt;br&gt;　このツールの音声出力はwav extensible formatという、RIFF-WAVE(いわゆる.wav)の拡張形式を使います。&lt;br&gt;　ただのwavよりもいいところも色々あるのですが、あまり一般的ではないため、いくつかのオーディオエンコーダー(例：LAME、oggenc2等)はこれを入力として受け取ることが出来ません。&lt;br&gt;　今回の新規オプションはこの対策のため、ヘッダーの全くない生のPCMとして出力します。&lt;br&gt;&lt;br&gt;バイナリ&lt;br&gt;更新したので削除&lt;br&gt;&lt;br&gt;ソース&lt;br&gt;&lt;a href="https://github.com/chikuzen/avs2pipemod"&gt;https://github.com/chikuzen/avs2pipemod&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-1785622369449504075?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/1785622369449504075/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/05/avs2pipemod.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1785622369449504075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1785622369449504075'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/05/avs2pipemod.html' title='avs2pipemod その３'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-7265778784027354040</id><published>2011-04-28T11:44:00.003+09:00</published><updated>2011-06-14T07:18:58.593+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>avs2pipemod その２</title><content type='html'>バグ修正、および新機能の追加等を行いました。&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;*'packedraw'オプションを追加&lt;/div&gt;入力がpacked format(RGB32/24、YUY2、Y8)のときのみ使える限定機能。&lt;br /&gt;RAW(非圧縮)データをそのままなんのヘッダーも付けずに標準出力します。&lt;br /&gt;RGBをYUVに変換せずに出力したい、及びavisynth2.5でYUY2をYV12に変換せずに出力したい場合に使います。&lt;br /&gt;YV24/YV16/YV411/YV12はY4Mで出力できるので、あえてRAWで出力する必要はないかと思い対象から除外。&lt;br /&gt;実際にこれを使うとすれば、*nix+wineでavisynthを使っていて、これらのデータをネイティブなFFmpeg/MEncoderに入力したい場合くらいでしょうかね。&lt;br /&gt;&lt;br /&gt;しかし我ながら、なんとも間の抜けた響きのオプション名ですな…orz&lt;br /&gt;&lt;br /&gt;バイナリはこちら&lt;br /&gt;&lt;a href="http://csbarn.blogspot.com/2011/05/avs2pipemod.html"&gt;更新した&lt;/a&gt;ので削除&lt;br&gt;&lt;br /&gt;ソースはこちらへ&lt;br /&gt;&lt;a href="https://github.com/chikuzen/avs2pipemod"&gt;https://github.com/chikuzen/avs2pipemod&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-7265778784027354040?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/7265778784027354040/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/04/avs2pipemod_28.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/7265778784027354040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/7265778784027354040'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/04/avs2pipemod_28.html' title='avs2pipemod その２'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-1574932379986540152</id><published>2011-04-26T00:33:00.013+09:00</published><updated>2011-06-14T07:18:58.594+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>avs2pipemod</title><content type='html'>ここ最近、&lt;a href="http://forum.doom9.org/showthread.php?t=160383"&gt;avs2pipe&lt;/a&gt;のコードをずっといじっておりました。&lt;br /&gt;&lt;br /&gt;最初はavisynth2.6用にYUV444やYUV422でYUV4MPEG2出力出来る機能を追加するだけのつもりだったのが、ついでに自分のほしい機能を幾つか追加したり既存の機能を自分向けに改造したり色々試していたらこうなった。&lt;br /&gt;&lt;br /&gt;オリジナルとの違い&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #38761d;"&gt;*'audio'オプションの他に'aud16''aud24'というオプションを作った&lt;/div&gt;aud16はConvertAudioTo16bit、aud24はConvertAudioTo24bitを入力音声に追加して出力を行う機能。&lt;br /&gt;avs2pipeの売りの一つはvfwインターフェイスを通さないから音声の16bit整数自動変換を避けられることなんだけど、世の中にはあえて32bit浮動小数点を16bit/24bit整数で出力したいということもあるだろうと思い追加した。&lt;br /&gt;スクリプトにConvertAudioTo16bit/24bitを書けばいいだけなのだが、こっちのほうが多分楽である。&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;*'video'オプションを'y4mp''y4mt''y4mb'の3種類に変更&lt;/div&gt;avs2pipeの'video'オプションは、avsがフィールドベースだったらインタレと判定し、さらにAssumeBFFしていればBFF、それ以外はTFFとして扱うようになっている。&lt;br /&gt;しかし、この判定を利用するためにわざわざスクリプトにAssumeFieldBased().AssumeBFF()とか書くのはどうも煩雑に感じる。&lt;br /&gt;ということで、あえてオプションでフィールドオーダーを指定することにした。&lt;br /&gt;y4mpを指定すれば問答無用でプログレ、y4mtならTFFなインタレ、y4mbならBFFなインタレとしてY4M出力を行う。&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;*入力がフィールドベースだったときのフレームベースへの変換&lt;/div&gt;上記のvideoオプションの変更を行ったことで、あえてフィールドベースでの入力を許容する意味が無くなってしまったので、強制的にフレームベースにしてしまうことにした。&lt;br /&gt;もしY4M出力時に入力がフィールドベースだったら、AssumeFrameBased()かWeave()を行う（手動選択）。&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;*'info'の出力情報を変更&lt;/div&gt;pixel_type(色空間)を16進数表示って手抜きすぎるだろってことで、ちゃんとRGB32とかYUY2とか表示するようにした。&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;*経過時間の表示&lt;/div&gt;音声/Y4M出力終了時に総経過時間を表示するようにした（途中経過はなし)。&lt;br /&gt;bashなりを使っていればtimeコマンドがあるので本当は不要だが、まあ、'time　'と5文字打つ手間が省けるということで。&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;*'benchmark'オプションを追加&lt;/div&gt;いままで筆者はフィルタのスピードを計測するのにavs2aviかx264cliをNULL出力で使っていたが不満な点があった。&lt;br /&gt;avs2aviはvfwインターフェースを通してavsを読むため、読み込み時に余分な処理が入る。&lt;br /&gt;x264はCインターフェースを使うからavs2aviよりも速いが、たとえpreset ultrafastでも必ずエンコード処理が入る。&lt;br /&gt;そしてどちらもNULL出力とはいえ、書き込み処理も一応入る。&lt;br /&gt;そういう不満を解消すべく作ったのがこのbenchmarkモードである。&lt;br /&gt;処理内容はひたすらavs_get_frame()とavs_release_frame()だけを繰り返し、50フレームごとに途中経過を報告する。&lt;br /&gt;時間計算/表示以外の余分な処理は一切入らないから、理論上はこれが最速だろうし、実際x264よりもわずかながら速い(環境によっては遅いかも知れないけど)。&lt;br /&gt;つーかx264速すぎだろ…こっちも時間計算はdoubleではなくint64で行うべきなのかなぁ…&lt;br /&gt;ちなみにCインターフェースなので、SetMTModeとか使ってる人はDistributor()が当然要ります。&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;*Y4M出力時のstdoutのバッファを拡張&lt;/div&gt;これはもともとオリジナルの作者のdoobry氏がすでに実装しているようなのだが、現時点ではそれをリリースしていない。&lt;br /&gt;参考：&lt;a href="http://forum.doom9.org/showpost.php?p=1490576&amp;amp;postcount=59"&gt;http://forum.doom9.org/showpost.php?p=1490576&amp;amp;postcount=59&lt;/a&gt;&lt;br /&gt;つーか、何をもったいつけてるのか知らんが一向にリリースしないので、待ちきれずに自分で実装してしまった。&lt;br /&gt;なるほど、彼の言うとおり随分速くなりますね。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ここまでやったところで、一旦公開してみることにします。&lt;br /&gt;&lt;br /&gt;追記:試しに時間計算でx264を真似てみたら、本当にわずかながら速くなりました。&lt;br /&gt;追記:ひどいバグを見つけたので公開停止。&lt;br /&gt;追記:&lt;a href="http://csbarn.blogspot.com/2011/04/avs2pipemod_28.html"&gt;更新しました&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;ソースコードが欲しい人はこちらへ。&lt;br /&gt;&lt;a href="https://github.com/chikuzen/avs2pipemod"&gt;https://github.com/chikuzen/avs2pipemod&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;とりあえずひと月ほど待っても彼が新バージョンをリリースしないようなら、Doom9でも発表してしまおうかな。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-1574932379986540152?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/1574932379986540152/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/04/avs2pipemod.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1574932379986540152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1574932379986540152'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/04/avs2pipemod.html' title='avs2pipemod'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-4592164922903741194</id><published>2011-03-05T04:23:00.001+09:00</published><updated>2011-06-14T07:18:58.594+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><title type='text'>AviSynth2.6.0α on *nix</title><content type='html'>&lt;a href="http://csbarn.blogspot.com/2011/01/avisynth260.html"&gt;以前やったベンチマーク&lt;/a&gt;がWindowsだけであることに、某フランス人が不満そうだったので。&lt;pre name=code class=python&gt;&lt;br /&gt;#benchmark.avs&lt;br /&gt;ImageSource("Z:\home\chikuzen\Pictures\1920x1080.bmp", 0, 999)&lt;br /&gt;BlackmanResize(720, 480)  &lt;br /&gt;Spline64Resize(1920, 1080)  &lt;br /&gt;GaussResize(512, 384)  &lt;br /&gt; &lt;br /&gt;$ for i in {1..3}; do wine avs2avi benchmark.avs -c null -o n; done&lt;br /&gt; &lt;br /&gt;            2.5.8                 2.6.0α(JEEB's)&lt;br /&gt;1st   00:03:40.414 (4.54fps)   00:01:56.483 (8.58fps)&lt;br /&gt;2nd   00:03:32.149 (4.71fps)   00:01:56.722 (8.57fps)&lt;br /&gt;3rd   00:03:31.894 (4.72fps)   00:01:56.471 (8.59fps)&lt;br /&gt; &lt;br /&gt;Ubuntu 10.10 / wine 1.3.14&lt;br /&gt;Core2Duo T7300@2GHz / 2GB RAM&lt;br /&gt;&lt;/pre&gt;やっぱり速いよ、2.6.0。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-4592164922903741194?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/4592164922903741194/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/03/avisynth260-on-nix.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4592164922903741194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4592164922903741194'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/03/avisynth260-on-nix.html' title='AviSynth2.6.0α on *nix'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-4166235830997397601</id><published>2011-02-22T12:41:00.040+09:00</published><updated>2011-09-02T23:08:30.950+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ビルド'/><title type='text'>How to compile ffmpeg/x264 for Windows --English(or Engrish) version--</title><content type='html'>&lt;a href="https://gist.github.com/gists/1188560/download"&gt;Download this script&lt;/a&gt;&lt;script src="https://gist.github.com/1188560.js?file=my_build.sh"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-4166235830997397601?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/4166235830997397601/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/02/how-to-compile-ffmpegx264-for-windows.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4166235830997397601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4166235830997397601'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/02/how-to-compile-ffmpegx264-for-windows.html' title='How to compile ffmpeg/x264 for Windows --English(or Engrish) version--'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-1804965593580345589</id><published>2011-02-01T21:39:00.001+09:00</published><updated>2011-02-01T21:53:18.598+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='身の回り'/><title type='text'>ふわふわさん part2</title><content type='html'>(Chikuzen) TheFluff氏が叫んでますな&lt;br&gt;(Chikuzen) 「空の境界」ってもともとSD制作だったの？&lt;br&gt;(JEEB) いや&lt;br&gt;(JEEB) ハイビジョン制作っす&lt;br&gt;(JEEB) 画像を見れば一部だけがなぜかワープシャープかかってる&lt;br&gt;(Chikuzen) なぜにwarpsharp...&lt;br&gt;(JEEB) その答えを見つけるためとりあえずマスタリングした会社の連絡先を見つけないとなぁ・・・&lt;br&gt;(Chikuzen) そこだけmasterなくしちゃったから、DVDソース使ったとか&lt;br&gt;&lt;br&gt;カワイソス&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-1804965593580345589?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/1804965593580345589/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/02/part2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1804965593580345589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1804965593580345589'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/02/part2.html' title='ふわふわさん part2'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-3069476465495457137</id><published>2011-01-31T00:08:00.001+09:00</published><updated>2011-06-14T07:18:58.595+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='AvsP'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>中間出力のマルチプロセス化</title><content type='html'>先日、JEEB氏がAviSynth2.6.0αの非公式ビルドを始めた。&lt;br /&gt;&lt;br&gt;(JEEB) そういや、うちのAvs2.6ビルドってChikuzen氏がテストした奴と性能がどんな感じ？&lt;br&gt;(Chikuzen) 若干スピードが上がってるみたいよ&lt;br&gt;(Chikuzen) ちょっとベンチマーク回してみるか&lt;br&gt;&lt;pre class="python" name="code"&gt;　　　   official 2.6.0α2       JEEB's 2.6.0(20110125)&lt;br /&gt;1st   00:01:11.003(14.08fps)   00:01:07.254(14.87fps)&lt;br /&gt;2nd   00:01:11.010(14.08fps)   00:01:07.003(14.92fps)&lt;br /&gt;3rd   00:01:10.753(14.13fps)   00:01:07.003(14.92fps)　（スクリプト等は前回と同じ)&lt;/pre&gt;(JEEB) interesting&lt;br /&gt;&lt;br&gt;たしかに興味深い。&lt;br /&gt;どうやら最適化はα2配布後にさらに進んでいたようである。&lt;br /&gt;&lt;br /&gt;さて、前回、自分はマルチスレッドによる高速化ではなく、マルチプロセスによる高速化を選んだことを書いた。&lt;br /&gt;ここで問題となるのが、同時にエンコードするための複数のソースがない場合である。&lt;br /&gt;そもそも自分は放送ソースの保存用エンコなんてまったくしない。そんなことには興味がない。&lt;br /&gt;いろいろなフィルタやエンコーダーを試して遊ぶのが好きなのである。&lt;br /&gt;当然、エンコードするべきソースは大抵1本しかなく、3本同時にエンコードなんていままでに数えるほどしかやったことがない。&lt;br /&gt;&lt;br /&gt;では、どうすればいいのか？&lt;br /&gt;エンコード対象がひとつしかないのであれば、ひとつを複数に分割してやればいいだけだ。&lt;br /&gt;3本同時にエンコードできる余裕があるなら、1本を3分割してそれぞれ中間出力し、ふたたびくっつけてやればよい。&lt;br /&gt;それが簡単にできるのがAviSynthである。&lt;br /&gt;中間出力用のファイルサイズを気にするような時代でもないしね。&lt;br /&gt;&lt;br /&gt;てことで、自動で分割-&amp;gt;中間出力-&amp;gt;結合-&amp;gt;エンコードを行うAvsPマクロを書いた。&lt;br /&gt;&lt;pre class="python" name="code"&gt;#multiprocess intermediate file generator.py&lt;br /&gt;#dividing source script into X -&amp;gt; generate intermediate files at same time -&amp;gt; final encode&lt;br /&gt;#requiaments : VirtualDub.exe, vcf file, ffmpeg or x264 (optional)&lt;br /&gt;import sys&lt;br /&gt;import os.path&lt;br /&gt;import subprocess&lt;br /&gt;&lt;br /&gt;vdub = r'C:\VirtualDub-1.9.11\VirtualDub.exe'&lt;br /&gt;vcf  = r'C:\VirtualDub-1.9.11\fastrecomp_uly0_noaudio.vcf'&lt;br /&gt;&lt;br /&gt;entries = avsp.GetTextEntry(['Number of dividing', 'SetMemoryMax(?)'], ['3', '1024'])&lt;br /&gt;dnum, mmax = [int(i) for i in entries]&lt;br /&gt;&lt;br /&gt;imf_outdir = avsp.GetDirectory('Select a directory to output intermediate files.')&lt;br /&gt;&lt;br /&gt;encbin  = avsp.GetFilename('Set Path to Encoder(ffmpeg or x264)')&lt;br /&gt;#encbin = r'G:\Enctools\ffmpeg.exe'&lt;br /&gt;#encbin = r'G:\Enctools\x264_x64.exe'&lt;br /&gt;encout  = avsp.GetSaveFilename('Set final output file name')&lt;br /&gt;encopts = avsp.GetTextEntry('Input commandline options').split(' ')&lt;br /&gt;&lt;br /&gt;source = avsp.SaveScript()&lt;br /&gt;frames = avsp.GetVideoFramecount()&lt;br /&gt;&lt;br /&gt;if dnum &amp;gt; 1 and mmax &amp;gt; 0 and imf_outdir and frames and os.path.isfile(vdub) and os.path.isfile(vcf):&lt;br /&gt;    start = 0&lt;br /&gt;    vdubprocess = []&lt;br /&gt;    catfilename = os.path.splitext(source)[0] + '_imf.avs'&lt;br /&gt;    catfile = open(catfilename, 'w')&lt;br /&gt;&lt;br /&gt;    for i in range(dnum):&lt;br /&gt;        end = frames / dnum * (i + 1)&lt;br /&gt;        if i &amp;lt; dnum - 1:&lt;br /&gt;            trimline = 'trim(%i, %i)' % (start, end)&lt;br /&gt;        else:&lt;br /&gt;            trimline = 'trim(%i, 0)' % start&lt;br /&gt;        lines = 'SetMemoryMax(%i)\nImport("%s")\n%s\n' % (mmax, source, trimline)&lt;br /&gt;        start = end + 1&lt;br /&gt;&lt;br /&gt;        imf_avsname = os.path.join(imf_outdir, os.path.basename(source)).rstrip('avs') + 'imf_%02i.avs' % i&lt;br /&gt;        file = open(imf_avsname, 'w')&lt;br /&gt;        file.write(lines)&lt;br /&gt;        file.close()&lt;br /&gt;&lt;br /&gt;        imf_aviname = os.path.splitext(imf_avsname)[0] + '.avi'&lt;br /&gt;        vdubargs = [vdub, '/s', vcf, '/p', imf_avsname, imf_aviname, '/r', '/c', '/x']&lt;br /&gt;        p = subprocess.Popen(vdubargs)&lt;br /&gt;        vdubprocess.append(p)&lt;br /&gt;&lt;br /&gt;        if i &amp;lt; dnum - 1:&lt;br /&gt;            catfile.write('AVISource("%s") + \\\n' % imf_aviname)&lt;br /&gt;        else:&lt;br /&gt;            catfile.write('AVISource("%s")\n' % imf_aviname)&lt;br /&gt;&lt;br /&gt;    catfile.close()&lt;br /&gt;&lt;br /&gt;    if encbin and encout:&lt;br /&gt;        for p in vdubprocess:&lt;br /&gt;            p.wait()&lt;br /&gt;&lt;br /&gt;        if os.path.basename(encbin).count('ffmpeg'):&lt;br /&gt;            encargs = [encbin, '-i', catfilename] + encopts + ['-y', encout]&lt;br /&gt;        elif os.path.basename(encbin).count('x264'):&lt;br /&gt;            encargs = [encbin, catfilename, '-o', encout] + encopts&lt;br /&gt;        else:&lt;br /&gt;            sys.exit()&lt;br /&gt;&lt;br /&gt;        subprocess.Popen(encargs)&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-3069476465495457137?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/3069476465495457137/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/01/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/3069476465495457137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/3069476465495457137'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/01/blog-post.html' title='中間出力のマルチプロセス化'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-6344907334309461549</id><published>2011-01-18T21:43:00.004+09:00</published><updated>2011-06-14T07:18:58.595+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><title type='text'>AviSynth2.6.0α</title><content type='html'>さまざまな試行と思索（ってほどのものでもないが）の結果、現在の自分は&lt;a href="http://forum.doom9.org/showthread.php?t=149113"&gt;AviSynth2.6.0α(32bit)&lt;/a&gt;を使っている。&lt;br&gt;&lt;br&gt;Q.なぜ64bitAviSynthじゃないの？&lt;br&gt;A.いろいろ不具合が多い上に開発が止まっているから。&lt;br&gt;　開発が順調なら人柱覚悟で使ってバグレポートもするが、現状停止中でforkする人もいないでは使う甲斐がない。&lt;br&gt;　まあ、気長に待つしかないかなぁ。&lt;br&gt;&lt;br&gt;Q.なんでMT使わないの？&lt;br&gt;A.SetMTMode()はとにかく不安定すぎる。&lt;br&gt;　しかも同じスクリプトでもクラッシュしたりしなかったりと運用で回避を図ろうにも傾向がつかめない。&lt;br&gt;　たとえ速くても、完走出来ないマラソンランナーは正選手にはなれないのである。&lt;br&gt;　MT()のほうはSetMTMode()ほどひどくはないが…。&lt;br&gt;&lt;br&gt;Q.なんでstableな2.5.8ではなく、2.6.0αなの？&lt;br&gt;A.安定していて速いから。&lt;br&gt;&lt;br&gt;そう、2.6.0αはまだアルファなのに安定している。&lt;br&gt;どれくらい安定しているかといえば、既知の問題がα2公開後1年以上経つのに&lt;a href="http://avisynth.org/mediawiki/Known_Issues"&gt;この程度しかない&lt;/a&gt;くらい堅い。&lt;br&gt;しかも2.5.8に存在するバグもいくつか取れている。(これではどちらがstableなのかと小一時間…)&lt;br&gt;&lt;br&gt;そして速い。2.5.8-&gt;2.6.0の最適化の進み具合はすさまじい。例えば次のようなベンチマークをしてみるとよくわかる。&lt;pre name="code" class="python"&gt;&lt;br /&gt;#benchmark.avs&lt;br /&gt;ImageReader("test_1280x720.bmp", 0, 999)&lt;br /&gt;BlackmanResize(720, 480)&lt;br /&gt;Spline64Resize(1920, 1080)&lt;br /&gt;GaussResize(512, 384)&lt;br /&gt;&lt;br /&gt;$ for i in {1..3}; do avs2avi benchmark.avs -c null -o n; done&lt;/pre&gt;これを2.5.8と2.6.0αでやってみると結果は&lt;pre name="code" class="python"&gt;&lt;br /&gt;              2.5.8                   2.6.0α&lt;br /&gt;1st   00:02:26.256(6.84fps)    00:01:10.753(14.13fps)&lt;br /&gt;2nd   00:02:26.256(6.84fps)    00:01:10.764(14.13fps)&lt;br /&gt;3rd   00:02:26.257(6.84fps)    00:01:10.753(14.13fps)　　(CPU使用率はすべて30%弱）&lt;/pre&gt;特に重めなresizerをRGB32でかけた結果がこれである。&lt;br&gt;たまに高速化のためと称してMT()使って縦横別々にリサイズとかしてる人を見かけるけど、そんなもの手間をかけて無駄にCPU使用率を上げているだけですな。&lt;br&gt;&lt;br&gt;2.6.0αはMT対応はしていないが、それ自体は高速である。&lt;br&gt;問題はプラグインのほうで、これがボトルネックになるわけだが…でもその場合はCPU自体はそれほど使ってないよね？&lt;br&gt;CPUに余裕があるなら同時に複数本走らせればいいだけだ。&lt;br&gt;この場合、1本あたりのスピードは低下してしまうが、3本同時にやれば終了するまでにかかる時間は1本ずつ3本エンコするのと比べてだいたい半分程度にはなるだろう。&lt;br&gt;1本あたり最大2GBのメモリを使うことになるが（pipeを使えばもう少し増える）、自分の環境は64bitOSで8GBつんでいるので、まだ余裕はある。&lt;br&gt;・スピードが結果的に倍程度まであがり&lt;br&gt;・CPUを無駄なく使い&lt;br&gt;・安定した出力を得られ&lt;br&gt;・互換性も特に気にする必要がない&lt;br&gt;&lt;br&gt;現状ではやはりこれが一番いいんじゃないかなぁ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-6344907334309461549?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/6344907334309461549/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/01/avisynth260.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6344907334309461549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6344907334309461549'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/01/avisynth260.html' title='AviSynth2.6.0α'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-8914367171970992745</id><published>2011-01-11T19:40:00.007+09:00</published><updated>2011-06-14T07:18:58.596+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>RawSource.dll</title><content type='html'>AviSynthのRawSourceがffmpegやy4m.auoで出力したY4Mファイルを読めないので何とかしたいというお話。&lt;br&gt;&lt;br&gt;&lt;a href="http://linux.die.net/man/5/yuv4mpeg"&gt;YUV4MPEG2&lt;/a&gt;(Y4M)は非圧縮なYUVデータに動画の解像度やフレームレートといったものをヘッダーとして追加したシンプルなファイル形式である。&lt;br&gt;もともとは&lt;a href="http://mjpeg.sourceforge.net/"&gt;MJPEGTools&lt;/a&gt;なるもので使われていたものらしいが、なかなか取り扱いが便利なので、今日ではffmpeg,MEncoder,x264といろいろなエンコーダーがY4M入力に対応している。&lt;br&gt;たとえばx264はただのYUVもY4Mも入力に使用出来るが、ただのYUVだと&lt;pre name="code" class="python"&gt;&lt;br /&gt;$ x264 input.yuv --input-csp i420 --input-res 720x480 --fps 24000/1001 --sar 40:33 \&lt;br /&gt;[other options] -o output.h264&lt;/pre&gt;てな具合にオプションを指定しなければならない。&lt;br&gt;一方、Y4Mファイルであれば、解像度等はヘッダーに書かれているので&lt;pre name="code" class="python"&gt;$ x264 input.y4m [other options] -o output.h264&lt;/pre&gt;と、手間が省ける。&lt;br&gt;うん、便利だね。&lt;br&gt;&lt;br&gt;さて、&lt;a href="http://avisynth.org/warpenterprises/files/rawsource_25_dll_20060728.zip"&gt;RawSource.dll&lt;/a&gt;は非圧縮ファイルを扱うためのAviSynthプラグインである。&lt;br&gt;このRawSource、Y4Mも読めることになってはいるのだが、いかんせん書かれたのが2006年と古いせいか、想定されているヘッダーが旧式である。ffmpegやAviUtlの&lt;a href="http://www.marumo.ne.jp/auf/"&gt;YUV4MPEG2出力プラグイン&lt;/a&gt;で出力される新しい形式（Cタグで色空間指定付）のものだと"YUV4MPEG2 header error"となって手が出ない。&lt;br&gt;「だれか何とかしてくれないかなー」と最初にこのことに気づいてから、かれこれ一年半ほど待ってみたが、そのような奇特な人はついに現れなかった（まあ黙って待っててもそうそう都合のいいことが起こるわけもないわな）。&lt;br&gt;そこで一念発起して自分でやってみることにしたのである。&lt;br&gt;&lt;br&gt;まずC言語入門講座とかその手のサイトを2つほど回って、Hello Worldとかfizzbuzzとかを書くこと5日間。&lt;br&gt;そろそろ出来るかなと、ためしにやってみたら本当に出来た。ちなみに一番難しかったのはVisualStudioの操作方法だった。なんでAviSynthプラグインはmingwでビルドできないんだよチクショウめ。&lt;br&gt;&lt;br&gt;とりあえず&lt;a href="http://forum.doom9.org/showthread.php?p=1470266#post1470266"&gt;出来上がったもの&lt;/a&gt;はDoom9に投稿したので、あとはツッコミ待ちである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-8914367171970992745?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/8914367171970992745/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2011/01/rawsourcedll.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8914367171970992745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8914367171970992745'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2011/01/rawsourcedll.html' title='RawSource.dll'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-1942821045323397741</id><published>2010-12-19T12:39:00.018+09:00</published><updated>2011-10-12T01:47:47.673+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>TAEC.py</title><content type='html'>またまた某所にて&lt;br /&gt;&lt;blockquote&gt;(silverfilain) どうせならMaxMBPSとMaxFSも考慮して幅・高さ・fpsから&lt;br /&gt;最適なレベルを表示するのも作って欲しいぉ&lt;br /&gt;(Chikuzen) じゃあ、ちょっと調べてみる&lt;/blockquote&gt;てな感じで、また書くことになった。&lt;br /&gt;&lt;pre class="python" name="code"&gt;#!/bin/env python&lt;br /&gt;# coding: utf-8&lt;br /&gt;#****************************************************************************&lt;br /&gt;#  TAEC(Tiny Avc Encode Consultant).py &lt;br /&gt;#                                                     written by Chikezun&lt;br /&gt;#  Reference literature:&lt;br /&gt;#    Rec. ITU-T H.264 (03/2010) – Prepublished version&lt;br /&gt;#    インプレス標準教科書シリーズ改訂版 H.264/AVC教科書&lt;br /&gt;#           著者：（監修）大久保 榮／（編者）角野 眞也、菊池 義浩、鈴木 輝彦&lt;br /&gt;#    http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC&lt;br /&gt;#    猫科研究所( http://www.up-cat.net/ )&lt;br /&gt;#        　x264(vbv-maxrate,vbv-bufsize,profile,level),H.264(Profile/Level)&lt;br /&gt;#&lt;br /&gt;#****************************************************************************&lt;br /&gt;&lt;br /&gt;__version__ = '0.3.3'&lt;br /&gt;import sys&lt;br /&gt;import getopt&lt;br /&gt;import math&lt;br /&gt;&lt;br /&gt;def set_default():&lt;br /&gt;    width   = int(1280) &lt;br /&gt;    height  = int(720)&lt;br /&gt;    fpsnum  = int(30000)&lt;br /&gt;    fpsden  = int(1001)&lt;br /&gt;    profile = 'high'&lt;br /&gt;    mode    = 'progressive'&lt;br /&gt;    return [[width, height], [fpsnum, fpsden], profile, mode]&lt;br /&gt;&lt;br /&gt;def usage():&lt;br /&gt;    param = set_default()&lt;br /&gt;    print "\nUsage: taec.py [options]\n"&lt;br /&gt;    print "  -r, --resolution &amp;lt;string&amp;gt; :set 'width x height' ('%ix%i')" % tuple(param[0])&lt;br /&gt;    print "  -f, --fps &amp;lt;string&amp;gt;        :set 'fpsnum / fpsden' ('%i/%i')" % tuple(param[1])&lt;br /&gt;    print "  -p, --profile &amp;lt;string&amp;gt;    :set 'profile' ('%s')" % param[2]&lt;br /&gt;    print "  -i, --interlaced          :specify interlaced mode (not specified)"&lt;br /&gt;    print "  -v, --version             :display version"&lt;br /&gt;    print "  -h, --help                :display this help and exit\n"&lt;br /&gt;&lt;br /&gt;def check_res_and_fps(arg, r_or_f):&lt;br /&gt;    try:&lt;br /&gt;        param = [abs(int(i)) for i in arg.split('x' * r_or_f or '/')]&lt;br /&gt;        if len(param) != 2:&lt;br /&gt;            raise SyntaxError&lt;br /&gt;    except:&lt;br /&gt;        print "\nERROR : invalid %s setting." % ('resolution' * r_or_f or 'fps')&lt;br /&gt;        usage()&lt;br /&gt;        sys.exit()&lt;br /&gt;    else:&lt;br /&gt;        return param&lt;br /&gt;&lt;br /&gt;def check_profile(profile, ipflag):&lt;br /&gt;    if profile in ('baseline', 'main', 'high'):&lt;br /&gt;        if profile != 'baseline' or ipflag != 'interlaced':&lt;br /&gt;            return 1&lt;br /&gt;        else:&lt;br /&gt;            print "\nERROR : baseline cannot accept interlaced."&lt;br /&gt;    print "\nERROR : invalid profile setting."&lt;br /&gt;    usage()&lt;br /&gt;    sys.exit()&lt;br /&gt;&lt;br /&gt;def calc_bs(resolution, fps, ipflag):&lt;br /&gt;    fstmp = [int(math.ceil(i / 16.0)) for i in resolution]&lt;br /&gt;    fs = dbp = fstmp[0] * fstmp[1]&lt;br /&gt;    mbps  = fs * fps[0] // fps[1]&lt;br /&gt;    if ipflag == 'interlaced':&lt;br /&gt;        dbp += fstmp[0] * (fstmp[1] % 2)&lt;br /&gt;    return [mbps, fs, dbp]&lt;br /&gt;&lt;br /&gt;def calc_lv(bs, ipflag, spec):&lt;br /&gt;    for i in spec:&lt;br /&gt;        if bs[0] &amp;lt;= i[1] and bs[1] &amp;lt;= i[2] and bs[2] &amp;lt;= i[3]:&lt;br /&gt;            return i[0]&lt;br /&gt;    if ipflag == 'interlaced':&lt;br /&gt;        print "ERROR : interlaced encoding cannot be done to this video."&lt;br /&gt;    print "ERROR : there is no suitable setting."&lt;br /&gt;    usage()&lt;br /&gt;    sys.exit()&lt;br /&gt;&lt;br /&gt;def calc_result(profile, bitstream, line):&lt;br /&gt;    vbv = [int(i * ((profile == 'high') * 1.25 or 1)) for i in line[4]]&lt;br /&gt;    ref = [16 * (i &amp;gt; 16) or i for i in [line[3] // bitstream[2]]]&lt;br /&gt;    return tuple([line[0]] + vbv + ref)&lt;br /&gt;&lt;br /&gt;def display_result(level, profile, bitstream, spec):&lt;br /&gt;    index = [i[0] for i in spec]&lt;br /&gt;    try:&lt;br /&gt;        for i in xrange(len(index)):&lt;br /&gt;            if index[i] == level:&lt;br /&gt;                line = spec[i]&lt;br /&gt;                print "%5s%12i%13i%8i" % calc_result(profile, bitstream, line)&lt;br /&gt;                level = index[i + 1]&lt;br /&gt;    except:&lt;br /&gt;        return 0&lt;br /&gt;&lt;br /&gt;def get_spec():&lt;br /&gt;#H.264/AVC spec [(level, MaxMBPs, MaxFS, MaxDbpMBs, [MaxBR, MaxCPB], ipflag]}&lt;br /&gt;    return [('1.0',   1485,    99,    396, [    64,    175], 'p'),&lt;br /&gt;            ('1b ',   1485,    99,    396, [   128,    350], 'p'),&lt;br /&gt;            ('1.1',   3000,   396,    900, [   192,    500], 'p'),&lt;br /&gt;            ('1.2',   6000,   396,   2376, [   384,   1000], 'p'),&lt;br /&gt;            ('1.3',  11880,   396,   2376, [   768,   2000], 'p'),&lt;br /&gt;            ('2.0',  11880,   396,   2376, [  2000,   2000], 'p'),&lt;br /&gt;            ('2.1',  19800,   792,   4752, [  4000,   4000], 'i'),&lt;br /&gt;            ('2.2',  20250,  1620,   8100, [  4000,   4000], 'i'),&lt;br /&gt;            ('3.0',  40500,  1620,   8100, [ 10000,  10000], 'i'),&lt;br /&gt;            ('3.1', 108000,  3600,  18000, [ 14000,  14000], 'i'),&lt;br /&gt;            ('3.2', 216000,  5120,  20480, [ 20000,  20000], 'i'),&lt;br /&gt;            ('4.0', 245760,  8192,  32768, [ 20000,  25000], 'i'),&lt;br /&gt;            ('4.1', 245760,  8192,  32768, [ 50000,  62500], 'i'),&lt;br /&gt;            ('4.2', 491520,  8192,  34816, [ 50000,  62500], 'p'),&lt;br /&gt;            ('5.0', 589824, 22080, 110400, [135000, 135000], 'p'),&lt;br /&gt;            ('5.1', 983040, 36864, 184320, [240000, 240000], 'p')]&lt;br /&gt;&lt;br /&gt;def set_param(opts, param):&lt;br /&gt;    for opt, arg in opts:&lt;br /&gt;        if opt in ("-r", "--resolution"):&lt;br /&gt;            param[0] = check_res_and_fps(arg, 1)&lt;br /&gt;        elif opt in ("-f", "--fps"):&lt;br /&gt;            param[1] = check_res_and_fps(arg, 0)&lt;br /&gt;        elif opt in ("-p", "--profile"):&lt;br /&gt;            param[2] = arg&lt;br /&gt;        elif opt in ("-i", "--interlaced"):&lt;br /&gt;            param[3] = 'interlaced'&lt;br /&gt;        elif opt in ("-h", "--help"):&lt;br /&gt;            usage()&lt;br /&gt;            sys.exit()&lt;br /&gt;        elif opt in ("-v", "--version"):&lt;br /&gt;            print "tiny avc encode consultant %s" % __version__&lt;br /&gt;            sys.exit()&lt;br /&gt;    return param&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;    try:&lt;br /&gt;        opts, args = getopt.getopt(sys.argv[1:], "r:f:p:ihv",&lt;br /&gt;            ["resolution=","fps=","profile=","interlaced","help","version"])&lt;br /&gt;    except:&lt;br /&gt;        usage()&lt;br /&gt;        sys.exit()&lt;br /&gt;&lt;br /&gt;    param = set_default()&lt;br /&gt;&lt;br /&gt;    if len(opts) &amp;gt; 0:&lt;br /&gt;        param = set_param(opts, param)&lt;br /&gt;    else:&lt;br /&gt;        usage()&lt;br /&gt;&lt;br /&gt;    check_profile(param[2], param[3])&lt;br /&gt;&lt;br /&gt;    print&lt;br /&gt;    print " resolution       : %i x %i" % tuple(param[0])&lt;br /&gt;    print " fps              : %i / %i" % tuple(param[1])&lt;br /&gt;    print " profile          : %s"      % param[2]&lt;br /&gt;    print " encoding mode    : %s\n"    % param[3]&lt;br /&gt;&lt;br /&gt;    bitstream = calc_bs(param[0], param[1], param[3])&lt;br /&gt;    print " MBPS ... %6iMB/s" % bitstream[0]&lt;br /&gt;    print " FS   ... %6iMBs"  % bitstream[1]&lt;br /&gt;    print " DPB  ... %6iMBs\n"  % bitstream[2]&lt;br /&gt;&lt;br /&gt;    if param[3] == 'interlaced':&lt;br /&gt;        avcspec = [i for i in get_spec() if i[5] == 'i']&lt;br /&gt;    else:&lt;br /&gt;        avcspec = get_spec()&lt;br /&gt;&lt;br /&gt;    minlv = calc_lv(bitstream, param[3], avcspec)&lt;br /&gt;&lt;br /&gt;    print " suitable settings are ...\n"&lt;br /&gt;    print " level  vbv-maxrate  vbv-bufsize  max-ref"&lt;br /&gt;    print " ----------------------------------------"&lt;br /&gt;    display_result(minlv, param[2], bitstream, avcspec)&lt;br /&gt;&lt;br /&gt;#changelog&lt;br /&gt;# 2010/12/19     0.1.0　公開&lt;br /&gt;# 2010/12/19     0.1.1　いろいろ計算がおかしかったのを修正&lt;br /&gt;# 2010/12/20     0.2.0　lambda式面白い&lt;br /&gt;# 2010/12/21     0.3.0　リスト内包とgetoptの存在を知る&lt;br /&gt;#    〃          0.3.1  getoptの長文形式における要引数要素に=を付けていなかったのを修正&lt;br /&gt;# 2010/01/02     0.3.2  処理が重複する関数(check_resolution, check_fps)をひとつにまとめた&lt;br /&gt;# 2011/03/17     0.3.3  cosmetics&lt;/pre&gt;&lt;pre class="python" name="code"&gt;# 2011/10/12     0.3.4  Fix 10L&lt;br /&gt;&lt;/pre&gt;なにせ「コンサルタント」ですから、まず役にたたないと思われます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-1942821045323397741?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/1942821045323397741/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/12/taecpy.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1942821045323397741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1942821045323397741'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/12/taecpy.html' title='TAEC.py'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-6243032999097631633</id><published>2010-12-18T18:42:00.010+09:00</published><updated>2010-12-18T23:20:22.235+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>avc_refcalc.py</title><content type='html'>某所にて&lt;br /&gt;&lt;blockquote&gt;(boiled_sugar) level計算機とかないのかなー&lt;br /&gt;(Chikuzen)     どんな計算したいの？&lt;br /&gt;(boiled_sugar) 解像度とlevelで最大ref計算&lt;br /&gt;(Chikuzen)     この前D_Sがそんなの書いてx264に組み込んでなかったっけ？&lt;br /&gt;(boiled_sugar) 独立したプログラムが欲しい&lt;/blockquote&gt;というわけで、書いてみた。&lt;br /&gt;&lt;pre class="python" name="code"&gt;#!/bin/env python&lt;br /&gt;# coding: utf-8&lt;br /&gt;&lt;br /&gt;#****************************************************************************&lt;br /&gt;#  avc_refcalc.py 0.20&lt;br /&gt;#                                   written by Chikezun&lt;br /&gt;#  Reference literature:&lt;br /&gt;#    インプレス標準教科書シリーズ改訂版 H.264/AVC教科書&lt;br /&gt;#           著者：（監修）大久保 榮／（編者）角野 眞也、菊池 義浩、鈴木 輝彦&lt;br /&gt;#    http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC&lt;br /&gt;#    猫科研究所(http://www.up-cat.net/FrontPage.html)&lt;br /&gt;#        　x264(vbv-maxrate,vbv-bufsize,profile,level),H.264(Profile/Level)&lt;br /&gt;#&lt;br /&gt;#****************************************************************************&lt;br /&gt;&lt;br /&gt;import sys&lt;br /&gt;import math&lt;br /&gt;&lt;br /&gt;def usage():&lt;br /&gt;    print "Usage: avc_refcalc.py [options]\n"&lt;br /&gt;    print "  -r, --resolution &amp;lt;string&amp;gt; :set 'width x height' ('1280x720')"&lt;br /&gt;    print "  -l, --level &amp;lt;string&amp;gt;      :set 'level' ('4.1')"&lt;br /&gt;    print "  -p, --profile &amp;lt;string&amp;gt;    :set 'profile' ('high')"&lt;br /&gt;    print "  -i, --interlaced          :specify interlaced mode (not specified)"&lt;br /&gt;    print "  -h, --help                :display this help and exit\n"&lt;br /&gt;&lt;br /&gt;def check_prof(pr, ip):&lt;br /&gt;    for i in ['baseline', 'main', 'high']:&lt;br /&gt;        if i == pr:&lt;br /&gt;            if i != 'baseline' or ip != 'interlaced':&lt;br /&gt;                return i&lt;br /&gt;            else:&lt;br /&gt;                print "ERROR : baseline cannot accept interlaced."&lt;br /&gt;    print "ERROR : invalid profile setting.\n"&lt;br /&gt;    usage()&lt;br /&gt;    sys.exit()&lt;br /&gt;&lt;br /&gt;def check_level(lv, ip, dic):&lt;br /&gt;    lvl = lv.replace('0','').replace('.','')&lt;br /&gt;    if dic.has_key(lvl):&lt;br /&gt;        if ip[0] != 'i' or dic.get(lvl)[0] == 'i':&lt;br /&gt;            return lvl&lt;br /&gt;        else:&lt;br /&gt;            print "ERROR : specified level cannot accept interlaced."&lt;br /&gt;    print "ERROR : invalid level value.\n"&lt;br /&gt;    usage()&lt;br /&gt;    sys.exit()&lt;br /&gt;&lt;br /&gt;def calc_mbs(w, h, ip):&lt;br /&gt;    mbh = int(math.ceil(float(w) / 16))&lt;br /&gt;    mbv = int(math.ceil(float(h) / 16))&lt;br /&gt;    if mbv % 2 == 1 and ip == 'interlaced':&lt;br /&gt;        mbv += 1&lt;br /&gt;    mbs = mbh * mbv&lt;br /&gt;    if mbs &gt; 0:&lt;br /&gt;        return mbs&lt;br /&gt;    else:&lt;br /&gt;        print "ERROR : invalid resolution setting.\n"&lt;br /&gt;        usage()&lt;br /&gt;        sys.exit()&lt;br /&gt;&lt;br /&gt;def calc_vbv(lv, pr, dic):&lt;br /&gt;    vbvmax = dic.get(lv)[1]&lt;br /&gt;    vbvbuf = dic.get(lv)[2]&lt;br /&gt;    if pr == 'high':&lt;br /&gt;        return [int(vbvmax * 1.25), int(vbvbuf * 1.25)]&lt;br /&gt;    else:&lt;br /&gt;        return [vbvmax, vbvbuf]&lt;br /&gt;&lt;br /&gt;def calc_maxref(lv, mbs, dic):&lt;br /&gt;    ref = int(dic.get(lv)[3] / mbs)&lt;br /&gt;    if ref &gt; 16:&lt;br /&gt;        ref = 16&lt;br /&gt;    if ref &gt; 0:&lt;br /&gt;        return ref&lt;br /&gt;    else:&lt;br /&gt;        print "ERROR : resolution is too large to level.\n"&lt;br /&gt;        usage()&lt;br /&gt;        sys.exit()&lt;br /&gt;&lt;br /&gt;options = sys.argv&lt;br /&gt;len_opt = len(options)&lt;br /&gt;&lt;br /&gt;#set default values&lt;br /&gt;width  = 1280&lt;br /&gt;height = 720&lt;br /&gt;level  = '4.1'&lt;br /&gt;prof   = 'high'&lt;br /&gt;mode   = 'progressive'&lt;br /&gt;help   = 0&lt;br /&gt;&lt;br /&gt;#H.264/AVC level dictionary {level: [interlaced flag, MaxBR, MaxCPB, MaxDbpMbs]}&lt;br /&gt;avcdic = {'1' :['p',     64,    175,    396], '1b':['p',    128,    350,    396],&lt;br /&gt;          '11':['p',    192,    500,    900], '12':['p',    384,   1000,   2376],&lt;br /&gt;          '13':['p',    768,   2000,   2376], '2' :['p',   2000,   2000,   2376],&lt;br /&gt;          '21':['i',   4000,   4000,   4752], '22':['i',   4000,   4000,   8100],&lt;br /&gt;          '3' :['i',  10000,  10000,   8100], '31':['i',  14000,  14000,  18000],&lt;br /&gt;          '32':['i',  20000,  20000,  20480], '4' :['i',  20000,  25000,  32768],&lt;br /&gt;          '41':['i',  50000,  62500,  32768], '42':['p',  50000,  62500,  34816],&lt;br /&gt;          '5' :['p', 135000, 135000, 110400], '51':['p', 240000, 240000, 184320]}&lt;br /&gt;&lt;br /&gt;if len_opt &gt; 1:&lt;br /&gt;    for i in range(len_opt):&lt;br /&gt;        try:&lt;br /&gt;            if options[i] == '-r' or options[i] == '--resolution':&lt;br /&gt;                res    = options[i + 1].split('x')&lt;br /&gt;                width  = int(res[0])&lt;br /&gt;                height = int(res[1])&lt;br /&gt;            if options[i] == '-l' or options[i] == '--level':&lt;br /&gt;                level = options[i + 1]&lt;br /&gt;            if options[i] == '-p' or options[i] == '--profile':&lt;br /&gt;                prof = options[i + 1]&lt;br /&gt;            if options[i] == '-i' or options[i] == '--interlaced':&lt;br /&gt;                mode = 'interlaced'&lt;br /&gt;            if options[i] == '-h' or options[i] == '--help':&lt;br /&gt;                help = 1&lt;br /&gt;&lt;br /&gt;        except:&lt;br /&gt;            print "ERROR : invalid arguments\n"&lt;br /&gt;            help = 1&lt;br /&gt;&lt;br /&gt;        else:&lt;br /&gt;            pass&lt;br /&gt;&lt;br /&gt;    if help == 1:&lt;br /&gt;        usage()&lt;br /&gt;        sys.exit()&lt;br /&gt;&lt;br /&gt;else:&lt;br /&gt;    usage()&lt;br /&gt;&lt;br /&gt;profile = check_prof(prof, mode)&lt;br /&gt;lv_tmp  = check_level(level, mode, avcdic)&lt;br /&gt;mbs     = calc_mbs(width, height, mode)&lt;br /&gt;vbv     = calc_vbv(lv_tmp, profile, avcdic)&lt;br /&gt;maxref  = calc_maxref(lv_tmp, mbs, avcdic)&lt;br /&gt;&lt;br /&gt;print " resolution       : %i x %i" % (width, height)&lt;br /&gt;print " level            : %s" % level&lt;br /&gt;print " profile          : %s" % profile&lt;br /&gt;print " mode             : %s" % mode&lt;br /&gt;print " vbv-maxrate(vlc) : %i" % vbv[0]&lt;br /&gt;print " vbv-bufsize(vlc) : %i" % vbv[1]&lt;br /&gt;print " max ref number   : %i" % maxref&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-6243032999097631633?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/6243032999097631633/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/12/avcrefcalcpy.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6243032999097631633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6243032999097631633'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/12/avcrefcalcpy.html' title='avc_refcalc.py'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-4991792931239243527</id><published>2010-11-26T16:52:00.004+09:00</published><updated>2011-12-16T17:19:17.336+09:00</updated><title type='text'>mod16</title><content type='html'>およそ動画系の話題を扱うforumであればたまに出てくる話題に"mod16"なるものがある。&lt;br /&gt;そう、「動画の解像度は縦横ともに16の倍数にすべきである」ってやつですな。&lt;br /&gt;これは正しいといえば正しいが、正しくないといえば正しくない。&lt;br /&gt;とりあえず事実だけを言うのであれば「(mpeg系のエンコーダーは)解像度が16の倍数でないと圧縮出来ない」になるだろう。&lt;br /&gt;&lt;br /&gt;mpeg系エンコーダー(そしてこれらの影響を受けているH.263とかVPxとか)は、まず映像を左上を原点にとって16x16のMB(マクロブロック)の集まりに分割してから動き検索やらDCT(離散コサイン変換)やらを行う。&lt;br /&gt;規格によっては16x16のMBをさらに4x4に分割したり8x8とか8x16とかにも分割したりするが(SMB:サブマクロブロック)、とりあえず一回16x16で分割しないことには何も始まらない。&lt;br /&gt;さあ、16x16の集まりに分割するのだ。&lt;br /&gt;&lt;br /&gt;でも、たとえば642x484なんていう解像度を圧縮する場合はどうすればいいのよ？&lt;br /&gt;右端の2x16とか下端の16x4とか一番右下の2x4は処理できないじゃん。&lt;br /&gt;困るよ、おい。&lt;br /&gt;&lt;br /&gt;これを何とかするため、16の倍数になっていないものの場合はエンコーダーの内部でpadding(パディング)なるものが行われるようになっている。&lt;br /&gt;paddingを英和辞典で引けば「詰め物」とかそういった感じの意味で載っているだろう。&lt;br /&gt;つまり、本来存在しない映像をを付け足して、16の倍数になるようにするわけだ。642x484であれば、映像の右端に幅14ピクセル、下端に幅12ピクセルのダミーをくっつけて656ｘ496にしてしまう。 &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_tGkeSYpkbt0/TO9NK-SyzJI/AAAAAAAAABo/TSKQTtluMFE/s1600/padding_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="126" src="http://1.bp.blogspot.com/_tGkeSYpkbt0/TO9NK-SyzJI/AAAAAAAAABo/TSKQTtluMFE/s400/padding_01.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;よーし、これで圧縮にとりかかれますな。&lt;br /&gt;&lt;br /&gt;ところでこのpaddingされる映像ってどんなものなのか、知ってます？&lt;br /&gt;黒ベタ？　灰色ベタ？&lt;br /&gt;正解は右端および下端の縁の色です。&lt;br /&gt;つまり、こんな感じ。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_tGkeSYpkbt0/TO9PsTz6esI/AAAAAAAAABs/9UFLbXh7lt0/s1600/padding_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="230" src="http://2.bp.blogspot.com/_tGkeSYpkbt0/TO9PsTz6esI/AAAAAAAAABs/9UFLbXh7lt0/s400/padding_02.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;なんでこんな絵の具が垂れたみたいな感じに？&lt;br /&gt;それは、このようにpaddingを行うのが一番、本来の映像に影響を与えずに圧縮できるから。&lt;br /&gt;単色ベタ塗りは色々とまずいことがあるのですよ。色々ね。&lt;br /&gt;もし自分でこのようなpaddingをしてみたければ、AviUtlなら「"縁塗りつぶし"を"縁の色で塗る"にチェックを入れて値をマイナスに設定」、AviSynthなら「"AddBorders"と"&lt;a href="http://www.geocities.com/siwalters_uk/bdrcntrl.html"&gt;BorderControl&lt;/a&gt;"または"&lt;a href="http://avisynth.org/warpenterprises/files/fillmargins_25_dll_20030618.zip"&gt;FillMargins&lt;/a&gt;"を併用」で可能です。 &lt;pre name="code" class="python"&gt;#padding.avs&lt;br /&gt;AVISource("642x484.avi")&lt;br /&gt;AddBorders(0,0,14,12)&lt;br /&gt;&lt;br /&gt;#BorderControlの場合&lt;br /&gt;LoadPlugin("BorderControl.dll")&lt;br /&gt;BorderControl(XRS=14,YBS=12)&lt;br /&gt;&lt;br /&gt;#FillMarginsの場合&lt;br /&gt;LoadPlugin("FillMargins.dll")&lt;br /&gt;FillMargins(0,0,14,12)&lt;/pre&gt;&lt;br /&gt;さて、これで圧縮は出来たけど、いざ動画を再生するときに、こんな変な部分まで表示されたら、それはそれで嫌ではないかな？&lt;br /&gt;本来存在しないはずのものまで見えるのってうざいと思うよっつーかうざいんだよボケ。心霊写真じゃあるまいし。&lt;br /&gt;そういう文句が出ることは分かりきっているので、paddingされたデータはまともなデコーダーならデコード時にはcropしてしまうようになっています。つまりさっきくっつけた右端14ピクセルと下端12ピクセルは表示されず、もとの642ｘ484として表示される。&lt;br /&gt;やれやれ、これにて一件落着。&lt;br /&gt;&lt;br /&gt;でもね。&lt;br /&gt;影響の少ないダミーによる水増しとはいえ、映像は642ｘ484ではなく656ｘ496の状態で圧縮されてるわけですよ。&lt;br /&gt;解像度が大きければ、その分ファイルサイズも当然大きくなります。&lt;br /&gt;もし640x480だったならばpaddingも必要なく、ファイルサイズも小さくなるだろうに…。&lt;br /&gt;表示されない屑データのために膨れるなんて、そんな贅肉見苦しいんだよ、メタボだよ、ああむかつくこんちくしょう、うーんと、えーっと、そもそも水平2ピクセル、垂直4ピクセルくらいなら、削っちゃっても問題なくね？フフフそうだよそれくらい削っても気にならないだろ普通は、っつーかむしろ気にするやつのほうがおかしいだろ頭悪いだろキ○○イだろフヒヒヒヒええい削ってしまえバカヤローウギャー…orz&lt;br /&gt;&lt;br /&gt;というわけで、やたら圧縮率にこだわる人であれば16の倍数になるようにするでしょう。&lt;br /&gt;これが「動画の解像度は縦横ともに16の倍数にするべきである」の正体です。&lt;br /&gt;まあ、もともと16の倍数になるように絵が作られていれば、こんな葛藤も起こらないわけで、それにこしたことはないんですが…はぁ(ため息)。&lt;br /&gt;&lt;br /&gt;ちなみにたまに「mod16に出来ないならば、次善の策としてmod8(8の倍数)にするべきである」という人がいますが、これは迷信の類です。&lt;br /&gt;mod16でなければpaddingは起こります。&lt;br /&gt;そしてpaddingされるデータ量は、解像度を16で割った余りが16に近ければ近いほど小さくなります。&lt;br /&gt;644x484、648x488、652x492という3種類の映像があったとすれば、ファイルサイズに対してpadding分のデータ量の占める割合は、644x484 &gt; 648x488 &gt; 652x492です。&lt;br /&gt;つまりpaddingは少ないほどよいってことですね。&lt;br /&gt;｢652ｘ492か。縦横12ずつ削るってのはさすがに嫌だよなあ…でも縦横4ずつくらいならそれほど嫌じゃないぞ。よし、648x488でmod8にしよう」&lt;br /&gt;「それはつまり、大事な映像をわざわざ削った挙句に無駄になるデータを増やそうってことですかそーですか…手前の馬鹿さ加減にゃあ父ちゃん情けなくって涙出てくらぁ!!」(&lt;a href="http://ja.wikipedia.org/wiki/%E3%81%82%E3%81%B0%E3%82%8C%E3%81%AF%E3%81%A3%E3%81%A1%E3%82%83%E3%81%8F"&gt;CV:東野英心&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;あと、「mod16じゃないと、映像の端がゆがむ」という人もいますが、これもどうなんでしょうかね。&lt;br /&gt;よっぽどひどいエンコーダーでもない限り、前述したような適切なpaddingを行っていれば、まず人間の目ではソースと並べて見比べてもなかなか視認出来るものではないはずなんですが。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-4991792931239243527?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/4991792931239243527/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/11/mod16.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4991792931239243527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4991792931239243527'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/11/mod16.html' title='mod16'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_tGkeSYpkbt0/TO9NK-SyzJI/AAAAAAAAABo/TSKQTtluMFE/s72-c/padding_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-2155924741487986211</id><published>2010-10-23T07:23:00.004+09:00</published><updated>2010-10-23T21:10:24.935+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='身の回り'/><title type='text'>Console2</title><content type='html'>&lt;a href="http://xhmikosr.1f0.de/"&gt;XhmikosR氏のファイル置き場&lt;/a&gt;を眺めていたら、/toolsにconsole_2.00_Beta_b146というのがあった。&lt;br /&gt;なんだろうと思ってググって見たら、&lt;a href="http://sourceforge.net/projects/console/"&gt;sourceforgeの本家のページ&lt;/a&gt;が見つかったので、最新のzipをDLして、ヘルプを読んでみた。&lt;br /&gt;&lt;blockquote&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;i&gt;Console is a Windows console window enhancement.&lt;/i&gt;&lt;/div&gt;(consoleはWindowsのコンソールウィンドウの拡張用ツールです)&lt;br /&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;i&gt;Console is simply a nice-looking front end for a shell of your choice (cmd.exe, 4NT, bash, etc.) Other command-line utilities can also be used as 'shells' by Console. &lt;/i&gt;&lt;/div&gt;(単純に言ってしまえば、consoleはあなたの選んだshell(cmd.exeとかbashとか)のためのかっこいいフロントエンドであり、他のCLIユーティリティでもshell同様に使えます)&lt;/blockquote&gt;どうやら複数のCLI端末のウィンドウをタブで管理できたり、コピペ操作がテキストエディタぽくマウスで出来たり、フォントを変えたり、背景を個別に設定できたりするらしい。&lt;br /&gt;端末がタブで扱えるのは大変うれしいので、早速使ってみることにした。&lt;br /&gt;&lt;br /&gt;1. とりあえずzipを解凍し、適当なところに置く。&lt;br /&gt;2. 次にヘルプ(.chm)を開き、軽く目を通す。&lt;br /&gt;3. console.exeをダブルクリック。&lt;br /&gt;4. ヘルプのSetting -&amp;gt; Language settingを読みながら、フォントの設定を行う。&lt;br /&gt;5. その他設定を行う。&lt;br /&gt;&lt;br /&gt;ためしに「&lt;a href="http://www.google.co.jp/search?hl=ja&amp;amp;source=hp&amp;amp;biw=1075&amp;amp;bih=860&amp;amp;q=console2+%E6%97%A5%E6%9C%AC%E8%AA%9E&amp;amp;aq=0&amp;amp;aqi=g3&amp;amp;aql=&amp;amp;oq=console2+&amp;amp;gs_rfai="&gt;console2　日本語&lt;/a&gt;」で検索したら、4のあたりの情報がいくつか出てきた。ヘルプを読むのは大事よね。&lt;br /&gt;&lt;br /&gt;とりあえずタブの設定は3種類作ってみた。&lt;br /&gt;ひとつはcmd.exe用&lt;br /&gt;Shellとして、C:\Windows\System32\cmd.exeを登録し、Startup dirはC:\にした。&lt;br /&gt;2つ目はmsysのbash用。&lt;br /&gt;これは&lt;pre class="python" name="code"&gt;@echo off&lt;br /&gt;G:\msys\bin\sh.exe --login -i&lt;/pre&gt;だけ書いたbatを用意して、それをShellとして登録する。&lt;br /&gt;3つ目はCygwinのbash用。&lt;br /&gt;これもmsysと同様にbatを登録するだけ。&lt;br /&gt;&lt;br /&gt;これでやることはとりあえず終了。&lt;br /&gt;いざ使ってみると…これはイイ！&lt;br /&gt;新しい端末をショートカットキー一発でタブで開けて、切り替えもラクラク。&lt;br /&gt;特にノートPCとか狭い画面で複数の端末を操作する必要がある人にはお奨めですね。&lt;br /&gt;あとは背景とかも設定できるのでいろいろいじってみるのもいいかも。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_tGkeSYpkbt0/TMIOjCuT7VI/AAAAAAAAABk/xejTPBiN010/s1600/console.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="218" src="http://1.bp.blogspot.com/_tGkeSYpkbt0/TMIOjCuT7VI/AAAAAAAAABk/xejTPBiN010/s640/console.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-2155924741487986211?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/2155924741487986211/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/10/console2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/2155924741487986211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/2155924741487986211'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/10/console2.html' title='Console2'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_tGkeSYpkbt0/TMIOjCuT7VI/AAAAAAAAABk/xejTPBiN010/s72-c/console.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-8320339584423624214</id><published>2010-10-22T05:05:00.001+09:00</published><updated>2010-10-23T21:10:45.321+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ビルド'/><title type='text'>GPACが</title><content type='html'>mingw / mingw-w64共に再びビルドできるようになったみたい。(SVN rev2183時点)&lt;br&gt;&lt;br&gt;でも&lt;pre&gt;./configure --cross-prefix=x86_64-w64-mingw32-&lt;/pre&gt;ってやったら&lt;pre&gt;C   compiler: x86_64-w64-mingw32-gcc&lt;br /&gt;C++ compiler: g++&lt;/pre&gt;と表示されるあたり、次に壊れるのも早そう…つーか、まだ直ってはいないといったほうがいいのかも。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-8320339584423624214?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/8320339584423624214/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/10/gpac.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8320339584423624214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8320339584423624214'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/10/gpac.html' title='GPACが'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-8686584505507120193</id><published>2010-10-19T19:14:00.005+09:00</published><updated>2011-06-14T07:18:58.596+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='AvsP'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>AvsPのブックマーク位置をずらすマクロ</title><content type='html'>AvsP(mod)でTrimSelectionを使ってCMカットすると、各パートの終端フレームにブックマークが打たれた状態になる。&lt;br&gt;これが結構曲者で、例えば動画にチャプターを打つ場合、チャプターポイントは各パートの先頭フレームに来るように打つものであるが、ブックマークが打たれている場所が各パートの終端だと、そのまま"Bookmarks to Chapter.py"を使うわけにいかない。&lt;br&gt;各パートの終端フレームの次のフレームは当然、次のパートの先頭フレームになるわけだが、この1フレームのずれを修正するために、いちいちブックマークを消して、1フレーム移動して、もう一度ブックマークを打ち直すのはめんどくさい、なんとかならんもんかいな？&lt;br&gt;&lt;br&gt;と思ったので、これもマクロで何とかしてみようというのが今回のお話。&lt;br&gt;-----------------------------------------------------------------------------&lt;br&gt;既存のブックマークすべてを1フレーム右(未来方向)にずらすだけなら簡単である。&lt;pre name="code" class="python"&gt;#Shift Bookmarks right+1.py&lt;br /&gt;before=avsp.GetBookmarkList()&lt;br /&gt;if len(before):&lt;br /&gt;    after = [i + 1 for i in before]&lt;br /&gt;    after.sort()&lt;br /&gt;    avsp.SetBookmark(before) #ブックマークは二重に打つと消える。&lt;br /&gt;    avsp.SetBookmark(after)&lt;/pre&gt; しかし、これをそのまま使うと、もし最終フレームにブックマークが打たれていた場合、そのブックマークは範囲外に飛び出して消えてしまう。&lt;br&gt;それに、すでにブックマークを1フレームずらし終えたのに、何らかの操作ミスでもう一回ずらしてしまったらどうしよう？ マクロを使った場合、undoは効かないよ？&lt;br&gt;はたまた、例えばブックマークを打ち終え、チャプターを出力する段になったところでトリムのし残しを発見してしまった場合は？ その部分が全部で10個打ったブックマークの2番目と3番目の間に30フレームあったりしたら、1番目と2番目は打ち直すとしても、3番目以降のためにこれを30回実行するの？&lt;br&gt;ずらすフレーム数を任意に指定できるようにしたとして、全部で10000フレームしかないクリップに対して、桁を間違えて100000なんて指定してしまったら？&lt;br&gt;などと不測の事態についていろいろ考えていたら、最後にはこうなっていた。&lt;pre name="code" class="python"&gt;#Shift Bookmarks.py&lt;br /&gt;def newBM(present, shift, last):&lt;br /&gt;    if 0 &lt;= present + shift &lt;= last:&lt;br /&gt;        return present + shift&lt;br /&gt;    elif present + shift &gt; last:&lt;br /&gt;        return newBM(present, shift - last - 1, last)&lt;br /&gt;    else:&lt;br /&gt;        return newBM(present, shift + last + 1, last)&lt;br /&gt;&lt;br /&gt;input = avsp.GetTextEntry('Input an integer value',default='1')&lt;br /&gt;shift = int(input)&lt;br /&gt;before = avsp.GetBookmarkList()&lt;br /&gt;if shift and len(before):&lt;br /&gt;    framecount = avsp.GetVideoFramecount() &lt;br /&gt;    after = [newBM(old, shift, framecount - 1) for old in before]&lt;br /&gt;    after.sort()&lt;br /&gt;    avsp.SetBookmark(before)&lt;br /&gt;    avsp.SetBookmark(after)&lt;/pre&gt;うーむ、再帰なんて初めて使ったよ。&lt;br&gt;-------------------------------------------------------------------------&lt;br&gt;使い方：&lt;br&gt;ブックマークが打たれた状態でマクロを実行するとダイアログが現れるので、数値を入力する。デフォルトは1。&lt;br&gt;正ならば右(未来方向)、負ならば左(過去方向)にすべてのブックマークが指定した数値分だけ移動する。&lt;br&gt;最終フレーム + 1 = 0番フレーム(0番フレーム - 1 = 最終フレーム)として循環処理される。&lt;br&gt;数値以外の文字列を入力した場合はエラーとなり何もしない。小数点以下は切り捨て。&lt;br&gt;操作を取り消したい場合はもう一度マクロを実行し、事前の指定値の反数を入力すること。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-8686584505507120193?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/8686584505507120193/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/10/avsp.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8686584505507120193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8686584505507120193'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/10/avsp.html' title='AvsPのブックマーク位置をずらすマクロ'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-6796575696526194393</id><published>2010-10-18T03:24:00.017+09:00</published><updated>2011-06-14T07:18:58.597+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='AvsP'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>CM検出マクロ for AvsP</title><content type='html'>この前のSCx264 to Bookmarksは、少々時間がかかり過ぎるので、CMカットにはいまいち不向きなようだった。&lt;br /&gt;もっと短時間で可能な方法はないものだろうか？&lt;br /&gt;しばし悩んだ末、そういえばAviUtlにもなにやらCMカット用の&lt;a href="http://2sen.dip.jp/cgi-bin/dtvup/source/up0391.zip"&gt;シーンチェンジ検出プラグイン&lt;/a&gt;があると小耳に挟んだことを思い出したので、見てみることにした。&lt;br /&gt;&lt;blockquote&gt;「チャプター編集 for AviUtl by ぽむ + 無音＆シーンチェンジ検索機能 by ru」&lt;br&gt;読み込んでいる動画の音声トラックをスキャンし、無音連続部分を検出して、その「開始部分」にチャプターを打ちます。&lt;br&gt;その後チャプターへのシーク時に無音部分内のシーンチェンジを検出し、その位置へ移動できます。&lt;/blockquote&gt;うーむ、なるほど…。&lt;br /&gt;シーンチェンジ検出を無音部分に限定すれば高速化が可能かも！？&lt;br /&gt;-------------------------------------------------------------------------&lt;br /&gt;では早速やってみましょう。&lt;br /&gt;&lt;br /&gt;まずサンプルクリップを用意します。&lt;br /&gt;今回はMPEG2-TS、音声AACで再生時間31分、総フレーム数55749フレームの地デジソース(1440ｘ1080)です。&lt;br /&gt;&lt;pre class="python" name="code"&gt;#sample.avs&lt;br /&gt;MPEG2Source("sample.d2v")&lt;br /&gt;AudioDub(last, WAVSource("sample.wav"))&lt;br /&gt;&lt;br /&gt;#とりあえず普通に再生できる音声(FAWとかの偽装WAVはこの場合は駄目)でディレイ補正処理を済ませておく。&lt;br /&gt;#今回はソースが地デジTSなので、とりあえず&lt;br /&gt;#[DGIndexでdemuxしたaac　-&amp;gt;　FAWを2回通してディレイ処理済のaac　-&amp;gt;　FAADでPCM.wavに変換]&lt;br /&gt;#したものを使った。&lt;br /&gt;#処理終了後に差し替えれば、偽装WAVでも大丈夫。&lt;br /&gt;#もしaacを直読みしたい場合は、BassAudioでも使ってDelayAudio()で補正することになる。&lt;/pre&gt;このクリップの無音部分を検出しなければならんわけですが、使えそうな道具は…&lt;a href="http://www.geocities.com/wilbertdijkhof/"&gt;MinMaxAudio&lt;/a&gt;かな？&lt;br /&gt;AudioMax(0)が-100dbよりも低ければ、そのフレームは無音と判定することにしましょう(テキトー)。&lt;br /&gt;&lt;pre class="python" name="code"&gt;#sample.avs&lt;br /&gt;MPEG2Source("sample.d2v")&lt;br /&gt;AudioDub(last, WAVSource("sample.wav"))&lt;br /&gt;&lt;br /&gt;LoadPlugin("MinMaxAudio.dll")&lt;br /&gt;AudioDub(BlankClip(last, width=160, height=80), last)&lt;br /&gt;#スピードアップのため、クリップを映像160x80で真っ黒、音声はそのままに変換する&lt;br /&gt;WriteFileIf("silence.log", "AudioMax(0) &lt; -100", "current_frame")&lt;br /&gt;#該当フレームのフレーム番号をテキストに書き出す&lt;/pre&gt;このavsをVirtuaDubの"Run Video Analysis pass"にかけてやると、約1250fpsくらいのスピードでsilence.logが生成されます。&lt;br /&gt;結果を見てみると、どうやら無音のフレームは、各CM及び本編の切れ目あたりにだいたい10～30フレーム入るみたいです。&lt;br /&gt;具体的には全55749フレームのうち、41-53、475-504、926-954、1376-1402、1825-1837、2289-2302、2725-2738、9077-9092、9990-10003、10874-10905、26915-26923、27373-27385、27808-27821、28707-28738、46494-46507、49179-49206、49628-49656、50078-50103、50525-50553、50975-50987、51439-51451、51874-51902、52783-52788、53043-53101、53523-53535、54422-54434、54886-54898、55320-55350、55735-55748の全29箇所561フレームが無音(-100db未満）です。&lt;br /&gt;&lt;br /&gt;そこでsample.avsをこうしてやり&lt;br /&gt;&lt;pre class="python" name="code"&gt;#sample.avs&lt;br /&gt;MPEG2Source("sample.d2v")&lt;br /&gt;AudioDub(last, WAVSource("sample.wav"))&lt;br /&gt;&lt;br /&gt;PointResize(last.width / 4, last.height / 4)&lt;br /&gt;#シーンチェンジ検出には320ｘ270程度で十分なのでPointResizeでリサイズ&lt;br /&gt;FreezeFrame(0,41,41)&lt;br /&gt;FreezeFrame(53,475,475)&lt;br /&gt;FreezeFrame(504,926,926)&lt;br /&gt;#途中24行省略&lt;br /&gt;FreezeFrame(54898,55320,55320)&lt;br /&gt;FreezeFrame(55350,55735,55735)&lt;br /&gt;FreezeFrame(55748,0, 0)&lt;br /&gt;&lt;br /&gt;#AviSynthの仕様ではFreezeFrameでコピーされるフレームはデコードされないので、&lt;br /&gt;#MPEG2Sourceのボトルネックが解消されるはず&lt;/pre&gt;このavsをこの前のSCx264 to Bookmarks.pyにかけてやると、x264はなんと&lt;b style="color: red;"&gt;約2200fps&lt;/b&gt;という想像を絶するスピードでシーンチェンジ検出を終え、ブックマークを打ち終わりました。&lt;br /&gt;あとはFreezeFrameの行を消してやれば…YATTA!!&lt;br /&gt;-----------------------------------------------------------------------------&lt;br /&gt;てなことがありまして、これらの操作を自動で行うべく書いたAvsPマクロが以下の通りです。&lt;br /&gt;使い方は、とりあえずAudioDubまで書いたavsを用意して、マクロを実行するだけです。&lt;br&gt;FAW使用者は、実行後に音声を偽装WAVに差し替えればいいです。ちょっと書き換えれば、そこらへんも自動化できるでしょう&lt;br&gt;前回約10分かかってたのが、約1分まで縮まりました(on Q9450定格)。&lt;br /&gt;著作権は…発生するのかどうか知りませんが、もし発生するのであれば&lt;a href="http://www.gnu.org/licenses/gpl-3.0.html"&gt;GPLv3&lt;/a&gt;です(なんとなく）。&lt;br /&gt;つーか、Pythonスクリプトですから、バイナリと違って秘密にはしようがないと思うけど…。&lt;br /&gt;&lt;br&gt;EDIT:&lt;br&gt;よく考えたらavs2aviのnull出力とx264の--preset ultrafast -o nul ではスピードは大して変わらないので(っていうか、今度はMinMaxAudioがボトルネックになっているので)、avs2aviをx264に変更。&lt;br&gt;avs2aviは要らなくしました。&lt;br /&gt;&lt;pre class="python" name="code"&gt;#Silent_Scenechanges to Boolmarks.py for AvsP&lt;br /&gt;#Author : Chikuzen (http://csbarn.blogspot.com/)&lt;br /&gt;#Requiament: MinMaxAudio.dll, x264.exe, (avs2avi.exe)&lt;br /&gt;&lt;br /&gt;#--------------preparation----------------------------------&lt;br /&gt;import os&lt;br /&gt;&lt;br /&gt;avsname = avsp.SaveScript()&lt;br /&gt;script_org = avsp.GetText()&lt;br /&gt;&lt;br /&gt;#あらかじめ各ツールのパスを設定しておくこと&lt;br /&gt;#ファイルパスを変数に入れる際、前にrをつけるのはPythonのお約束&lt;br /&gt;mmaudio = r'C:\AviSynth 2.5\Plugins_x86\MinMaxAudio.dll'&lt;br /&gt;x264cli = r'G:\Enctools\x264_x86.exe'&lt;br /&gt;#avs2avi = r'G:\Enctools\avs2avi.exe'&lt;br /&gt;if mmaudio and x264cli and avsname and script_org:&lt;br /&gt;#if mmaudio and x264cli and avs2avi and avsname and script_org:&lt;br /&gt;#--------------------------------------------------------------&lt;br /&gt;    #Search Silence&lt;br /&gt;    logfile_si = avsname + '_silence.log'&lt;br /&gt;    text1 = '\nLoadPlugin("%s")' % mmaudio&lt;br /&gt;    text1 += '\nAudioDub(BlankClip(last, width = 160, height = 120), last)'&lt;br /&gt;    text1 += '\nWriteFileIf("%s", "AudioMax(0) &lt; -100", "current_frame", append = false)' % logfile_si&lt;br /&gt;    avsp.InsertText(text1, pos = -1, index = None)&lt;br /&gt;    avsp.SaveScript()&lt;br /&gt;    os.system('%s %s --preset ultrafast --crf 51 -I infinite -o nul' % (x264cli, avsname))&lt;br /&gt;    #os.system('%s %s -c null -o n' % (avs2avi, avsname))&lt;br /&gt;&lt;br /&gt;    #silence_log to freezeframelines&lt;br /&gt;    avsp.SetText(script_org)&lt;br /&gt;    sifile=open(logfile_si)&lt;br /&gt;    lines_si=sifile.readlines()&lt;br /&gt;    sifile.close()&lt;br /&gt;    text2='\nPointResize(last.width / 4, last.height / 4)'&lt;br /&gt;    if len(lines_si):&lt;br /&gt;        x = 0&lt;br /&gt;        for line_si in lines_si:&lt;br /&gt;            log_si = int(line_si.strip())&lt;br /&gt;            if x != log_si - 1:&lt;br /&gt;                text2 += '\nFreezeFrame(%i, %i, %i)' % (x, log_si, log_si)&lt;br /&gt;                x = log_si&lt;br /&gt;            else:&lt;br /&gt;                x += 1&lt;br /&gt;        text2 += '\nFreezeFrame(%i, %i, %i)\n' % (int(lines_si[-1].strip()), 0, 0)&lt;br /&gt;    avsp.InsertText(text2, pos = -1, index = None)&lt;br /&gt;    avsp.SaveScript()&lt;br /&gt;    &lt;br /&gt;    #SCx264&lt;br /&gt;    logfile_sc = avsname + '_scenechange.log'&lt;br /&gt;    opts = '--preset ultrafast --crf 30 -I infinite -i 1 --scenecut 50 -o nul'&lt;br /&gt;    os.system('%s %s -p 1 --stats %s %s' % (x264cli, avsname, logfile_sc, opts))&lt;br /&gt;    avsp.SetText(script_org)&lt;br /&gt;    avsp.SaveScript()&lt;br /&gt;&lt;br /&gt;    #scenechange_log to bookmarks&lt;br /&gt;    scfile = open(logfile_sc)&lt;br /&gt;    lines_sc = scfile.readlines()&lt;br /&gt;    scfile.close()&lt;br /&gt;    bookmarks = []&lt;br /&gt;    for line_sc in lines_sc:&lt;br /&gt;        log_sc = line_sc.split(' ')&lt;br /&gt;        if log_sc[2] == 'type:I':&lt;br /&gt;            bmpoint = int(log_sc[0].lstrip('in:'))&lt;br /&gt;            bookmarks.append(bmpoint)&lt;br /&gt;    avsp.SetBookmark(bookmarks)&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-6796575696526194393?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/6796575696526194393/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/10/cm-for-avsp.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6796575696526194393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6796575696526194393'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/10/cm-for-avsp.html' title='CM検出マクロ for AvsP'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-6432668113550275949</id><published>2010-10-16T08:55:00.004+09:00</published><updated>2010-10-17T06:49:30.833+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='活動記録'/><title type='text'>Syntax Highlighting</title><content type='html'>&lt;a href="http://ept.homelinux.com:41000/~henry/wp/"&gt;Henry氏&lt;/a&gt;の薦めもあって、このブログにSyntax Highlightingを入れてみた。&lt;br /&gt;&lt;br /&gt;初めは&lt;a href="http://u3q.blogspot.com/2010/01/bloggercom-syntax-highlighter-21-widget.html"&gt;こちら&lt;/a&gt;のwidgetを入れてみたのだが、いざ適用してみるとFirefox3.6やIE8だとちゃんとHighlightingしてくれない。&lt;br /&gt;してくれないだけならまだいいが、ついでに"can't find brush for:python"なんていうのまで表示される。&lt;br /&gt;それも適用したコード全てに対して表示されるので、例えばコードが10個あれば10回、100個あれば100回表示されるという始末である。&lt;br /&gt;Chromeなら大丈夫みたいだけど、みんながみんなChromeを使っているわけではないだろうから(そもそも自分自身、メインで使っているのはFirefoxである)すぐにやめた。&lt;br /&gt;&lt;br /&gt;で、結局&lt;a href="http://heisencoder.net/2009/01/adding-syntax-highlighting-to-blogger.html"&gt;こちら&lt;/a&gt;のほうを見ながら、テンプレートの編集なんてことをやる羽目になったわけだが、いざ導入してみると、これはこれで対応している言語が少ない、少ない、少なすぎる。&lt;br /&gt;&lt;br /&gt;AviSynthがないのは仕方ない(つーかavsをHighlightingできるところなんて、世界広しと言えども&lt;a href="http://cccp.project357.com/"&gt;CCCPastebin&lt;/a&gt;くらいのものだろう。流石は&lt;a href="http://mewiki.project357.com/wiki/Main_Page"&gt;MeWiki&lt;/a&gt;のメンテナーcheckers氏がやってるだけのことはある)けど、shellに対応してないってのは痛いなぁ…。&lt;br /&gt;&lt;br /&gt;まあ、ないものは仕方がないので他で代用することにした。&lt;br /&gt;とりあえずAviSynthはPythonでいいだろう。なんか似てるし。&lt;br /&gt;Shellはどうしようとなやんだが、これも結局Pythonにした。特に問題はないみたいだし。&lt;br /&gt;&lt;br /&gt;やっぱりCSSとかも勉強したほうがいいのかな。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-6432668113550275949?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/6432668113550275949/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/10/syntax-highlighting.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6432668113550275949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6432668113550275949'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/10/syntax-highlighting.html' title='Syntax Highlighting'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-3499952018429969384</id><published>2010-10-16T03:29:00.014+09:00</published><updated>2011-06-14T07:18:58.598+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='AvsP'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>SCx264 to Bookmarks for AvsP</title><content type='html'>またまたAvsPマクロネタ。&lt;br /&gt;&lt;br /&gt;さて、AviSynthのプラグインにはいろいろと毛色の変わったものがありますが、そんな中に&lt;a href="http://akuvian.org/src/avisynth/sclavc/"&gt;SClavc&lt;/a&gt;と&lt;a href="http://code.google.com/p/yatta-ivtc/"&gt;SCXvid&lt;/a&gt;というものがあります。&lt;br /&gt;オリジナルのSClavcはx264のペンギン様ことLoren Merritt氏作、SCXvidの作者は#darkholdのいかつい人、MyrsloikことFredrik Mellbin氏であります。(以前一度、JEEB氏に写真を見せてもらったことがあるのですが、Myrsloik氏はやたら人相の怖い太っちょでした。一方、一緒に写ってたTheFluff氏は小柄で柔和そうな感じで、普段の言動から受ける印象とあまりにも違いすぎるので、思わず大笑いしたものです)&lt;br /&gt;&lt;br /&gt;で、これらが何のためにあるかというと、要するにffmpegやXvidの2pass用のログを利用して、クリップ内のシーンチェンジの場所とかを割り出して色々利用しようというものらしい。&lt;br /&gt;なんで「らしい」かといえば、使い方がよくわからないから。&lt;br /&gt;とりあえずavs書いてVirtualDubに食わせて"Run Video Analysis pass"を走らせるなりすれば、2pass用のlogファイルが作られるわけですが、そこから先がどうしたものやら…。&lt;br /&gt;&lt;a href="http://www.avisynth.info/?%A4%BD%A4%CE%C2%BE%A4%CE%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3#da97b8e0"&gt;AviSynth.info&lt;/a&gt;によれば、「元々は、Yattaにおいて、libavcodecのシーンチェンジ・メトリクスの利用を可能するために書かれた。」とありますが、Yattaってねぇ…あれの使い方がわかる日本人なんているのかしら？&lt;br /&gt;7月ごろにJEEB氏に「#yattaでmenter氏が初心者講習会を開くので来ないか？」と誘われたのでROMってみましたが、何をしゃべってるのかさっぱりわかりませんでした。(そもそも知りたかったのは理論やテクニックではなく、操作方法そのものなのですが、そこらへんはやってくれなかったし…orz)&lt;br /&gt;&lt;br /&gt;まあ、Yattaの使い方は今もさっぱりわかりませんが、2pass用logからシーンチェンジ検出というのは理解できます。&lt;br /&gt;そこでふと思ったことが「それならx264のlogファイル使ったほうがよくね？　lavcのmpeg4やXvidよりもlog出力速いじゃん」。&lt;br /&gt;で、こんなのを書いてみた。&lt;br /&gt;&lt;pre name="code" class="python"&gt;#SCx264 to bookmarks.py&lt;br /&gt;frames = avsp.GetVideoFramecount()&lt;br /&gt;logfilename = avsp.GetFilename(title='Select x264_logfile')&lt;br /&gt;&lt;br /&gt;if logfilename:&lt;br /&gt;    logfile = open(logfilename)&lt;br /&gt;    logs = logfile.readlines()&lt;br /&gt;    logfile.close()&lt;br /&gt;    if len(logs) == frames + 1:&lt;br /&gt;        bookmarks = []&lt;br /&gt;        for logline in logs:&lt;br /&gt;            log = logline.split(' ')&lt;br /&gt;            if log[2] == 'type:I':&lt;br /&gt;                bmpoint = int(log[0].lstrip('in:'))&lt;br /&gt;                bookmarks.append(bmpoint)&lt;br /&gt;        avsp.SetBookmark(bookmarks)&lt;br /&gt;    else:&lt;br /&gt;        avsp.MsgBox('This log is not corresponding to the number of frames of current clip.',title='Warning')&lt;/pre&gt;&lt;br /&gt;あらかじめx264.exeで --pass 1 をつけてエンコしたlogから、IDRフレームと判定されたフレームにブックマークを自動で打つマクロである。(またブックマークか…)&lt;br /&gt;とりあえずシーンチェンジを検出して、ちゃんとIDRと判定されるようなオプションにしていれば、ほぼ100%検出できるはずである。&lt;br /&gt;&lt;br /&gt;さて、ただlog読んでブックマーク打つだけでは面白くないので、さらに発展させてみる。&lt;br /&gt;&lt;pre name="code" class="python"&gt;#SCx264 to bookmarks AUTO.py&lt;br /&gt;import os&lt;br /&gt;avsname = avsp.SaveScript()&lt;br /&gt;#使用するx264.exeを毎回指定したい場合はこちら&lt;br /&gt;#exe = avsp.GetFilename(title = 'Specify x264.exe used.')&lt;br /&gt;#x264.exeのパスを固定したい場合は、こちらにフルパスで書いておく&lt;br /&gt;exe = r'G:\Enctools\x264_x86.exe'&lt;br /&gt;&lt;br /&gt;if avsname and exe:&lt;br /&gt;    x264opt = '--preset ultrafast --crf 30 -p 1 -I infinite -i 1'&lt;br /&gt;    thresh = '--scenecut 50'&lt;br /&gt;    logfilename = avsname + '.sc_log'&lt;br /&gt;    os.system('%s %s %s %s --stats %s -o nul' % (exe, avsname, x264opt, thresh, logfilename))&lt;br /&gt;&lt;br /&gt;    logfile = open(logfilename)&lt;br /&gt;    logs = logfile.readlines()&lt;br /&gt;    logfile.close()&lt;br /&gt;    bookmarks = []&lt;br /&gt;    for logline in logs:&lt;br /&gt;        log = logline.split(' ')&lt;br /&gt;        if log[2] == 'type:I':&lt;br /&gt;            bmpoint = int(log[0].lstrip('in:'))&lt;br /&gt;            bookmarks.append(bmpoint)&lt;br /&gt;    avsp.SetBookmark(bookmarks)&lt;/pre&gt;&lt;br /&gt;log出力も一緒にやるようにしてみた。&lt;br /&gt;&lt;br /&gt;ううむ、これをどう使えばいいのだろうか？&lt;br /&gt;&lt;br /&gt;例えばMPEG2Source("hogehoge.d2v")だけのavsの状態でこれを実行するとCMカットは楽になる。&lt;br /&gt;なぜって、ただブックマーク移動していくだけで本編とCMの切れ目を確実にシークできるから。&lt;br /&gt;AvsP初期装備のTrimEditorと併用すれば、ほとんどストレスなくCMカットできるはず(ただし、TrimEditorでTrimを実行する際は、ブックマークをすべてクリアしてからにすること。これを忘れるとプレビューの更新で随分時間を食うことになります)。&lt;br /&gt;x264は--preset ultrafastならものすごく高速です。自分のそろそろ時代遅れなQ9450でも、1440x1080&lt;br /&gt;のMPEG2-TSを90fps～100fpsで処理します。つーかMPEG2Sourceがボトルネックになっているので、本当はもっと速いです。2本同時にlog出力したりするといいかもしれません。&lt;br /&gt;&lt;br /&gt;なお、「30分のTSだとlog出力だけで10分かかるじゃねえか、それだけあればCMカットなんか終わってるよ」とかいう意見は無視します…orz&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-3499952018429969384?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/3499952018429969384/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/10/scx264-to-bookmarks-for-avsp.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/3499952018429969384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/3499952018429969384'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/10/scx264-to-bookmarks-for-avsp.html' title='SCx264 to Bookmarks for AvsP'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-8695921654792369608</id><published>2010-10-15T15:42:00.006+09:00</published><updated>2011-06-14T07:18:58.598+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='AvsP'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>分割結合マクロ for AvsP</title><content type='html'>前回のTrimEditorは、いざ使ってみるとメリットはそれほどなかったような気もするけど、まあ、マクロの練習にはなった。&lt;br /&gt;さて、今回もBookmarkを使ったマクロを書いてみる。&lt;br /&gt;&lt;pre name="code" class="python"&gt;#Divide and Concatenate.py&lt;br /&gt;bookmarks=avsp.GetBookmarkList()&lt;br /&gt;if bookmarks:&lt;br /&gt;    bookmarks.sort()&lt;br /&gt;    start, trim, cat = 0, "", "\n"&lt;br /&gt;    for i in xrange(len(bookmarks)):&lt;br /&gt;        trim += "\nV%02i = last.Trim(%i, %i)" % (i, start, bookmarks[i] - 1)&lt;br /&gt;        cat += "V%02i ++ " % i&lt;br /&gt;        start = bookmarks[i]&lt;br /&gt;    i += 1&lt;br /&gt;    trim += "\nV%02i = last.Trim(%i, 0)" % (i, start) &lt;br /&gt;    cat += "V%02i\n" % i&lt;br /&gt;    avsp.InsertText(trim + cat, pos=None, index=None)&lt;br /&gt;&lt;/pre&gt;例えば&lt;br /&gt;&lt;pre name="code" class="python"&gt;AVISource("hoge.avi")&lt;br /&gt;AudioDub(Last, WAVSource("hoge.wav"))&lt;/pre&gt;なんていうavsがあったとして、1234,5678,9012フレームにブックマークを打ってからこのマクロを実行すると&lt;pre name="code" class="python"&gt;AVISource("hoge.avi")&lt;br /&gt;V01 = Last.Trim(0, 1233)&lt;br /&gt;V02 = Last.Trim(1234, 5677)&lt;br /&gt;V03 = Last.Trim(5678, 9011)&lt;br /&gt;V04 = Last.Trim(9012, 0)&lt;br /&gt;V01 + V02 + V03 + V04&lt;br /&gt;AudioDub(Last, WAVSource("hoge.wav"))&lt;/pre&gt;というように、いったんブックマークの位置で分割して、最後に結合するスクリプトが挿入される(挿入位置はカーソルの位置)。&lt;br /&gt;なににこんなものを使うかといえば、&lt;br /&gt;&lt;pre name="code" class="python"&gt;AVISource("hoge.avi")&lt;br /&gt;V01 = Last.Trim(0, 999).Sharpen(1.0)&lt;br /&gt;V02 = Last.Trim(1000, 1999).Blur(1.0)&lt;br /&gt;V03 = Last.Trim(2000, 2999).FlipVertical()&lt;br /&gt;V04 = Last.Trim(3000, 0).FlipHorizontal()&lt;br /&gt;V01 + V02 + V03 + V04&lt;br /&gt;AudioDub(Last, WAVSource("hoge.wav"))&lt;/pre&gt;てな感じでFilterRangeのかわりにするとか、はたまたEasyVFRとか使う人には便利かもしれない。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-8695921654792369608?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/8695921654792369608/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/10/for-avsp.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8695921654792369608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8695921654792369608'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/10/for-avsp.html' title='分割結合マクロ for AvsP'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-4622268576152188758</id><published>2010-10-13T20:26:00.009+09:00</published><updated>2011-06-14T07:18:58.599+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><category scheme='http://www.blogger.com/atom/ns#' term='AvsP'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>俺様TrimEditor for AvsP</title><content type='html'>スクリプトなんて簡単なBash scriptとAviSynth scriptしか書けない私ですが、最近はほんの少しだけPythonをいじるようになりました。&lt;br /&gt;なんでPythonかといえば、&lt;a href="http://avisynth.org/qwerpoi/"&gt;AvsP&lt;/a&gt;(AviSynth script editor)がPythonで書かれていて、マクロもPythonで書かないといけないから。&lt;br /&gt;&lt;br /&gt;さて、本日のお題はTrimEditor。&lt;br /&gt;AvsPには始めからTrimEditorが付いていますが、これが自分にはどうも使いにくい。&lt;br /&gt;まずHomeを押すと出現するダイアログがウザい。&lt;br /&gt;&lt;strike&gt;ある範囲を選択(削除)するごとにTrim(a,b)を1行挿入するので、Trimし終わったころには、それだけで7,8行のスクリプトになってしまうのもウザい。&lt;/strike&gt;&lt;br /&gt;というわけで、自分用のTrimEditorをでっち上げます。&lt;br /&gt;&lt;pre name="code" class="python"&gt;#Bookmarks to TrimLine.py&lt;br /&gt;bookmarks = avsp.GetBookmarkList()&lt;br /&gt;num = len(bookmarks)&lt;br /&gt;if num % 2 == 0 and num:&lt;br /&gt;    bookmarks.sort()&lt;br /&gt;    text = ''&lt;br /&gt;    for i in range(0, num, 2):&lt;br /&gt;        trimrange = bookmarks[i:i+2]&lt;br /&gt;        cattext = '++Trim( %i, %i)' % (trimrange[0], trimrange[1])&lt;br /&gt;        text += cattext&lt;br /&gt;    avsp.InsertText(text.lstrip('++') + '\n', pos=None, index=None)&lt;br /&gt;else:&lt;br /&gt;    avsp.MsgBox('The number of bookmarks is odd (or zero).', title='Warning')&lt;br /&gt;&lt;/Pre&gt;使い方：&lt;br /&gt;ブックマーク(Ctrl+B)を適当にガンガン打って、マクロ実行。&lt;br /&gt;2つのブックマークにはさまれた部位を残すスクリプトが、カーソル位置に1行で挿入されます。 &lt;blockquote&gt;例)ブックマークを1000,2000,3000,4000,5000,6000フレームに打って実行したら Trim(1000,2000)++Trim(3000,4000)++Trim(5000,6000) となる&lt;/blockquote&gt;なお、10行目のpos=Noneをpos=-1に書き換えると、スクリプトの最後に挿入位置が変更されます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-4622268576152188758?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/4622268576152188758/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/10/trimeditor-for-avsp.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4622268576152188758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4622268576152188758'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/10/trimeditor-for-avsp.html' title='俺様TrimEditor for AvsP'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-6639141551705693084</id><published>2010-10-03T06:44:00.004+09:00</published><updated>2010-10-17T06:50:33.489+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='身の回り'/><title type='text'>regression test</title><content type='html'>#ffmpeg-develでDark Shikari氏のregression test用スクリプトを見つけた。&lt;br /&gt;&lt;pre name="code" class="python"&gt;#!/bin/sh&lt;br /&gt;vid=videos/foreman_cif.y4m&lt;br /&gt;for tune in film zerolatency&lt;br /&gt;do for m in "--intra-refresh" ""&lt;br /&gt;  do for j in "" "--no-cabac"&lt;br /&gt;    do for i in "--keyint 250 --slice-max-size 1000" "--no-weightb --interlaced"&lt;br /&gt;      do for p in ultrafast superfast veryfast faster fast medium slow slower&lt;br /&gt;        do ./x264 $vid --quiet --preset $p --tune $tune $i $j $m -o test.h264 --dump-yuv test.yuv&lt;br /&gt;           ~/x264/JM/bin/ldecod.exe -i test.h264 &amp;gt; /dev/null&lt;br /&gt;           cmp test.yuv test_dec.yuv&lt;br /&gt;        done&lt;br /&gt;      done&lt;br /&gt;    done&lt;br /&gt;  done&lt;br /&gt;done&lt;br /&gt;&lt;/pre&gt;えーと、2x2x2x2x8=128パターンか。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-6639141551705693084?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/6639141551705693084/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/10/regression-test.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6639141551705693084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6639141551705693084'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/10/regression-test.html' title='regression test'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-2608163925613236959</id><published>2010-09-27T00:14:00.002+09:00</published><updated>2010-10-17T06:48:30.059+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ビルド'/><title type='text'>JMェ</title><content type='html'>そーいえば、Ubuntuには&lt;a href="http://iphome.hhi.de/suehring/tml/"&gt;JM reference&lt;/a&gt;入れてなかったなー、と思い出し、ビルドすることにした。&lt;br /&gt;&lt;br /&gt;wget http://iphome.hhi.de/suehring/tml/download/jm17.2.zip&lt;br /&gt;unzip ./jm17.2.zip&lt;br /&gt;cd ./JM&lt;br /&gt;chmod +x ./unixprep.sh &amp;amp;&amp;amp; ./uniexprep.sh&lt;br /&gt;make&lt;br /&gt;&lt;br /&gt;/JM/binにldecod.exeとlencod.exeの出来上がり！…って、.exe？&lt;br /&gt;&lt;br /&gt;どうやらJMの中の人たちにとって、UNIXとはCygwinのことらしいです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-2608163925613236959?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/2608163925613236959/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/09/jm.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/2608163925613236959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/2608163925613236959'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/09/jm.html' title='JMェ'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-6899681181629237253</id><published>2010-09-20T14:24:00.003+09:00</published><updated>2010-10-17T06:49:51.542+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='身の回り'/><title type='text'>Spamming Dutchman</title><content type='html'>&lt;a href="http://x264.nl/"&gt;x264.nl&lt;/a&gt;が配布しているx264.exe(for 32bit Windows)のr1722でmp4出力が出来なかった件について。&lt;br /&gt;&lt;br /&gt;#L-SMASH@freenodeにて&lt;br /&gt;2010年9月18日&lt;br /&gt;00:15 (golgol7777) seems GPAC guys commited the patch today.&lt;br /&gt;00:16 (jarod) what patch?&lt;br /&gt;00:16 (jarod) something good?&lt;br /&gt;00:17 (golgol7777) this patch@r2043 &lt;a href="https://sourceforge.net/tracker/?func=detail&amp;aid=3058368&amp;group_id=84101&amp;atid=571738"&gt;https://sourceforge.net/tracker/?func=detail&amp;aid=3058368&amp;group_id=84101&amp;atid=571738&lt;/a&gt;&lt;br /&gt;00:18 (golgol7777) but mingw build is still broken...&lt;br /&gt;00:21 (Chikuzen) jarod: GPAC broke completely as it is impossible to compile with mingw after all.&lt;br /&gt;00:21 (Chikuzen) you cannot update GPAC any longer. &lt;br /&gt;00:22 (jarod) ah ok, well thats their problem then&lt;br /&gt;00:22 (jarod) my script will keep using latest working libs it has&lt;br /&gt;00:23 (jarod) and when x264 no longer thinks it should use gpac, we shall move along&lt;br /&gt;&lt;br /&gt;2010年9月19日&lt;br /&gt;20:55 (Chikuzen) jarod: &lt;a href="https://sourceforge.net/projects/gpac/forums/forum/287547/topic/3857579"&gt;https://sourceforge.net/projects/gpac/forums/forum/287547/topic/3857579&lt;/a&gt;&lt;br /&gt;23:01 (jarod) Chikuzen&lt;br /&gt;23:01 (jarod) - gpac revision 2053 done&lt;br /&gt;23:02 (jarod) but i heard its making x264 buggy&lt;br /&gt;23:02 (jarod) with .mp4 output&lt;br /&gt;23:03 (Chikuzen) indeed&lt;br /&gt;23:04 (jarod) but it does compile (and create the lib)&lt;br /&gt;23:07 (Chikuzen) realy? I challenged and got failed for about three hours ago.&lt;br /&gt;23:10 (Chikuzen) if you are good in build at r2053 , then use it&lt;br /&gt;23:10 (Chikuzen) r2053 has finished the bug fix&lt;br /&gt;23:11 (Chikuzen) r2053 includes wewk's patch&lt;br /&gt;23:34 (jarod) but cruncher reports x264 failing with .mp4 output&lt;br /&gt;23:44 (Chikuzen) x264_x86_r1722_nl.exe --help&lt;br /&gt;23:45 (Chikuzen)  .mp4 -&gt; MP4 if compiled with GPAC support (no)&lt;br /&gt;23:46 (Chikuzen) your binary has not linked libgpac_static.a&lt;br /&gt;23:47 (jarod) lol ok&lt;br /&gt;23:47 (jarod) that explains&lt;br /&gt;23:50 (jarod) but then x264 fails to link but continues compiling&lt;br /&gt;23:50 (jarod) lemme test&lt;br /&gt;23:52 (jarod) Warning: gpac is too old, update to 2007-06-21 UTC or later&lt;br /&gt;23:52 (jarod) gpac: no&lt;br /&gt;23:52 (jarod) hihi&lt;br /&gt;01:05 (jarod) ok&lt;br /&gt;01:05 (jarod) gpac 2039 is now being used&lt;br /&gt;01:05 (jarod) better something then nothing :)&lt;br /&gt;&lt;br /&gt;「GPACの更新はしないように」って、ちゃんと釘を刺しといたんだけど…orz&lt;br /&gt;golgol氏曰く「 libgpac_static.a は ar で固めてるだけなんだから、例えビルドに失敗してても.aが生成されるのは当たり前」だそうである。&lt;br /&gt;&lt;br /&gt;jarod氏がGPAC公式のsvnを使わずgolgol氏のgitレポを使えばすべては解決する。&lt;br /&gt;golgol氏のレポは色々なバグフィックスが行われていて、最新のmingwでも問題なくビルドできるようになっているから。&lt;br /&gt;しかし、このオランダ人はとにかくplainビルドにこだわり、自分が配布するバイナリには絶対にパッチをあてたりしないのである。&lt;br /&gt;確かにx264自体はplainにこだわる必要があるだろう。彼のバイナリはx264のバグ検出用という重要な側面がある。&lt;br /&gt;でも、バグがあるにもかかわらず半ば放置状態のGPACまでplainにこだわる必要はあるんかいな？&lt;br /&gt;&lt;br /&gt;ちなみに、こんな人がビルドしてるx264.nlのバイナリですが、信頼性は(基本的には)高いです。&lt;br /&gt;なんせ周りにいる人たち(主にkemuri_9氏)が面倒見てますから。&lt;br /&gt;どこのビルドのx264を使えばいいのかわからない人は、x264.nlのバイナリを使ってください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-6899681181629237253?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/6899681181629237253/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/09/spamming-dutchman.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6899681181629237253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6899681181629237253'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/09/spamming-dutchman.html' title='Spamming Dutchman'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-5951578555895236361</id><published>2010-09-10T15:27:00.002+09:00</published><updated>2011-12-10T12:55:49.186+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='身の回り'/><title type='text'>ふわふわさん</title><content type='html'>某月某日某所にて&lt;br /&gt;19:23 (Chikuzen) "Reminder: only 152 days left"ってなんのことだろうと思ったら&lt;br /&gt;19:23 (JEEB) wwww&lt;br /&gt;19:24 (Chikuzen) 「空の境界」のBD発売までのカウントダウンかよ&lt;br /&gt;19:24 (JEEB) TheFluff氏が予約したしねぇｗ&lt;br /&gt;19:26 (TheFluff) kara no kyoukai is important ok&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mod16.org/hurfdurf/"&gt;Anime makes you stupid&lt;/a&gt;ってのは、自分のことなのだな…&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-5951578555895236361?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/5951578555895236361/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/09/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/5951578555895236361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/5951578555895236361'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/09/blog-post.html' title='ふわふわさん'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-1580054674840865493</id><published>2010-09-07T08:10:00.021+09:00</published><updated>2011-04-29T12:04:04.606+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ビルド'/><title type='text'>x264_L-SMASHのビルド</title><content type='html'>以前書いた&lt;a href="http://csbarn.blogspot.com/2010/02/blog-post.html"&gt;lavf/ffmsつきx264のビルドに関する記事&lt;/a&gt;を数ヶ月ぶりに読み返してみた。&lt;br /&gt;なんというか冷や汗ものである。&lt;br /&gt;このまま放置しておくのは色々危険そうな気がするので、もう一度書いておく。&lt;br /&gt;でも、普通のx264では面白くないので、今回は現在開発進行中のx264_L-SMASHのビルドにする。&lt;br /&gt;&lt;br /&gt;用意するもの&lt;br /&gt;autoconf/libtoolが使えるmsys環境、mingw、pkg-config、wget、subversion、msysgit、nasm、yasm、&lt;strike&gt;pthread-w32&lt;/strike&gt;、zlib、bzip2&lt;br /&gt;あきれるほどマメなMPC-HC開発者XhmikosR氏が&lt;a href="http://xhmikosr.1f0.de/index.php?folder=dG9vbHM="&gt;こちら&lt;/a&gt;で配布しているセットを使えば、msysgit以外すべて揃っているのでとても楽である。 （説明の手間が省けるので)&lt;br /&gt;あとは自分の環境に合わせて/etc/fstabと/etc/profileをいじり、別にインストールしたmsysgitのgit.exeにPATHを通すなりすればよい。&lt;br /&gt;&lt;br /&gt;1.x264_L-SMASH_clone.sh&lt;br /&gt;x264_L-SMASHは&lt;a href="http://github.com/silverfilain/x264_L-SMASH"&gt;こちら&lt;/a&gt;で公開されているが、そのままgit cloneすると、バイナリのバージョン表記がおかしくなるので、&lt;a href="http://www.up-cat.net/L%252DSMASH.html"&gt;ここ&lt;/a&gt;にあるx264_L-SMASH_clone.shを使ってcloneする。&lt;br /&gt;DLしたら、この.shを＄HOMEに置いておくこと。&lt;br /&gt;もしくは&lt;br /&gt;wget http://up-cat.net/wiki.cgi?action=ATTACH&amp;amp;page=L-SMASH&amp;amp;file=x264_L-SMASH_clone.sh -O ＄HOME/x264_L-SMASH_clone.sh&lt;br /&gt;を、スクリプトに追加する。&lt;br /&gt;&lt;br /&gt;2.ビルド&lt;br /&gt;あとは以下のスクリプトを実行すればおしまい。現状で使用できるaudio用codecを全部リンクしたx264.exeが出来る。&lt;br /&gt;変数の内容は各自で自分の環境にあわせていじるように。&lt;br /&gt;QuickTime SDKをインストールしていない場合や、libfaacをリンクさせたくない場合は、適当にコメントアウトすること。&lt;br /&gt;&lt;pre class="python" name="code"&gt;#!/bin/sh&lt;br /&gt;#Preparation&lt;br /&gt;WORK=$HOME/LSMASH&lt;br /&gt;PREF32=/mingw/i686-pc-mingw32&lt;br /&gt;PREF64=/mingw/x86_64-w64-mingw32&lt;br /&gt;HOST64=x86_64-w64-mingw32&lt;br /&gt;CROSS64=x86_64-w64-mingw32-&lt;br /&gt;QTSDK=/g/quicktime_sdk&lt;br /&gt;&lt;br /&gt;cp /bin/pkg-config.exe /bin/${CROSS64}-pkg-config.exe&lt;br /&gt;&lt;br /&gt;mkdir $WORK/src&lt;br /&gt;&lt;br /&gt;#download src&lt;br /&gt;cd $WORK/src&lt;br /&gt;wget\&lt;br /&gt;    http://downloads.sourceforge.net/project/lame/lame/3.98.4/lame-3.98.4.tar.gz\&lt;br /&gt;    http://downloads.sourceforge.net/faac/faac-1.28.tar.bz2\&lt;br /&gt;    http://downloads.sourceforge.net/project/opencore-amr/opencore-amr/0.1.2/opencore-amr-0.1.2.tar.gz&lt;br /&gt;git clone git://github.com/mstorsjo/vo-aacenc.git&lt;br /&gt;git clone git://github.com/mstorsjo/vo-amrwbenc.git&lt;br /&gt;git clone git://git.libav.org/libav.git libav&lt;br /&gt;svn co http://ffmpegsource.googlecode.com/svn/trunk/ ffms&lt;br /&gt;$HOME/x264_L-SMASH_clone.sh&lt;br /&gt;cp -r . $WORK/x86&lt;br /&gt;cp -r . $WORK/x64&lt;br /&gt;&lt;br /&gt;#32bit&lt;br /&gt;cd $WORK/x86&lt;br /&gt;for i in ./*.gz ; do tar zxvf $i ;done&lt;br /&gt;for i in ./*.bz2 ; do tar jxvf $i ; done&lt;br /&gt;rm ./*.gz ./*.bz2&lt;br /&gt;&lt;br /&gt;cd ./lame*&lt;br /&gt;./configure\&lt;br /&gt;    --prefix=$PREF32\&lt;br /&gt;    --disable-shared\&lt;br /&gt;    --enable-nasm&lt;br /&gt;make clean &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install-strip&lt;br /&gt;&lt;br /&gt;cd ../faac*&lt;br /&gt;./configure\&lt;br /&gt;    --prefix=$PREF32\&lt;br /&gt;    --disable-shared\&lt;br /&gt;    --without-mp4v2&lt;br /&gt;make clean &amp;amp;% make &amp;amp;&amp;amp; make install-strip&lt;br /&gt;&lt;br /&gt;cd ../opencore*&lt;br /&gt;./configure\&lt;br /&gt;    --prefix=$PREF32\&lt;br /&gt;    --disable-shared&lt;br /&gt;make clean &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install-strip&lt;br /&gt;&lt;br /&gt;cd ../vo-aacenc&lt;br /&gt;autoreconf&lt;br /&gt;./configure\&lt;br /&gt;    --prefix=$PREF32\&lt;br /&gt;    --disable-shared&lt;br /&gt;make clean &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install-strip&lt;br /&gt;&lt;br /&gt;cd ../vo-amrwbenc&lt;br /&gt;autoreconf&lt;br /&gt;./configure\&lt;br /&gt;    --prefix=$PREF32\&lt;br /&gt;    --disable-shared&lt;br /&gt;make clean &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install-strip&lt;br /&gt;&lt;br /&gt;cd ../libav&lt;br /&gt;./configure\&lt;br /&gt;    --prefix=$PREF32\&lt;br /&gt;    --cpu=i686\&lt;br /&gt;    --disable-doc\&lt;br /&gt;    --disable-ffprobe\&lt;br /&gt;    --enable-gpl\&lt;br /&gt;    --enable-version3\&lt;br /&gt;    --enable-postproc\&lt;br /&gt;    --disable-network\&lt;br /&gt;    --enable-w32threads\&lt;br /&gt;    --enable-runtime-cpudetect\&lt;br /&gt;    --enable-memalign-hack\&lt;br /&gt;    --enable-libopencore-amrnb\&lt;br /&gt;    --enable-libopencore-amrwb\&lt;br /&gt;    --enable-libvo-aacenc\&lt;br /&gt;    --enable-libvo-amrwbenc\&lt;br /&gt;    --disable-encoders\&lt;br /&gt;    --enable-encoder=aac,ac3,alac,vorbis,libopencore_amrnb,libvo_aacenc,libvo_amrwbenc\&lt;br /&gt;    --disable-muxers\&lt;br /&gt;    --disable-hwaccels\&lt;br /&gt;    --disable-devices\&lt;br /&gt;    --disable-protocols\&lt;br /&gt;    --enable-protocol=concat,file,pipe,md5\&lt;br /&gt;    --disable-debug\&lt;br /&gt;    --extra-cflags=-fno-strict-aliasing&lt;br /&gt;make clean &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install&lt;br /&gt;&lt;br /&gt;cd ../ffms&lt;br /&gt;PKG_CONFIG_PATH=${PREF32}/lib/pkgconfig/ \&lt;br /&gt;./configure\&lt;br /&gt;    --prefix=$PREF32&lt;br /&gt;make clean &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install-strip&lt;br /&gt;&lt;br /&gt;cd ../x264_L-SMASH&lt;br /&gt;PKG_CONFIG_PATH=${PREF32}/lib/pkgconfig/ \&lt;br /&gt;./configure\&lt;br /&gt;    --qtsdk=$QTSDK\&lt;br /&gt;    --enable-win32thread\&lt;br /&gt;    --enable-nonfree&lt;br /&gt;make clean &amp;amp;&amp;amp; make&lt;br /&gt;cp ./x264.exe /usr/local/bin/x264ls_x86_\&lt;br /&gt;`x264 --version|grep "x264"|awk '{print $2}'|awk -F . '{print $3}'`.exe&lt;br /&gt;&lt;br /&gt;#64bit&lt;br /&gt;cd $WORK/x64&lt;br /&gt;for i in ./*.gz ; do tar zxvf $i ;done&lt;br /&gt;for i in ./*.bz2 ; do tar jxvf $i ; done&lt;br /&gt;rm ./*.gz ./*.bz2&lt;br /&gt;&lt;br /&gt;cd ./lame*&lt;br /&gt;./configure\&lt;br /&gt;    --host=$HOST64\&lt;br /&gt;    --prefix=$PREF64\&lt;br /&gt;    --disable-shared\&lt;br /&gt;    --enable-nasm&lt;br /&gt;make clean &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install-strip&lt;br /&gt;&lt;br /&gt;cd ../faac*&lt;br /&gt;./configure\&lt;br /&gt;    --host=$HOST64\&lt;br /&gt;    --prefix=$PREF64\&lt;br /&gt;    --disable-shared\&lt;br /&gt;    --without-mp4v2&lt;br /&gt;make clean &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install-strip&lt;br /&gt;&lt;br /&gt;cd ../opencore*&lt;br /&gt;./configure\&lt;br /&gt;    --host=$HOST64\&lt;br /&gt;    --prefix=$PREF64\&lt;br /&gt;    --disable-shared&lt;br /&gt;make clean &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install-strip&lt;br /&gt;&lt;br /&gt;cd ../vo-aacenc&lt;br /&gt;autoreconf&lt;br /&gt;./configure\&lt;br /&gt;    --host=$HOST64\&lt;br /&gt;    --prefix=$PREF64\&lt;br /&gt;    --disable-shared&lt;br /&gt;make clean &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install-strip&lt;br /&gt;&lt;br /&gt;cd ../vo-amrwbenc&lt;br /&gt;autoreconf&lt;br /&gt;./configure\&lt;br /&gt;    --host=$HOST64\&lt;br /&gt;    --prefix=$PREF64\&lt;br /&gt;    --disable-shared&lt;br /&gt;make clean &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install-strip&lt;br /&gt;&lt;br /&gt;cd ../libav&lt;br /&gt;./configure\&lt;br /&gt;    --prefix=$PREF64\&lt;br /&gt;    --target-os=mingw32\&lt;br /&gt;    --cross-prefix=$CROSS64\&lt;br /&gt;    --cpu=x86_64\&lt;br /&gt;    --arch=x86_64\&lt;br /&gt;    --disable-doc\&lt;br /&gt;    --disable-ffprobe\&lt;br /&gt;    --enable-gpl\&lt;br /&gt;    --enable-version3\&lt;br /&gt;    --enable-postproc\&lt;br /&gt;    --disable-network\&lt;br /&gt;    --enable-w32threads\&lt;br /&gt;    --enable-runtime-cpudetect\&lt;br /&gt;    --enable-memalign-hack\&lt;br /&gt;    --enable-libopencore-amrnb\&lt;br /&gt;    --enable-libopencore-amrwb\&lt;br /&gt;    --enable-libvo-aacenc\&lt;br /&gt;    --enable-libvo-amrwbenc\&lt;br /&gt;    --disable-encoders\&lt;br /&gt;    --enable-encoder=aac,ac3,alac,vorbis,libopencore_amrnb,libvo_aacenc,libvo_amrwbenc\&lt;br /&gt;    --disable-muxers\&lt;br /&gt;    --disable-hwaccels\&lt;br /&gt;    --disable-devices\&lt;br /&gt;    --disable-protocols\&lt;br /&gt;    --enable-protocol=concat,file,pipe,md5\&lt;br /&gt;    --disable-debug\&lt;br /&gt;    --extra-cflags=-fno-strict-aliasing&lt;br /&gt;make clean &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install&lt;br /&gt;&lt;br /&gt;cd ../ffms&lt;br /&gt;PKG_CONFIG_PATH=${PREF64}/lib/pkgconfig/ \&lt;br /&gt;./configure\&lt;br /&gt;    --host=$HOST64\&lt;br /&gt;    --prefix=$PREF64&lt;br /&gt;make clean &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install-strip&lt;br /&gt;&lt;br /&gt;cd ../x264_L-SMASH&lt;br /&gt;PKG_CONFIG_PATH=${PREF64}/lib/pkgconfig/ \&lt;br /&gt;./configure\&lt;br /&gt;    --host=$HOST64\&lt;br /&gt;    --cross-prefix=$CROSS64\&lt;br /&gt;    --enable-win32thread\&lt;br /&gt;    --enable-nonfree&lt;br /&gt;make clean &amp;amp;&amp;amp; make&lt;br /&gt;cp ./x264.exe /usr/local/bin/x264ls_x64_\&lt;br /&gt;`x264 --version|grep "x264"|awk '{print $2}'|awk -F . '{print $3}'`.exe&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-1580054674840865493?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/1580054674840865493/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/09/x264l-smash.html#comment-form' title='4 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1580054674840865493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1580054674840865493'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/09/x264l-smash.html' title='x264_L-SMASHのビルド'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-3825026997913993206</id><published>2010-09-07T01:36:00.005+09:00</published><updated>2011-07-04T08:16:42.956+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='身の回り'/><title type='text'>L-SMASH</title><content type='html'>最近、x264のビルダーやってる人たちの多くが採用しているパッチにmp4muxer.diffなるものがある。&lt;br /&gt;このパッチ、オリジナルはVFR_maniac氏によるもので、内容はlibgpacなしでもx264でmp4出力出来る様にするというものであるが、実はそれだけではなく他にも色々と追加機能(音声やchapterのmuxとか)が盛り込まれていたりする。&lt;br /&gt;色々と盛りだくさんなので、たしかに使わないよりは使ったほうがいいかもしれないが、ときどき不思議に思うのである。&lt;br /&gt;「みんなよくこんなわけのわからんものを平気でホイホイ使うよなぁ…しかも自分で使うだけではなく他人にまで配布するなんて」&lt;br /&gt;自分の知る限りでは、このパッチの内容(なにが出来るかとか）を把握できているビルダーは、VFR_maniac氏本人を除けば、あとは&lt;a href="http://vfrmaniac.fushizen.eu/henry/"&gt;Henry氏&lt;/a&gt;と&lt;a href="http://blog.livedoor.jp/wipple/"&gt;wipple氏&lt;/a&gt;しかいない。&lt;a href="http://x264.fushizen.eu/"&gt;JEEB氏&lt;/a&gt;も知っているだろうと思う人もいるかもしれないが、彼は基本的にmkv大好きな人なので、これに関しては先の2名ほど熱心ではないと思う。彼らは全てL-SMASH projectのメンバーではあるが、そこにはやはり、それなりの温度差というものが存在するのではなかろうか。&lt;br /&gt;&lt;br /&gt;それにしても、注目されているのかいないのかよくわからないプロジェクトである。&lt;br /&gt;#x264における評判は悪くないんだけどフォーラムにもIRCチャンネルにも質問しに来る人間が一人もいない。&lt;br /&gt;やっぱりmkvではなくmp4だからかな？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-3825026997913993206?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/3825026997913993206/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/09/l-smash.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/3825026997913993206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/3825026997913993206'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/09/l-smash.html' title='L-SMASH'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-6554049491707120878</id><published>2010-09-02T13:34:00.000+09:00</published><updated>2010-09-02T13:34:12.665+09:00</updated><title type='text'>Ubuntu奮戦記　その７</title><content type='html'>長いことご無沙汰してました。&lt;br /&gt;もはや当時なんで苦労していたのかさっぱり覚えていません。&lt;br /&gt;たしかパッケージに関することだったと思うんだけど…なんだっけなぁ。&lt;br /&gt;checkinstallを使ってあれこれやってたはずなんだが。&lt;br /&gt;&lt;br /&gt;忘れてしまったものは仕方がないので、このテーマはこれで終了にします。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-6554049491707120878?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/6554049491707120878/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/09/ubuntu.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6554049491707120878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6554049491707120878'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/09/ubuntu.html' title='Ubuntu奮戦記　その７'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-474368542713402107</id><published>2010-05-02T15:49:00.002+09:00</published><updated>2010-05-04T12:14:12.972+09:00</updated><title type='text'>Ubuntu奮戦記　その６　wine+AviSynth(2)</title><content type='html'>しばらく書くのをサボっていたら、どこまで書いたのか忘れてしまった。&lt;br /&gt;えーと、再生環境と編集＆フィルタリングは済んだから、あとはエンコードか。&lt;br /&gt;&lt;br /&gt;Windows用のエンコーダーはx264もffmpegもmencoderもavs(AviSynth script file)に対応しているが、Linux用のバイナリは対応していない。&lt;br /&gt;たとえばwindowsなら&lt;br /&gt;x264 source.avs -o video.264&lt;br /&gt;とやればx264でエンコード出来るが、Linuxだとこれが通用しないわけだ。&lt;br /&gt;じゃあ、どうすれば良いかといえば方法は主に二つに分かれる&lt;br /&gt;&lt;br /&gt;1.wineを使ってWindows用エンコーダーを利用する。&lt;br /&gt;wineを使えばWindows用のx264もffmpegも普通に動く。&lt;br /&gt;たとえばWindows用のx264.exeを$HOME/.wine/drive_c/windows/system32に突っ込んでやれば、あとは&lt;br /&gt;wine x264.exe source.avs -o video.264&lt;br /&gt;で、エンコードできる。&lt;br /&gt;これがffmpegなら、音声もエンコードできる。&lt;br /&gt;wine ffmpeg.exe -i source.avs -vcodec ffv1 -acodec pcm_s16le movie.avi&lt;br /&gt;これで映像はFFV1、音声はPCMのaviになる。&lt;br /&gt;Windows用のx264は&lt;a href="http://x264.nl/"&gt;x264.nl&lt;/a&gt;で手に入る。&lt;br /&gt;ffmpegは&lt;a href="http://ffmpeg.arrozcru.org/autobuilds/"&gt;ramiro氏のAutomated Build&lt;/a&gt;、mencoderなら、&lt;a href="http://oss.netfarm.it/mplayer-win32.php"&gt;sherpya氏&lt;/a&gt;なり&lt;a href="http://kovensky.project357.com/"&gt;Kovensky氏&lt;/a&gt;なりのところにいけばいい。&lt;br /&gt;わざわざMinGWを入れてクロスコンパイルする必要もないし、非常に楽である。&lt;br /&gt;&lt;br /&gt;2.wineを使ってavsの内容を標準出力し、Linux用エンコーダーにパイプで渡す。&lt;br /&gt;いくらwineを使えばWindows用バイナリが動くといっても、やはりwine上ではいまいちエンコードは遅くなる。&lt;br /&gt;このためよく使われるのがこの手である。&lt;br /&gt;とりあえずwindows用バイナリにはavsの読み込みだけをさせて、他形式へのエンコードはLinux用バイナリを使うわけだ。&lt;br /&gt;この方法なら大して手間も変わらず、より高速にエンコードできる。&lt;br /&gt;この方法で使うWindows用バイナリは、wineで動いて、標準出力出来るものなら別にffmpegでもmplayerでもなんでも良いが、一番よく使われているのはavs2yuvだろう。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://akuvian.org/src/avisynth/avs2yuv/"&gt;avs2yuv&lt;/a&gt;はx264teamの総大将、pengvadoことLoren Merritt氏が、まだmplayerの開発を主にやってたころに作ったWindows用アプリケーションである。&lt;br /&gt;出来ることはavsを読み込み、raw yuv、y4m、そしてHuffyuvで圧縮したaviを出力することだけだが、出力は標準出力でも行えるのがポイントである。&lt;br /&gt;avs2yuv.exeを$HOME/.wine/drive_c/windows/system32にいれて&lt;br /&gt;wine avs2yuv.exe source.avs -o -|x264 - --demuxer y4m -o video.264&lt;br /&gt;とすれば、Linux用のx264でエンコードできる。&lt;br /&gt;avs2yuvは映像のみにしか対応していないので、音声に関しては&lt;a href="http://sourceforge.net/projects/wavi-avi2wav/"&gt;wavi&lt;/a&gt;かffmpegを使えばよい。&lt;br /&gt;wine wavi.exe source.avs -|neroAacEnc -q 0.5 -if - -of audio.mp4&lt;br /&gt;&lt;br /&gt;やはりLinux使うなら、エンコード用のバイナリはできるだけLinux用のものを使いたい。&lt;br /&gt;そうでなければ、始めからWindows使えばよいのである。&lt;br /&gt;というわけで、次回はLinux用バイナリのビルドのお話。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-474368542713402107?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/474368542713402107/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/05/ubuntuwineavisynth2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/474368542713402107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/474368542713402107'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/05/ubuntuwineavisynth2.html' title='Ubuntu奮戦記　その６　wine+AviSynth(2)'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-4769828507290365310</id><published>2010-04-04T17:31:00.001+09:00</published><updated>2010-04-04T19:05:24.213+09:00</updated><title type='text'>Ubuntu奮戦記 その5 wine+avisynth</title><content type='html'>さて、再生環境が整ったので、次はフィルタリングツールとエンコーダーである。&lt;br /&gt;&lt;br /&gt;フィルタは非常に簡単。&lt;br /&gt;&lt;a href="http://www.winehq.org/"&gt;wine&lt;/a&gt;+&lt;a href="http://avisynth.org/mediawiki/Main_Page"&gt;AviSynth&lt;/a&gt;で決まりだ。&lt;br /&gt;&lt;a href="https://launchpad.net/%7Eubuntu-wine/+archive/ppa"&gt;launchpadのwineのPPA&lt;/a&gt;を登録してインストールし、wineからAviSynthをインストールすればよい。&lt;br /&gt;&lt;br /&gt;そもそもLinuxネイティブなエンコードツール類にはまともに使えそうなモノがない。&lt;br /&gt;ffmpegやmplayerでもフィルタはかけられるが、品質や数に関しては正直今ひとつだし、だいたいプレビューなしでどうやってtrimしたり細かい調整したりすればいいというのか。&lt;br /&gt;え、Avidemux？　うーん…&lt;br /&gt;AvidemuxはWindowsでなら何度か使ったことがあるが、残念な印象しか持っていない。&lt;br /&gt;&lt;div style="color: #783f04;"&gt;残念その１：遅くて不安定&lt;/div&gt;gtk+であれQtであれクロスプラットフォームなGUI一般に言えることだが、これらをWindowsで動かすととにかく遅い。これがmkvmergeGUIなら遅いだけですむが、Avidemuxは遅い上に不安定でクラッシュしまくる。&lt;br /&gt;まあQtアプリもLinux上なら結構速いようだから、これは見当違いなのかもしれない。&lt;br /&gt;&lt;div style="color: #783f04;"&gt;残念その２：よいフィルタが少ない&lt;/div&gt;mplayerよりはフィルタも多いが、それでも数が少ないし、品質はイマイチ。&lt;br /&gt;例えばリサイザーにしてもsplineやNearestNeighborだって使いたいことがあるのに、Bilinear、Bicubic、Lanczosしかない。わざわざAviSynthのリサイザーとswscale(MPlayerResize)の2種類用意するくらいなら、もっと種類増やせよ。だいたいswscaleにだってSplineとかあるじゃない。&lt;br /&gt;&lt;div style="color: #783f04;"&gt;残念その３：muxerが変&lt;/div&gt;ffmpegと同じlavf使ってるはずなのに、出力が変である。&lt;br /&gt;これでエンコした動画をPSPで再生しようとすると蹴られた。同じ動画をmp4boxやffmpegでremuxすればちゃんと再生できたのに、どーなってるの？(ひょっとするとここ数ヶ月の更新で治ってるのかもしれないけど)&lt;br /&gt;&lt;div style="color: #783f04;"&gt;残念その４：処理がYV12オンリー&lt;/div&gt;AviSynthのように色空間を使い分けられるか、さもなくばAviUtlのYC48のような過剰ともいえる高品質処理が出来ないのでは、結局満足出来ないのですね。&lt;br /&gt;&lt;br /&gt;avsのエディタはとりあえずUbuntu標準のgeditを使い、プレビューはwine経由で&lt;a href="http://www.virtualdub.org/"&gt;VirtualDub&lt;/a&gt;を使うことにした(AvsPはwineでも動かない)。ことの発端がvim用syntax fileなんだからvimを使うのが筋なのかもしれないが、あれになれるのはなかなか難しそうなので、とりあえず保留…。&lt;br /&gt;geditは結構いいと思う。notepad++ほどではないが、機能は一通り揃っているし、拡張性も高そうである。それにこれ以上の高機能を求めるなら「だったらemacs使えよ」と言われてしまうだろう。 &lt;br /&gt;VirtualDubはWindowsと同様サクサク動く(ただ、メニューのフォントが見にくいのが難点か)。&lt;br /&gt;ためしにAviUtlもwineで動かしてみたら、一応動いた。必要なruntimeやdll(.NETとか)をインストールすれば、こちらも普通に使えるのかもしれない。今度試してみよう。&lt;br /&gt;&lt;br /&gt;問題はcodecである。&lt;br /&gt;Windows用のVCMはインストールしても使えるものと使えないものがあるようだ。&lt;br /&gt;とりあえずUtVideoは使えなかった。正確には、インストールは出来たがULRG以外はVirtualDubのダイアログボックスに表示されなかった。&lt;br /&gt;ffdshowはインストール出来たし、vfwも使えるようだが、それなら入力はffms2、出力はffmpegを使ったほうがいいだろう。&lt;br /&gt;どうやらLinux上ではffmsやDGMPGDecのように、フィルタ自身がデコーダーを内蔵するタイプのソースフィルタ以外は使い物にならないと思った方がいいらしい。ffmsの最大の開発理由は「Linux上における安定したソースフィルタの不在」であると聞いたことがあったが、それが実感できた。&lt;br /&gt;&lt;br /&gt;次回に続く&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-4769828507290365310?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/4769828507290365310/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/04/ubuntu-5-wineavisynth.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4769828507290365310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4769828507290365310'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/04/ubuntu-5-wineavisynth.html' title='Ubuntu奮戦記 その5 wine+avisynth'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-5661296541210302937</id><published>2010-04-03T21:13:00.000+09:00</published><updated>2010-04-03T21:13:36.865+09:00</updated><title type='text'>Ubuntu奮戦記 その4 mplayerビルド</title><content type='html'>&lt;blockquote&gt;FFmpeg is a versatile tool to encode and convert a multitude of video and audio formats. x264 encodes high-quality video superior to other popular encoders.&lt;br /&gt;&lt;br /&gt;Although FFmpeg and x264 are available in the Ubuntu repositories, you may need to compile from source. For example, the ffmpeg-user mailing list requires that you use the latest FFmpeg svn before asking for help. Since FFmpeg and x264 are updated frequently, you may also like to have the bleeding-edge for encoding videos. Also, FFmpeg in the Ubuntu repository may not support necessary encoders, decoders, and formats.&lt;/blockquote&gt;&lt;br /&gt;以上、&lt;a href="http://ubuntuforums.org/showthread.php?t=786095"&gt;HOWTO: Install and use the latest FFmpeg and x264&lt;/a&gt;より引用。&lt;br /&gt;&lt;br /&gt;前回、筆者はUbuntuレポのmplayerをガラクタと呼んだ。理由は上記のとおりである。&lt;br /&gt;x264もffmpegもmplayerも開発は活発に続いており、常に機能の向上とバグフィックスが進められている。もし使用中になんらかの不都合に直面したとしても、使っているモノが新しくなければ助けを求めても鼻も引っ掛けてもらえない。&lt;br /&gt;"It's outdated."&lt;br /&gt;"Update your x264(,ffmpeg or mplayer)."&lt;br /&gt;こんなやりとりをここ数ヶ月で何度目にしたことか。&lt;br /&gt;&lt;br /&gt;まあ、これがGIMPとかなら、何の疑問も持たずにレポのもの使うんですがね(ヲイ&lt;br /&gt;&lt;br /&gt;さて、mplayerのビルドである。&lt;br /&gt;筆者はx264とffmpegならmsys+mingwでビルドしたことがあるが、mplayerは一度もない。&lt;br /&gt;ものが単なるエンコーダーやデコーダーではなくプレーヤーであるから、必要になるツールやライブラリも多くなるであろうことは簡単に想像がつく。一体何が要るんだろ？&lt;br /&gt;&lt;br /&gt;&amp;lt;JEEB&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :Chikuzen氏はもうmplayerはビルドしましたかな？&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:まだ、ただいまビルドに必要なものを調査中&lt;br /&gt;&amp;lt;JEEB&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :sudo aptitude build-dep mplayer&lt;br /&gt;&amp;lt;JEEB&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :sudo aptitude install git-core subversion&lt;br /&gt;&amp;lt;JEEB&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :あとはgit clone git://repo.or.cz/mplayer-built.git&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:それだけ？&lt;br /&gt;&amp;lt;JEEB&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :うん&lt;br /&gt;&amp;lt;JEEB&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :追加であと二つくらい要るような憶えがあるけど、なんだっけ&lt;br /&gt;&amp;lt;Chikezen&amp;gt;:まあいいや、とりあえずやってみる&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:えーと、READMEのとおりに&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:まず./enable-mt&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:次に./init&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:そしてmake&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:エラーで止まった。autoreconfというコマンドがないと言ってる&lt;br /&gt;&amp;lt;JEEB&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :思い出した。autoconfとlibtoolが要る&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:あとよく見るとyasmもnoになってるね&lt;br /&gt;&amp;lt;JEEB&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :要るの？&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:アセンブラなしではつらいでしょ&lt;br /&gt;&amp;lt;JEEB&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :ならsudo aptitude install autoconf libtool yasm&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:ふむ、./cleanしてもう一度make&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:よし、今度はエラーでないぞ&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:それにしてもこれほど楽だとはなぁ、msys+mingwが馬鹿みたいだ&lt;br /&gt;&amp;lt;JEEB&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :uau氏のブランチはmkv対応も強化されてるし、ビルド用スクリプトもあるから楽ちん&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:お、ビルド終わった&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:PSP用にエンコしたやつでテストしてみる&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:cd ./mplayer &amp;amp;&amp;amp; ./mplayer ~/Change_vs_Neo_ep02.mp4&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_tGkeSYpkbt0/S7cvWmoCzTI/AAAAAAAAABQ/CGlOvmI9vQ8/s1600/cvsn_ss.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_tGkeSYpkbt0/S7cvWmoCzTI/AAAAAAAAABQ/CGlOvmI9vQ8/s320/cvsn_ss.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:おお、上手くいったみたい&lt;br /&gt;&amp;lt;JEEB&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :おめ&lt;br /&gt;&amp;lt;Chikuzen&amp;gt;:thx&lt;br /&gt;&lt;br /&gt;ここから先が長かった…&lt;br /&gt;&lt;br /&gt;次回に続く&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-5661296541210302937?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/5661296541210302937/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/04/ubuntu-4-mplayer.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/5661296541210302937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/5661296541210302937'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/04/ubuntu-4-mplayer.html' title='Ubuntu奮戦記 その4 mplayerビルド'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_tGkeSYpkbt0/S7cvWmoCzTI/AAAAAAAAABQ/CGlOvmI9vQ8/s72-c/cvsn_ss.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-1291799281061394282</id><published>2010-03-31T05:18:00.000+09:00</published><updated>2010-03-31T05:18:55.096+09:00</updated><title type='text'>Ubuntu奮戦記　その３　再生環境</title><content type='html'>動画のエンコード環境構築は、まず適切な再生環境を準備することから始まる。&lt;br /&gt;適切な再生環境抜きでは、成果(エンコ後の動画)に対して評価を下すことが出来ない。&lt;br /&gt;目的がiPhoneやPSP等向けの携帯動画なら実機を用意して再生確認をしなければならないし、ニコニコやzoomeへの投稿であるならば、投稿前の確認はFlashPlayerコンポーネントを使用するFLVPlayer(Flavie等)で行うべきである。&lt;br /&gt;例えば「AviUtl+x264gui.auoでエンコードしています。投稿前にMPCで確認した時は大丈夫だったのに、ニコニコに投稿した動画はブラウザで見ると色が滲んで変に見えます。どうしてですか？」といった質問がたまにyoutube板のエンコードスレに来ることがある。&lt;br /&gt;答えは「FlashPlayerはYUV420-&amp;gt;RGB変換の際に色差情報の補間を一切行わないから」。&lt;br /&gt;YUV420で圧縮された動画には、色差情報の不足のため、色が滲んでいたりエッジがギザギザになっているものがけっこうある。しかし、それではあんまりなので、一般的な再生環境はこれに補間処理を行って情報不足を目立たなくするようになっている。しかし、FlashPlayerは(おそらく処理量を低減し、少しでも再生を軽くするため)これをしない。言ってみれば安くあげるために手を抜いている。&lt;br /&gt;このため、ある程度ニコニコ投稿経験をつんだAviUtlユーザーは、UVダウンサンプリングフィルタをYUV420-lanczos2(or lanczos3)で最後にかけることで対策を行う。これはある意味AviUtlの特徴であるYC48による高品質な処理を台無しにしてしまう行為になりかねないのだが、再生環境がFlashPlayerである場合はやむを得ないのである。&lt;br /&gt;&lt;br /&gt;と、前置きがやたら長くなってしまったが、要はUbuntuで使うプレーヤーはどれにしようかというお話である。&lt;br /&gt;結論から言えば、これは最初からmplayerに決まっていた。&lt;br /&gt;#x264や#ffmpegにはたまに自分の環境で上手く再生できないと相談にやってくるLinuxユーザーやmacユーザーがいる。&lt;br /&gt;「上手く再生できないんだけど、どうしたらええんかいな？」&lt;br /&gt;「プレーヤーは何を使ってるんだ？」&lt;br /&gt;「VLC（またはTotemとかQuickTimeとか)だよ」&lt;br /&gt;「mplayer使えよ」&lt;br /&gt;こういったやりとりが週に一度はあるような気がする。&lt;br /&gt;特にVLCはデコード時に必要な参照フレームをすっ飛ばすために映像が崩壊するバグが数年間放置されており、また字幕周りもひどいということで甚だ評判が悪い。&lt;br /&gt;Linuxならmplayerが一番と皆が口を揃えて言うのだから、やはりそれが正解なのだろう。&lt;br /&gt;&lt;br /&gt;さて、さっそくmplayerを9.10にいれようと、synapticを開いて探してみたが…&lt;br /&gt;「えーと、svn20090426…なにこれ？」&lt;br /&gt;あらかじめ用意されているものは、たいへん古く、使い物にならないガラクタだった。&lt;br /&gt;やはり、物事は簡単にはいかないものらしい。&lt;br /&gt;&lt;br /&gt;次回に続く&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-1291799281061394282?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/1291799281061394282/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/03/ubuntu_31.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1291799281061394282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1291799281061394282'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/03/ubuntu_31.html' title='Ubuntu奮戦記　その３　再生環境'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-679527623494296393</id><published>2010-03-29T20:01:00.001+09:00</published><updated>2010-03-29T20:09:10.424+09:00</updated><title type='text'>Ubuntu奮戦記　その２　*nix使えよ!?</title><content type='html'>x264の公式フォーラムであるDoom10 Forumの特徴の一つは、登録メンバーにLinuxユーザーが多いことである。&lt;br /&gt;以前の公式フォーラムに指定されていたDoom9(といっても今でもこっちの方が情報は多いけど)ではLinuxやmac関連の情報は少なく、一体彼らはどこで情報を手に入れているのか不思議に思っていた。(その後判明したが、彼らの情報交換は主にIRCや各ディストロの公式フォーラムで行われていた)&lt;br /&gt;だからDoom10が出来たとき、それまでDoom9ではあまり見かけたことのない名前がいろいろ出てきてLinuxでのエンコードについて語っているのを見たときはちょっと驚いたものだった。&lt;br /&gt;&lt;br /&gt;さて、このスレッドである。&lt;br /&gt;&lt;a href="http://doom10.org/index.php?topic=180.0"&gt;http://doom10.org/index.php?topic=180.0&lt;/a&gt;&lt;br /&gt;LinixやBSD(たぶんmacも含まれる)においてAviSynthを使うための簡単なガイドラインといったもので、とりあえず必要なツール類と簡単なスクリプトの例、そしてvimのsyntax fileがあげられていた。&lt;br /&gt;「Windows以外のOSでは、こんなことせにゃならんのか…なんだか大変そうだねぇ、素直にWindows使えばいいのに」&lt;br /&gt;とか思いながら読んでいたら、昔AviSynthBlogで読んだ&lt;a href="http://news.avisynth.info/article/131709905.html"&gt;この記事&lt;/a&gt;を思い出した。&lt;br /&gt;自分では使ったこともないけど、なにかの役に立つかもしれないと思い、「vimならこんなのもあるみたいよ」と書き込んだ。&lt;br /&gt;そしたらお礼の言葉とともに「お前も*nixを使うべきだよ」と返事が返ってきた。&lt;br /&gt;まあ、せっかく勧めてくれたことだし、気が向いたら試してみるかななんて思っていたところで、前回のような状況になった。&lt;br /&gt;かくして筆者はLinux体験をすることになったのである。&lt;br /&gt;&lt;br /&gt;とりあえずディストロはUbuntuにした。&lt;br /&gt;一番簡単で使いやすいとどこかで聞いた覚えがあったからだ。&lt;br /&gt;&lt;a href="http://www.ubuntu.com/"&gt;Ubuntuの公式サイト&lt;/a&gt;から9.10のisoをDLしてimgburnでCDに焼いて、再起動。&lt;br /&gt;言語設定とキーボードを日本語にして、あとは待つこと20分程度でインストールはとりあえず終了。&lt;br /&gt;「再起動する」を選んで、CDを取り出してEnter。&lt;br /&gt;なぜ「とりあえず」かというと、このあと初回のアップデートに結構時間がかかるからである。&lt;br /&gt;アップデートが済んだらもう一度再起動。さらにハードウェアドライバの設定でビデオカード(GF8400M GS)のドライバーをNVIDIA製のもの(185)に変更してさらに再起動。&lt;br /&gt;ここまででかかった時間は約1時間といったところだった。&lt;br /&gt;&lt;br /&gt;次回に続く&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-679527623494296393?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/679527623494296393/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/03/ubuntunix.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/679527623494296393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/679527623494296393'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/03/ubuntunix.html' title='Ubuntu奮戦記　その２　*nix使えよ!?'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-905790831952802490</id><published>2010-03-25T20:51:00.002+09:00</published><updated>2010-03-26T19:44:50.353+09:00</updated><title type='text'>Ubuntu奮戦記　その１：香港映画の悪夢</title><content type='html'>ここ数日間Ubuntu9.10をいじっている。&lt;br /&gt;慣れないことだらけで、やたら苦労している。&lt;br /&gt;&lt;br /&gt;「一体俺は何でこんなことをしているのだろうか？」&lt;br /&gt;&lt;br /&gt;苦闘の果て、昨日やっと一段落ついたような感触を得たので振り返ってみた。&lt;br /&gt;えーと、なんだったかなぁ...&lt;br /&gt;ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー&lt;br /&gt;&lt;br /&gt;すべての始まりは香港映画のDVDだった。&lt;br /&gt;&lt;br /&gt;その日筆者は暇であった。&lt;br /&gt;何もすることがないので、DVDを観ることにした。&lt;br /&gt;20秒ほど本棚を眺め、手に取ったのはジャッキー・チェン監督／主演の「奇跡(miracle)」だった。&lt;br /&gt;たしか数年前にTSUTAYAの安売りコーナーで500円くらいで買ったものである。&lt;br /&gt;ドライブにディスクを突っ込んでMPCHCを起動した。&lt;br /&gt;デコーダーはMS DTV-DVD Decoder、レンダラーはEVR-custom。&lt;br /&gt;インターレース処理はビデオカードにおまかせ。&lt;br /&gt;そして再生を開始すると…&lt;br /&gt;&lt;br /&gt;DVDは4:3のレターボックスで収録されていた。&lt;br /&gt;スクイーズでないことにまず腹が立った。&lt;br /&gt;そして時々チラチラするような妙な違和感を覚えた。&lt;br /&gt;訝しがりながらMPCHCの表示を見ると、60fpsで再生されていた。&lt;br /&gt;Radeonのプルダウン検出が効いていない…だと…。&lt;br /&gt;再生を中止し、調査を開始した。&lt;br /&gt;&lt;br /&gt;DVDは60iで収録されていた。HD5870は間違っていなかった。&lt;br /&gt;試しにYadif(mode=1)をかけた状態でコマ送りしてみると、同じフレームが１枚、2枚…そして前後のフレームが混ざりあったような残像のあるフレームが至るところに存在していた。&lt;br /&gt;あきらかにPALソースをNTSCに無茶なやり方で変換したものである。&lt;br /&gt;ひどい、ひどすぎる。&lt;br /&gt;元々素材は24fpsなんだから、AssumeFPS(24000,1001,true)して、3:2プルダウンかければいいだけなのに、これを作った香港のオーサリング屋は、一旦PAL用に25p変換したものをブレンド処理して60iにしやがった。&lt;br /&gt;ほんと映像業界って、どこの国でも…。&lt;br /&gt;まあ最近はひどいDVDは少なくなったみたいだけど、かわりにひどいBDが増えているわけで。&lt;br /&gt;&lt;br /&gt;こんなこと考える人間はあまりいない。&lt;br /&gt;筆者も初めてこのDVDを観たときは、こんなことは少しも気にならなかった。&lt;br /&gt;世の中、それで済んだほうがいいのである。&lt;br /&gt;どうやらここ数年の経験は、あきらかに間違った方向に筆者を導いているらしい。&lt;br /&gt;しかし、いまさらこの手の経験を‌リセットするのも無理である。&lt;br /&gt;よせばいいのに、「修正してやる！」という気になってしまった。&lt;br /&gt;ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー&lt;br /&gt;&lt;br /&gt;さて、PAL-&amp;gt;NTSCによるブレンドの修正は次のような処理を行う。&lt;br /&gt;&lt;br /&gt;MPEG2Source("video.d2v")&lt;br /&gt;#最初に上下左右の黒べたをフィールドオーダーが狂わないようにしながらcrop&lt;br /&gt;Crop(left,top,right,bottom)&lt;br /&gt;#次に60i-&amp;gt;25pの修正&lt;br /&gt;#なんらかの方法でBob(60fps化)&lt;br /&gt;Bob()&lt;br /&gt;#そしてSRestoreをかける&lt;br /&gt;SRestore()&lt;br /&gt;#これでブレンドはほぼ除去され、60iは25PのPALに戻される。&lt;br /&gt;#今回の場合は素材は劇場用映画なのだから、これをさらに24fpsにしてやる&lt;br /&gt;Audio=NicAC3Source("audio.ac3")&lt;br /&gt;AudioDub(last,Audio)&lt;br /&gt;AssumeFPS(24,1,true)&lt;br /&gt;ResumpleAudio(48000)&lt;br /&gt;return last&lt;br /&gt;&lt;br /&gt;問題はBobになにを使うかである。&lt;br /&gt;まずavisynth内蔵のBobではガタガタで論外。&lt;br /&gt;Yadif(mode=1)を使ってみたが、どうにも汚い。&lt;br /&gt;Yadifmod+NNEDI2でも汚い。&lt;br /&gt;結局MCBobが一番よかったので、これでいくことにした。&lt;br /&gt;avsをVirtualDubにセットし、ULY0で中間出力開始。&lt;br /&gt;終了までにかかる時間は、えーと…約17時間ですと！？&lt;br /&gt;&lt;br /&gt;さすがMCBob、SD未満のサイズですらこれであるorz&lt;br /&gt;&lt;br /&gt;かくしてメインPCは占領され、筆者は再び暇になってしまった。&lt;br /&gt;しかたがないのでサブノートを引っ張り出した。&lt;br /&gt;半年ぶりくらいに電源を入れた。&lt;br /&gt;起動したOSは、バンドルのXPsp2だった。&lt;br /&gt;Windows7にすっかり慣れてしまった現在では、どうにも使う気になれなかった。&lt;br /&gt;どうしたものかとしばらく天井を眺めていたら、このスレッドのことを思い出した。&lt;br /&gt;&lt;a href="http://doom10.org/index.php?topic=180.0"&gt;http://doom10.org/index.php?topic=180.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;次回に続く&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-905790831952802490?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/905790831952802490/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/03/ubuntu.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/905790831952802490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/905790831952802490'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/03/ubuntu.html' title='Ubuntu奮戦記　その１：香港映画の悪夢'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-5125871038007502996</id><published>2010-03-09T19:48:00.002+09:00</published><updated>2010-03-09T20:22:28.018+09:00</updated><title type='text'>デザイン変更</title><content type='html'>ブログを書き始めて2ヶ月ほど(といっても更新はあまりしない)たって、初めてコメントが付いた。&lt;br /&gt;まさか読む人がいるとは思わなかったのでびっくりした。&lt;br /&gt;書いてる本人ですら三日に一度くらいしか開かないというのに...そもそもBarn(物置小屋)なんて、そんなもんでしょ。&lt;br /&gt;&lt;br /&gt;とりあえず新着コメントの有無くらいはわかるようにしようとガジェットを追加してみた。&lt;br /&gt;ついでにレイアウトもなんだか殺風景すぎる気がしたので変更(といってもBloggerのテンプレを別のものに変えただけ)。&lt;br /&gt;&lt;br /&gt;やってみて改めて思ったが、我ながらこの手のことにはさっぱりセンスがないな...まあ、いいや。&lt;br /&gt;物置小屋なんてこんなもんで十分でしょ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-5125871038007502996?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/5125871038007502996/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/03/blog-post.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/5125871038007502996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/5125871038007502996'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/03/blog-post.html' title='デザイン変更'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-8542637820481514234</id><published>2010-03-08T17:23:00.003+09:00</published><updated>2011-06-14T07:18:58.599+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='avisynth'/><title type='text'>ffmpegsourceのmpegsource入力</title><content type='html'>&lt;a href="http://code.google.com/p/ffmpegsource/"&gt;ffmpegsource&lt;/a&gt;は、myrsloik氏をリーダーとして#darkholdのメンバーが開発しているffmpegのwrapperである。&lt;br /&gt;lavfでdemuxし、lavcでデコードして,swscaleで色空間変換やリサイズを扱い、lavfilterでその他のフィルタを掛けることが出来るAviSynth用ソースフィルターであり、最近ではx264の入力にも使われるようになった。&lt;br /&gt;ffmpegが使われているだけあって非常に多くのフォーマットやコーデックに対応しており便利なことこの上ないのだが、弱点も幾つかある。なんでもlavfのmpeg parserは問題があるのでかわりにHaali氏のparser(HaaliMediaSplitterで使われているもの)を利用することにしたのだが、これはこれでやはり問題があるらしく、しかもHaaliはソースが公開されていないため、不具合に対処しようがないというのである。&lt;br /&gt;&lt;br /&gt;一方、AviSynthでmpeg入力とくれば、真っ先にあげられるのはneuron2氏の&lt;a href="http://neuron2.net/dgmpgdec/dgmpgdec.html"&gt;DGMPGDec&lt;/a&gt;である。&lt;br /&gt;こちらのほうもしょっちゅうヘマをするが、そのたびにneuron2氏はソースに手を入れ何とかしてきたので、AviSynthユーザーは特に理由がない限り、普通はmpegソースにはこちらを使う。&lt;br /&gt;&lt;br /&gt;これは#darkholdメンバーにしてみれば、非常に面白くない事態であろう。&lt;br /&gt;なんせ、世にあふれる動画ソースは殆どがPS(DVD)かTS(放送)かm2ts(BD)であるのに、あのneuron2のツールを使わねばならないのである。&lt;br /&gt;くっ、悔しい...で(ry&lt;br /&gt;(なんで#darkholdがneuron2氏を嫌うのか分からない人は、#darkholdがなんなのかとか、neuron2氏の過去の言動を、CCCPのサイトやDoom9等で調べてみればいい)&lt;br /&gt;&lt;br /&gt;てな感じのことがあって、このたび#darkholdの重鎮の一人であるTheFluff氏が自前のmpeg parserをスクラッチで書く気になったみたいだ、とJEEB氏から聞いた。&lt;br /&gt;以下、某IRCのログより適当に抜粋&lt;br /&gt;&lt;br /&gt;(JEEB) そういや、TheFluff氏は夕べdgindexのソースのTSパーサーなど読んでた&lt;br /&gt;(JEEB) 結局諦めたのかｗｗｗ&lt;br /&gt;(JEEB) &amp;lt;Lord&amp;gt; anyway are you really sure you want to steal that code? :P&lt;br /&gt;(JEEB) &amp;lt;TheFluff&amp;gt; no, it seems way too annoying&lt;br /&gt;(JEEB)&amp;nbsp;&amp;lt;TheFluff&amp;gt; I'd rather write a ts parsing library instead&lt;br /&gt;(JEEB) &amp;lt;TheFluff&amp;gt; from scratch&lt;br /&gt;(JEEB) &amp;lt;TheFluff&amp;gt; I mean, how hard can it be!?!!?!111&lt;br /&gt;(JEEB) dgindexのソースを読んでみたら色々面白いものが見つかったけど、再利用出来る部分があまりなかったｗ&lt;br /&gt;(JEEB) &amp;lt;TheFluff&amp;gt; rather than check how much data he has read and deciding to stop parsing after not encountering any headers after a certain amount of data, he gets the current time in milliseconds and aborts parsing if headers have been found for more than 5 wallclock seconds&lt;br /&gt;(JEEB) ↑dgindexから&lt;br /&gt;(JEEB) ５秒内でTSヘッダが見つからない→止まるｗ&lt;br /&gt;(JEEB) どれぐらいデータが読み込めたかに関わらずｗ&lt;br /&gt;(chikuzen_) TSならまるもプラグインのほうが速いよ&lt;br /&gt;(chikuzen_) ソースも公開してるから見てみるのもいいかもね&lt;br /&gt;(JEEB) ほほぉ&lt;br /&gt;(JEEB) あと、日本専用のソースならねぇ・・・　他にATSCなどなTSファイルがあるからねぇ&lt;br /&gt;(JEEB) まぁ、何もないよりマシかとｗ&lt;br /&gt;(chikuzen_) http://www.marumo.ne.jp/mpeg2/&lt;br /&gt;(chikuzen_) GPLみたいなケチくさいこと言わないのがまるもさんのいいところ&lt;br /&gt;(JEEB) ライセンスは？&lt;br /&gt;(JEEB) 再配布の禁止&lt;br /&gt;(JEEB) ↑これがあるけどねぇ&lt;br /&gt;(chikuzen_) そのままではね&lt;br /&gt;(JEEB) ふむ&lt;br /&gt;(chikuzen_) つまりいじったものに関しては一切関知しない&lt;br /&gt;(JEEB) おぉー、readme.enでちゃんと書いてある&lt;br /&gt;(JEEB) まぁ、ちゃんとライセンスを書いてくれる人は嬉しいわ&lt;br /&gt;(JEEB) 書いてない人は「書いてないなら、何も出きない」という法律的な理屈を理解してないかなｗ&lt;br /&gt;(chikuzen_) LanczosResizeのオリジナルは彼だけど、うやむやのうちにavisynthオリジナルみたいになっちゃったりして&lt;br /&gt;(chikuzen_) 結構腹が立ったこともあるんじゃないかな&lt;br /&gt;(JEEB) ほほぉ&lt;br /&gt;(chikuzen_) まあ、120fpsAVIの生みの親でもあるんだけどね&lt;br /&gt;(JEEB) それは言わないことにしようｗ&lt;br /&gt;(chikuzen_) 本職のコーデックプログラマだから、フリーのエンコーダーは書けないって前に日記に書いてたな&lt;br /&gt;(JEEB) ほほぉ&lt;br /&gt;(JEEB) まぁ、TheFluff氏は今他のことをやってるけど、とりあえず#darkholdで貼ってみた&lt;br /&gt;&lt;br /&gt;数時間後&lt;br /&gt;&lt;br /&gt;(JEEB) chikuzen_, あのMPEG-2プラグインを紹介してくれてありがとうｗ　ソースはこんな初心者の目で見る限りでも、かなりdgindexより再利用できそうｗ&lt;br /&gt;(chikuzen_) まあそのままは使えないだろうけど、parserなりdemuxerなりの‭参考くらいにはなるかも&lt;br /&gt;(JEEB) うん&lt;br /&gt;&lt;br /&gt;さて、どうなることやら&lt;br /&gt;&lt;br /&gt;それにしても、草を生やすのが好きなフィンランド人である。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-8542637820481514234?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/8542637820481514234/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/03/ffmpegsourcempegsource.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8542637820481514234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8542637820481514234'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/03/ffmpegsourcempegsource.html' title='ffmpegsourceのmpegsource入力'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-1349991691756453105</id><published>2010-03-02T21:28:00.000+09:00</published><updated>2010-03-02T21:28:45.691+09:00</updated><title type='text'>JM Reference Software</title><content type='html'>JM Reference Softwareが更新されたと小耳に挟んだので見に行ってみた。&lt;br /&gt;&lt;a href="http://iphome.hhi.de/suehring/tml/"&gt;http://iphome.hhi.de/suehring/tml/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;おお、本当に更新されてるじゃんってことで早速DLしてビルド。&lt;br /&gt;&lt;br /&gt;用意するもの&lt;br /&gt;・&lt;a href="http://www.microsoft.com/japan/msdn/vstudio/express/"&gt;Microsoft VisualC++2008 ExpressEdision&lt;/a&gt;&lt;br /&gt;・&lt;a href="http://www.blogger.com/goog_1267527106341"&gt;WindowsSDK for Windows7 and .NET Framework3.5SP1&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 21px;"&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=71DEB800-C591-4F97-A900-BEA146E4FAE1&amp;amp;displaylang=en"&gt;&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;手順&lt;br /&gt;・JMのzipを解凍する&lt;br /&gt;・中にあるjm_vc9.slnをVC++2008で開く&lt;br /&gt;・"ソリューション構成"を"Release"にする&lt;br /&gt;・ldecodとlencodのプロジェクトをそれぞれ”ビルド"する&lt;br /&gt;&lt;br /&gt;これでbinフォルダの中にldecod.exeとlencod.exeができるので、あとはbinフォルダをまるごとコピーして、好きな場所に保存すればおしまい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-1349991691756453105?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/1349991691756453105/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/03/jm-reference-software.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1349991691756453105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1349991691756453105'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/03/jm-reference-software.html' title='JM Reference Software'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-1580398543351890023</id><published>2010-03-01T18:19:00.000+09:00</published><updated>2010-03-01T18:19:29.506+09:00</updated><title type='text'>x264vfwの復活</title><content type='html'>前回の記事を書いた後にDoom9に行ってみたら、x264vfwのスレッドが何故か賑わっていた。&lt;br /&gt;何事だろうと訝しがりつつ新着投稿を読んでみると、あらびっくり。死んだと思われていたvfwが華麗なる復活を遂げているではないですか。&lt;br /&gt;これはすごいと言うしかない。&lt;br /&gt;&lt;br /&gt;そもそもvfwの何が悪かったかといえば、いわゆる"one frame in, one frame out"の原則である。&lt;br /&gt;vfwはその仕組み上、エンコード前のフレームを1枚入力すると、そのフレームをエンコードして1枚出力しない限り、次のフレームを入力することが出来ない様になっている。これでは、Bフレームのように未来を参照するフレームのエンコードが原則的に出来ないし、処理速度をあげるためにマルチスレッド化を行おうにも、1枚のフレームを複数に分割して処理することしか許されない。複数枚のフレームを一度に処理するのと違って、圧縮率が低下するは、処理速度の大幅な向上は望めないはで問題がありすぎた。&lt;br /&gt;xvidやDivX5等が主流の頃は、これを何とかしようとPackedBitStreamなる、なんともややこしいハックが行われたりしていたが、それはそれで問題が合ったりして、そうこうするうちにvfwは可逆圧縮コーデック専用のような扱いになりかけていた。&lt;br /&gt;&lt;br /&gt;今回のx264vfw-r1471は今までとは明らかに一線を画す改造である。&lt;br /&gt;vfwはまず1枚のフレームをエンコーダーに渡す。&lt;br /&gt;エンコーダーは入力フレームを1枚受け取ると、エンコードしないでそのフレームをキャッシュしておき、かわりに真っ黒なフレームをエンコード済のフレームとして出力する。vfwは入力したフレームが無事に出力されたと騙されて、次のフレームをエンコーダーに渡し、受け取った真っ黒なフレームをAVIとして出力する。&lt;br /&gt;これを繰り返すとエンコーダーには複数枚のフレームがキャッシュされていくが、ある程度のフレーム(x264ならrc-lookaheadによるだろう)が貯まった時点で、初めてエンコーダーはエンコードを始める。複数のフレームを同時に扱えるので、Bフレームの使用もまったく問題ないし、マルチスレッドによる高速な処理も行える。そしてエンコードされたフレームは、vfwによって作られた偽物のAVIとは別の場所に、mp4やmkvとして保存される。&lt;br /&gt;この仕組だと、ACMによってエンコードされた音声は偽物のAVIのほうに格納されてしまうので、従来のものよりは少し扱いづらいことにはなるが、そもそも音声は別処理して後で改めて結合するのが今時の常識であるから、それほど大した問題ではない。&lt;br /&gt;バッチ処理すると複数のダミーが出来るのがウザイと思う人もいるかも知れないが、それにしたって映像だけのAVIならどんどん上書きすればいいだけだから、出来上がるダミーは結局一つで済む。&lt;br /&gt;&lt;br /&gt;そして今回の改造の一番すごいところは、他のエンコーダーにも応用可能な点である。&lt;br /&gt;この仕組みを使えばmpeg2だろうがmpeg4だろうがtheoraだろうが、すべてvfwで実装出来る。極端な話、ffmpeg vfw codec(ffdshowではない)すら可能であろうと言うことだ。&lt;br /&gt;&lt;br /&gt;VirtualDubはすでにPhaeron(Avery Lee)氏がCLIエンコーダーとの連携機能実装に動いているため、今回のx264vfw-r1471の恩恵を受けることはそれほど大きくはないだろう。&lt;br /&gt;しかし他のソフト(TMPGEnc、Premiere、Vegas、Nive、紙芝居クリエーター、CrystelEngine等)のユーザーにとってはこれは非常に素晴らしい前進と言えるのではないかな。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-1580398543351890023?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/1580398543351890023/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/03/x264vfw.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1580398543351890023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1580398543351890023'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/03/x264vfw.html' title='x264vfwの復活'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-2114172834127228401</id><published>2010-03-01T03:54:00.000+09:00</published><updated>2010-03-01T03:54:56.208+09:00</updated><title type='text'>x264.exeでavi出力</title><content type='html'>&lt;a href="http://komisar.gin.by/"&gt;komisar氏のサイト&lt;/a&gt;を眺めていたら、なにやら見たことのないnewパッチがあった。&lt;br /&gt;x264_avi_out.v2.diff&lt;br /&gt;名前から察するに、ｘ264.exeでAVI出力出来るようになるパッチらしい。&lt;br /&gt;面白そうなので、さっそくビルドに挑戦してみた。&lt;br /&gt;&lt;br /&gt;パッチ自体は問題もなく当てることが出来たが、いざ出来上がったバイナリでAVI出力を試してみると、エラーが出て上手くいかない。&lt;br /&gt;他のMKVやMP4は普通に出力できるのに、なんでだろうと思いながらパッチの中身を覗いてみたらなんとなく理由がわかった。&lt;br /&gt;このパッチはどうやらlavfのavimuxerを使用するものらしい。&lt;br /&gt;そういや自分のビルドに使ってるffmpegは、configureで--disable-muxersにしているんだった。これでは駄目なはずだわな。&lt;br /&gt;&lt;br /&gt;つーことで、ffmpegからビルドし直してみることにした。&lt;br /&gt;いままでの設定は&lt;br /&gt;&lt;blockquote&gt;./configure --prefix=/mingw/x86_64-pc-mingw32 --cross-prefix=x86_64-pc-mingw32- --enable-cross-compile --target-os=mingw32 --host-cc=gcc --enable-gpl --enable-postproc --enable-memalign-hack --enable-runtime-cpudetect --disable-devices --disable-filters --disable-encoders --disable-network --disable-muxers --disable-decoder=aac,ac3,adpcm_*,alac,als,ape,atrac?,cook,dca,dsicinaudio,dxa,eac3,flac,interplay_dpcm,mlp,mp1,mp2,mp3,mp3*,mpc?,pcm_*,qcelp,ra_*,sipr,truehd,truespeech,tta,vorbis,wavpack,wma*,twinvq --disable-demuxer=aac,ac3,pcm_*,ape,amr,ass,au,avs,dts,eac3,flac,mp3,mpc,mpc8,truehd,tta,w64,wav,wv --disable-parser=aac,ac3,dca,mlp,mpegaudio&lt;/blockquote&gt;これが&lt;br /&gt;&lt;blockquote&gt;./configure --prefix=/mingw/x86_64-pc-mingw32 --cross-prefix=x86_64-pc-mingw32- --enable-cross-compile --target-os=mingw32 --host-cc=gcc --enable-gpl --enable-postproc --enable-memalign-hack --enable-runtime-cpudetect --disable-devices --disable-filters --disable-encoders --disable-network --disable-decoder=aac,ac3,adpcm_*,alac,als,ape,atrac?,cook,dca,dsicinaudio,dxa,eac3,flac,interplay_dpcm,mlp,mp1,mp2,mp3,mp3*,mpc?,pcm_*,qcelp,ra_*,sipr,truehd,truespeech,tta,vorbis,wavpack,wma*,twinvq --disable-demuxer=aac,ac3,pcm_*,ape,amr,ass,au,avs,dts,eac3,flac,mp3,mpc,mpc8,truehd,tta,w64,wav,wv --disable-parser=aac,ac3,dca,mlp,mpegaudio --disable-muxer=ac3,adts,aiff,amr,as*,au,avm2,c*,d*,e*,f*,g*,h*,i*,m*,n*,o*,p*,r*,s*,t*,v*,w*,y*&lt;/blockquote&gt;に変った。&lt;br /&gt;ただでさえ長ったらしいconfigureが、さらに長くなっちゃったよ… 。&lt;br /&gt;&lt;br /&gt;さて、enable-muxer aviになってることを確認して、ffmpegをビルド。&lt;br /&gt;お次はx264をもう一度ビルドし直し。&lt;br /&gt;再度AVI出力を試してみたら、今度は無事にAVIで出力出来ました！&lt;br /&gt;&lt;br /&gt;しかし、こんなもん、一体何に使えばいいんでしょうかね？&lt;br /&gt;FLV出力以上に使い道が思い浮かばないんだよなぁ…。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-2114172834127228401?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/2114172834127228401/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/03/x264exeavi.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/2114172834127228401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/2114172834127228401'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/03/x264exeavi.html' title='x264.exeでavi出力'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-8270227931528710595</id><published>2010-02-16T01:38:00.001+09:00</published><updated>2010-02-16T01:47:09.787+09:00</updated><title type='text'>SWF用DirectShowFilter　その２</title><content type='html'>前回の記事に書いたSWF用DirectShowFilter(以下DSF)に、新たなる欠点を発見した。&lt;br /&gt;どうもDirectShow使ってるせいか、動きが止まっている部分で、本来表示されなければいけないフレーム数よりも少ないフレーム数になってしまうことがある。&lt;br /&gt;&lt;br /&gt;つまり、本当は全く同じ絵が5回連続で表示されるべきところが、1回だけ表示して、すぐ次の絵になってしまう、といったことが起こるのである。&lt;br /&gt;一方、swf_vfpだとそのようなことは起こらない。&lt;br /&gt;5フレーム同じ絵が続く場面では、きっちり5フレーム表示され、4フレームすっ飛ばしたりはしないのだ。&lt;br /&gt;&lt;br /&gt;フレームをすっ飛ばしてしまうということは、音ズレとしてはっきりわかってしまうので、非常にまずい。特に止め絵を多用するものだと、終りのほうは悲惨なものになってしまう。&lt;br /&gt;&lt;br /&gt;やはり信頼性はswf_vfpの方が高い。&lt;br /&gt;DSFはスプライトが使われている部分の差し替え用AVI作成以外には使えないと思った方がいいようだ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-8270227931528710595?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/8270227931528710595/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/02/swfdirectshowfilter_16.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8270227931528710595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8270227931528710595'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/02/swfdirectshowfilter_16.html' title='SWF用DirectShowFilter　その２'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-8556296327359597291</id><published>2010-02-14T00:43:00.003+09:00</published><updated>2010-02-14T01:04:35.300+09:00</updated><title type='text'>SWF用DirectShowFilter</title><content type='html'>Doom9の&lt;a href="http://forum.doom9.org/showthread.php?p=1373383#post1373383"&gt;このスレ&lt;/a&gt;でSWF用DirectShowFilterなるものが紹介されていた。&lt;br /&gt;SWFでDirectShowといえばMPCを思い浮かべるが、あれはただIE用FlashPlayerをそのまま使っているだけで、ブラウザ以上のことは特に何もできない。&lt;br /&gt;&lt;br /&gt;これが本当ならすげえやってことで、さっそくDL。&lt;br /&gt;&lt;a href="http://www.medialooks.com/products/directshow_filters/flash_source.html"&gt;http://www.medialooks.com/products/directshow_filters/flash_source.html&lt;/a&gt;&lt;br /&gt;どうやらフリーのようだが、要登録らしい。&lt;br /&gt;あと、IE用FlashPlayerを利用しているようで、こちらも必須とのこと。&lt;br /&gt;&lt;br /&gt;さて、インストールしてみて、まずはWMP12でSWFを再生出来るか試してみた…が再生出来ない。&lt;br /&gt;どうもActiveXでセキュリティに引っかかっているようだね。&lt;br /&gt;IE同様、WMPでもSWFの再生はブロックがかかるのか…はじめて知ったよ。&lt;br /&gt;ではこれならってことで、QonohaPlayerで試してみると…上手くいきました！&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_tGkeSYpkbt0/S3bCs8blvpI/AAAAAAAAAAU/wCHaMY-AWBk/s1600-h/swf_qonoha0000.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_tGkeSYpkbt0/S3bCs8blvpI/AAAAAAAAAAU/wCHaMY-AWBk/s320/swf_qonoha0000.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;特にコマ落ちしてる様子もなく、なによりもスプライトを使っている部分もちゃんと動いてる！　すごい！（何がすごいか分からない人は、SWFをAVIやMP4に変換しようとしたことのない人でしょう。経験者ならみんな驚くと思います）&lt;br /&gt;&lt;br /&gt;さて、再生出来るなら、当然変換にも使えるはずってことで、AviUtlのDirectShowFileReaderで読み込めるか試してみると…クラッシュしたやんけ、オイ…。&lt;br /&gt;ではVirtualDubならどうかとDirectShow input driverで試してみると…これもだめ。&lt;br /&gt;AviSynthならどうかとDirectShowSource使って…orz&lt;br /&gt;ならばこれはどうかとDSS2を使ってみると…やったぁ、読み込めた！&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_tGkeSYpkbt0/S3bK1FqIyoI/AAAAAAAAAAk/9sM8Ak7QaBo/s1600-h/DSS2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://1.bp.blogspot.com/_tGkeSYpkbt0/S3bK1FqIyoI/AAAAAAAAAAk/9sM8Ak7QaBo/s320/DSS2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;さっそくVirtualDubでAVIに変換…順調に行きました。&lt;br /&gt;&lt;br /&gt;でも、なんでDSS２以外はダメなのかしら？ ってことでしばらく試行錯誤してみると…どうやら音声を同時に読み込もうとするとクラッシュすることが判明。DirectShowSourceでもaudio=falseにしたら読み込めた(DSS2はもともと音声は読めないから無問題なわけね)。&lt;br /&gt;そういえば、swf_vfpの履歴にmp3音声がどうこうってあったなぁ…あれと同じでPCMを使ってれば読めるのかもしれないけど、手元にPCM音源のSWFがみつからなかったので、調査は保留。&lt;br /&gt;まあ、音声はいままでも別処理だったし、状況は好転したと言えますね。&lt;br /&gt;&lt;br /&gt;さて、スプライト関連も上手く再現出来ることだし、これはswf_vfpもいよいよお役御免かなぁ…なんて思ってたところで、一つ不具合を見つけた。&lt;br /&gt;どうやらレイヤーの重ね方だかアルファチャンネルの透過度の具合のせいか、色がおかしくなることがある。同じ現象はswfdrop.exeを使った場合も起こったことを思い出した。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_tGkeSYpkbt0/S3bG4wKC3PI/AAAAAAAAAAc/Q8yxkhvXO8w/s1600-h/rori_swf2avi.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_tGkeSYpkbt0/S3bG4wKC3PI/AAAAAAAAAAc/Q8yxkhvXO8w/s400/rori_swf2avi.jpg" width="227" /&gt;&lt;/a&gt;&lt;/div&gt;うーん、swf_vfpなら、これは起こらないんだよなぁ…やっぱりすごいよ、まるもさん。&lt;br /&gt;&lt;br /&gt;とりあえず、基本はやはりswf_vfp、スプライトの部分はこのDSF、どちらでもダメな場合はデスクトップキャプチャでAVIを作って、切り貼りするってことになるかな。&lt;br /&gt;&lt;br /&gt;＊今回の実験に使用したSWFは、過去に筆者がニコニコ投稿用エンコードを代理したものを使わせて頂きました。作った人、勝手に使ってごめんね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-8556296327359597291?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/8556296327359597291/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/02/swfdirectshowfilter.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8556296327359597291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8556296327359597291'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/02/swfdirectshowfilter.html' title='SWF用DirectShowFilter'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_tGkeSYpkbt0/S3bCs8blvpI/AAAAAAAAAAU/wCHaMY-AWBk/s72-c/swf_qonoha0000.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-4578796471012064836</id><published>2010-02-05T02:22:00.002+09:00</published><updated>2010-02-05T02:42:23.628+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ビルド'/><title type='text'>lavf/ffms付きx264_x64ビルド</title><content type='html'>ちょっとサボっていたら、前回の更新から一週間以上経っていた。&lt;br&gt;誰も読まないチラシの裏替わりとはいえ、やはりサボるのはあまり良くないだろう。&lt;br&gt;&lt;br&gt;ここ数日はx264.exe(x64)の自ビルドでlavf/ffms入力を有効にするために四苦八苦していた。&lt;br&gt;Windows&amp;AviSynthユーザーとしては、全く要らないといってもいい機能ではあるが、やはり出来る事ならば有効にしておきたいのが人情というもの。&lt;br&gt;&lt;br&gt;以下にその手順を書いておく&lt;br&gt;なお、これはr1416現在の情報なので、あとあと使えなくなっても知らない。&lt;br&gt;&lt;br&gt;クロスコンパイルできるビルド環境構築は各自でやってるものとする。&lt;br&gt;参考：&lt;br&gt;http://komisar.gin.by/mingw/add/MinGW%20cross-compile%20toolchain%20(EN)/&lt;br&gt;http://zoome.jp/VFR_maniac/diary/89/&lt;br&gt;ちなみに筆者はkomisar氏のcross-mingw.gcc443.generic.20100124を使用している。&lt;br&gt;fstabは&lt;br&gt;&lt;blockquote&gt;e:/msys/mingw /mingw&lt;br&gt;e:/msys/local/ /usr/local&lt;br&gt;e:/msys/tmp /tmp1&lt;/blockquote&gt;&lt;br&gt;まずpthread、zlib、bzip2はkomisar氏の配布しているものをそのまま使用しているので省略。&lt;br&gt;&lt;br&gt;　yasm(0.8.0):&lt;br&gt; $ wget -c http://www.tortall.net/projects/yasm/releases/yasm-0.8.0.tar.gz&lt;br&gt; $ tar zxvf yasm-0.8.0.tar.gz&lt;br&gt; $ cd yasm-0.8.0&lt;br&gt; $ ./configure --prefix=/mingw&lt;br&gt; $ make&lt;br&gt; $ make install&lt;br&gt; $ cd ~&lt;br&gt;&lt;br&gt;GPAC:&lt;br&gt;$ cvs -d:pserver:anonymous@gpac.cvs.sourceforge.net:/cvsroot/gpac login&lt;br&gt;passwordはなし&lt;br&gt;$ cvs -z3 -d:pserver:anonymous@gpac.cvs.sourceforge.net:/cvsroot/gpac co -P gpac&lt;br&gt;$ cd gpac&lt;br&gt;$ cvs update -D "2010-01-23 UTC"&lt;br&gt;$ wget -c http://pastebin.php?dl=m59b9d49c&lt;br&gt;$ mv pastebin.php@dl=m59b9d49c muken_20100123.diff&lt;br&gt;$ patch -uNp0 &lt; muken_20100123.diff&lt;br&gt;$ ./configure --prefix=/mingw/x86_64-pc-mingw32 --cross-prefix=x86_64-pc-mingw32- --cpu=x86_64 --static- mp4box&lt;br&gt;$ make lib apps&lt;br&gt;$ make install-lib&lt;br&gt;$ cp -p ./bin/gcc/MP4Box.exe /e/mp4tools/mp4box.exe&lt;br&gt;$ cd ~&lt;br&gt;ちなみに途中であてているパッチはVFR maniac氏の最新パッチ(どうやら現在、非公開の様子)&lt;br&gt;/e/mp4toolsは各自適当に変更して欲しい。&lt;br&gt;&lt;br&gt;FFMPEG(今回は2010-02-01のスナップショット):&lt;br&gt;$ wget -c http://ffmpeg.org/releases/ffmpeg-checkout-snapshot.tar.bz2&lt;br&gt;$ tar jxvf ffmpeg-checkout-snapshot.tar.bz2&lt;br&gt;$ cd ffmpeg-checkout-snapshot&lt;br&gt;ここで./libswscale/swscale_template.cの2500行目あたりを次のように書き換え&lt;br&gt;&lt;blockquote&gt;#if ARCH_X86_64 &amp;&amp; AV_GCC_VERSION_AT_LEAST(3,4)&lt;br&gt;:: "m" (src1), "m" (dst), "g" (dstWidth), "m" (xInc_shr16), "m" (xInc_mask),&lt;br&gt;#else&lt;/blockquote&gt;を&lt;br&gt;&lt;blockquote&gt;#if ARCH_X86_64 &amp;&amp; AV_GCC_VERSION_AT_LEAST(3,4)&lt;br&gt;:: "m" (src1), "m" (dst), "g" ((x86_reg)dstWidth), "m" (xInc_shr16), "m" (xInc_mask),&lt;br&gt;#else&lt;/blockquote&gt;にする(1行だけ)。&lt;br&gt;$ ./configure --prefix=/mingw/x86_64-pc-mingw32 --cross-prefix="x86_64-pc-mingw32-" --enable-cross-compile --target-os=mingw32 --host-cc=gcc --enable-gpl --enable-postproc --enable-memalign-hack --enable-runtime-cpudetect --disable-devices --disable-filters --disable-encoders --disable-muxers --disable-network --disable-decoder=aac,ac3,adpcm_*,alac,als,ape,atrac?,cook,dca,dsicinaudio,dxa,eac3,flac,interplay_dpcm,mlp,mp1,mp2,mp3,mp3*,mpc?,pcm_*,qcelp,ra_*,sipr,truehd,truespeech,tta,vorbis,wavpack,wma*,twinvq --disable-demuxer=aac,ac3,pcm_*,ape,amr,ass,au,avs,dts,eac3,flac,mp3,mpc,mpc8,truehd,tta,w64,wav,wv --disable-parser=aac,ac3,dca,mlp,mpegaudio&lt;br&gt;$ make&lt;br&gt;$ make install&lt;br&gt;$ cd ~&lt;br&gt;configure長すぎる...でもバイナリが小さくなるし、無効にしても影響のない機能はなるべく切るべきだと思う。&lt;br&gt;なお、pthreadをautostaticでビルドしておけば、--enable-pthreadsもいけるそうだが、今回はパス。&lt;br&gt;&lt;br&gt;ffms(現時点では275):&lt;br&gt;$ svn checkout http://ffmpegsource.googlecode.com/svn/trunk/ ffms2&lt;br&gt;$ cd ffms2&lt;br&gt;$ PKG-CONFIG="/mingw/x86_64-pc-mingw32/bin/pkg-config.exe" ./configure --prefix=/mingw/x86_64-pc-mingw32 --host=x86_64-pc-mingw32&lt;br&gt;$ make&lt;br&gt;$ make install&lt;br&gt;$ cd ~&lt;br&gt;なおpkg-config.exeは&lt;br&gt;http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.23-3_win32.zip&lt;br&gt;glibは&lt;br&gt;http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.22/glib_2.22.3-1_win32.zip&lt;br&gt;からDLして、あらかじめ/mingw/x86_64-PC-mingw32以下にまとめてぶちこんでおくこと&lt;br&gt;&lt;br&gt;x264：&lt;br&gt;$ git clone git://git.videolan.org/x264.git x264&lt;br&gt;$ cd x264&lt;br&gt;$ ./configure --cross-prefix=x86_64-pc-mingw32- --host=x86_64-pc-mingw32&lt;br&gt;$ make fprofiled VIDS="/g/for_test/soccer_4cif.y4m"&lt;br&gt;$ make install&lt;br&gt;$ cp -p /usr/local/bin/x264.exe /e/x264/mine/x264_r1416.exe&lt;br&gt;$ exit&lt;br&gt;なんか-march=core2はあまり速くならないようなので、最近はあまりつけていない&lt;br&gt;fprofiledの動画はなんでもいいらしいが、とりあえずhttp://media.xiph.org/video/derf/y4m/soccer_4cif.y4mを使っている。&lt;br&gt;mp4box同様、/e/x264/mineのあたりは各自で適当に変えること&lt;br&gt;上には書いてないが、NAL-HRDパッチとkomisar氏のlog_fileパッチはいつも当てている。&lt;br&gt;&lt;br&gt;以上で終了。&lt;br&gt;筆者にIRCで丁寧に教えてくれたVFR maniac氏とJEEB氏に感謝します。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-4578796471012064836?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/4578796471012064836/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/02/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4578796471012064836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/4578796471012064836'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/02/blog-post.html' title='lavf/ffms付きx264_x64ビルド'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-8077251474811021290</id><published>2010-01-26T03:37:00.003+09:00</published><updated>2010-10-02T00:49:27.537+09:00</updated><title type='text'>弄りたがる人達</title><content type='html'>komisar氏がGCC4.4.3の配布を始めたので4.4.2から差し替えた。&lt;br /&gt;別にこれといって変わった様にも思えないし、4.4.2で何も困ってはいなかったのだが、ソフトウェアに関してはなぜか最新を使っていないと気が済まないという難儀な性格なので仕方がない。&lt;br /&gt;&lt;br /&gt;最新といえば、MPC-HCがr1552でMPEG2のDXVAに対応したらしいので、こちらも更新してみた。&lt;br /&gt;いつもどおりAlexin女史のところ(xvidvideo.ru)からr1557をDLしてインストール。&lt;br /&gt;とりあえずmpeg2でも内部フィルターでDXVAは効くようになったみたいだが、ffdshowのlibavcodec使用時と比べても、CPU使用率は全く下がらない。3%～15%程度をうろうろしている。(後で気づいたが、実はこのとき使われていたデコーダーは、MPC-HCのものではなく、MS製のほうだった。MPC-HCのデコーダーではDXVAは働かなかったようである）&lt;br /&gt;WMP12 ＆ MS DTV-DVD VIDEO DECODERだと常に5%未満なんだが…DVD鑑賞には結局WMP12が一番いいみたい。&lt;br /&gt;とりあえず再生開始時にフル画面で立ち上がるのをやめてくれればなぁ…どこかに設定出来るところがあるのかしら？&lt;br /&gt;&lt;br /&gt;と、まあ、このように筆者自身色々弄り回すのが好きな人間なのであまりでかいことは言えないかもしれないが、世の中には兎角、ワケも分からず色々と弄り回して事態を悪化させるのが好きな人が多いようである。&lt;br /&gt;例えば昨日の2chDTV板のx264スレの書き込み。&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;自分のエンコード環境はaviutlで編集しavsファイルを作りavsをaviutlに読み込ませて aviutlとavisynthを使い”x264出力(mp4/mkv)プラグイン”でmp4ファイルを作っています。&lt;/i&gt;&lt;br /&gt;&lt;i&gt;オプションは&lt;/i&gt;&lt;br /&gt;&lt;i&gt;--crf 20 --profile high --preset medium --level 4.2 --ref 3 --mixed-refs --bframes 3 --qpstep 8 --weightb --weightp 0 --trellis 0 --direct auto --subme 7 --no-fast-pskip --no-dct-decimate --partitions p8x8,b8x8,i8x8,i4x4 --8x8dct --scenecut 75 --me umh --merange 32 --aq-mode 0 --psy-rd 0:0 --no-mbtree --b-adapt 1 --threads auto --thread-input&lt;/i&gt;&lt;/blockquote&gt;これを見たDark_Shikari氏の反応はこのようなものだった&lt;br /&gt;&lt;blockquote&gt;20:09 (Dark_Shikari) also, the non-saging post asking for settings help&lt;br /&gt;20:09 (Dark_Shikari) with unbelievably bad commandline&lt;br /&gt;20:09 (Dark_Shikari) smells like megui&lt;/blockquote&gt;確かにひどい設定だと思う。一体何を考えたらこんな設定になるのか意図がさっぱりつかめない。&lt;br /&gt;&lt;br /&gt;こんなことするくらいなら、ただ単に&lt;br /&gt;--preset slow --tune animation --profile high --level 4.2&lt;br /&gt;としたほうが絶対にいいに決まっている。&lt;br /&gt;&lt;br /&gt;なんでこんな設定にするのやら…多分、大昔に書かれたあやふやな情報を読んで、それを鵜呑みにしてるんだろうなぁ。&lt;br /&gt;tobinaka氏はかつてサイトを閉じる際に、それまでに彼が書いた記事を削除した。&lt;br /&gt;あれはやっぱり正解なんだと思う。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-8077251474811021290?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/8077251474811021290/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/01/blog-post_26.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8077251474811021290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/8077251474811021290'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/01/blog-post_26.html' title='弄りたがる人達'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-3332254969055945252</id><published>2010-01-23T13:47:00.001+09:00</published><updated>2010-01-23T15:17:39.345+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><title type='text'>日記</title><content type='html'>UtVideoの梅澤氏がなにやら不具合の調査をしたいらしい。&lt;br /&gt;http://umezawa.dyndns.info/wordpress/?p=1468&lt;br /&gt;サンプルは少しでも多い方がいいだろうから、とりあえず適当に英訳してDoom9に投稿しておいた。&lt;br /&gt;実は梅澤氏もDoom9にはレジストしているので、やろうと思えばご自分で出来るのだが、英語は苦手なのでパスとのことだ。&lt;br /&gt;筆者も英語は得意でも何でもないんだけどね…tobinaka氏はどこいったんだ？&lt;br /&gt;&lt;br /&gt;x264はとうとうr1400になった。&lt;br /&gt;速いなぁ…まだlavf/ffms2のビルドの仕方、わかんないよ…。&lt;br /&gt;とりあえずいつも通り、nal-hrdパッチを当ててビルドした。これもいい加減、正式にcomittしてくれないかな。&lt;br /&gt;kierank氏がんばって－。&lt;br /&gt;&lt;br /&gt;P.S. インタレエンコでCBP Bufferが変なことになってる…これは、しばらくは駄目なのかなorz&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-3332254969055945252?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/3332254969055945252/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/01/blog-post_23.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/3332254969055945252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/3332254969055945252'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/01/blog-post_23.html' title='日記'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-1904142937650039696</id><published>2010-01-17T10:12:00.001+09:00</published><updated>2010-01-20T11:14:30.322+09:00</updated><title type='text'>I have caught a cold.</title><content type='html'>昨日から体調が思わしくない。&lt;br /&gt;どうやら風邪をひいた模様。&lt;br /&gt;IRCで「風邪ひいた」と言ったら、kierank氏から「それは俺のがうつったに違いない」と言われた。&lt;br /&gt;まさかイギリス人に風邪をうつされるとは...IRCって恐ろしい(を&lt;br /&gt;&lt;br /&gt;x264_r1391用nal-hrdパッチをmuken氏が書いてくれたので、さっそくビルドし直し。&lt;br /&gt;試しに寝る前にDVDを一本インタレ保持でセットしておいたが、どうやら問題はない様子。&lt;br /&gt;&lt;br /&gt;自ビルドを公開している人の最新を幾つか見てみたが、lavf/ffms2を有効にしている人は少ない模様。&lt;br /&gt;やっぱりそうだよなぁ、winの場合は、正直あんまり需要ないもんなぁ。&lt;br /&gt;むしろ、gui.auoとかx264Encoderみたいなものにとっては、この変更はかなり痛いのかも。&lt;br /&gt;たしかmuken氏も「これは大打撃」とか言ってたし...。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-1904142937650039696?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/1904142937650039696/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/01/i-have-caught-cold.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1904142937650039696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1904142937650039696'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/01/i-have-caught-cold.html' title='I have caught a cold.'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-2361170309313293019</id><published>2010-01-14T21:04:00.000+09:00</published><updated>2010-01-14T21:04:03.970+09:00</updated><title type='text'>x264が久々の更新</title><content type='html'>r1376が昨年の12月15日だから、約1ヶ月ぶりか。&lt;br /&gt;&lt;br /&gt;RIPはとりあえずニコニコ用には使えないだろうな。&lt;br /&gt;IDRがなければシークが効かないのがflashplayerだから。&lt;br /&gt;&lt;br /&gt;ffms2とlavfをenableにするにはどうすればいいのだろうか？&lt;br /&gt;ffms2もffmpegも自ビルドしたことがないからさっぱりわからん。&lt;br /&gt;そのうちDoom9かDoom10に解説が出るだろうから、それまでは様子見しとこう。&lt;br /&gt;どのみちAviSynth使う分には関係ないし。&lt;br /&gt;&lt;br /&gt;問題はnal-hrdのほうかな。&lt;br /&gt;早く誰かパッチ書いてくれないかしら。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-2361170309313293019?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/2361170309313293019/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/01/x264.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/2361170309313293019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/2361170309313293019'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/01/x264.html' title='x264が久々の更新'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-6967352954927541077</id><published>2010-01-14T04:05:00.000+09:00</published><updated>2010-01-14T04:05:02.642+09:00</updated><title type='text'>SWFをAVIに変換する方法</title><content type='html'>前回「ちょっと調べれば自分で出来る」と書いた。&lt;br /&gt;SWFからのエンコードのことである。&lt;br /&gt;書いたときはそう思っていたのだが、その後、頭の中のもう一人の自分がこうささやいた。&lt;br /&gt;「本当にちょっとで済むのか？」&lt;br /&gt;&lt;br /&gt;ちょっとで済むに決まっている。&lt;br /&gt;済むだろう。&lt;br /&gt;済むはずだ。&lt;br /&gt;なんせSWFなんて作ったことのない筆者ですらなんとかなっているのだから。&lt;br /&gt;念のために確認してみようと思い「swf mp4 変換」で検索してみた。&lt;br /&gt;&lt;br /&gt;…&lt;br /&gt;&lt;br /&gt;検索にBingなんか使ったのがまずかったのかと思い、googleでも検索してみる。&lt;br /&gt;&lt;br /&gt;…&lt;br /&gt;&lt;br /&gt;どうもちょっとでは済まないみたい。&lt;br /&gt;これならいけるだろうという方法を詳しく紹介しているページは見つからなかった。&lt;br /&gt;&lt;br /&gt;一度、やり方をまとめて書いておいた方がいいのかもしれない。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-6967352954927541077?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/6967352954927541077/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/01/swfavi.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6967352954927541077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6967352954927541077'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/01/swfavi.html' title='SWFをAVIに変換する方法'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-2118748718877267148</id><published>2010-01-12T07:58:00.004+09:00</published><updated>2010-01-12T10:09:28.425+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='活動記録'/><title type='text'>早起き</title><content type='html'>朝の4時前に目が覚めた。&lt;br /&gt;SWFをMP4にして欲しいとの依頼がスレに来ていたので、1時間半程度で仕上げた。&lt;br /&gt;今回の依頼も部分的にスプライトを使っているようで、swf.vfpではうまく変換出来なかった。&lt;br /&gt;&lt;br /&gt;ニコニコが出来て2年以上が経ち、βやγの頃は少なかった手描き動画も今では大量に投稿されるようになった。&lt;br /&gt;つべ板の手描き動画スレを覗いてみれば、トレス／非トレス／二次創作ではない完全なオリジナル(これは少ないみたいだけど)と、皆さん色々誘惑に耐えながら「日産10枚」とか「半年かかった」とか、なかなか大変そうなご様子である。&lt;br /&gt;&lt;br /&gt;筆者は昔、某エロゲのプレイ動画を投稿していたことがあるのだが、シリーズ2本を完結させたところで投稿することをやめてしまった。&lt;br /&gt;画面をキャプチャーしながらゲームをするという作業に嫌気がさしたのだ。&lt;br /&gt;ああマンドクサ、やってらんねぇ…。&lt;br /&gt;&lt;br /&gt;もともとプレイ動画なんてものは、手描きに比べればかかる労力は遥かに低い。多少編集に凝ってみたところでたかが知れている。ましてやアクションゲームではなくエロゲである。気を付けることなんてテキストを送るスピードをどの程度にするかくらいのものだ(あとは〇〇なシーンの修正とか…)。&lt;br /&gt;&lt;br /&gt;そういう人間であるから、彼／彼女らの書き込みを眺めていると、その情熱には本気で感心してしまう。&lt;br /&gt;&lt;br /&gt;キャプチャーしながらゲームをするのは嫌だったが、編集とエンコードは結構楽しめた。&lt;br /&gt;特にエンコードは楽しい。&lt;br /&gt;限られた容量、ビットレートのなかで、いかにしてより良い結果を叩きだすか…うん、いいねぇ。&lt;br /&gt;&lt;br /&gt;とりあえずエンコだけならそんなに手間はかからないし、平均点くらいはもらえる程度の知識は持っているつもりなので、他人の作った動画のエンコを代わりにやるというお遊びを、かれこれ2年ほどやってきたわけだが、今回のような依頼をこなす際にいつも考えることがある。&lt;br /&gt;「もし代理でエンコするような人がいなかったらこの人はどうしたのだろう？」&lt;br /&gt;「そもそも自分のここ数カ月の労力の結晶を他者に委ねるということに抵抗はないのだろうか？」&lt;br /&gt;「ちょっと調べれば自分で出来るだろうに…」&lt;br /&gt;&lt;br /&gt;そう、「ちょっと調べれば」自分で出来るだろう。&lt;br /&gt;でも現実にはそれが出来ない人がいるわけである。&lt;br /&gt;おそらく彼ら／彼女らは、動画のエンコードという行為に楽しさをあまり感じることがないのだろう。好きでないことに取り組んだところで良い結果が生まれることは殆どない。これが受験とかならば嫌でも頑張るしかないわけだが、ましてや趣味の世界のこととなればなおのこと。&lt;br /&gt;&lt;br /&gt;筆者は絵を描くという行為に何ら喜びを見いだすことがないため、幼少の頃から禄に落書きすらしなかった人間である。&lt;br /&gt;&lt;br /&gt;多分、これと同じことなんだろうなぁ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-2118748718877267148?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/2118748718877267148/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/01/blog-post_12.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/2118748718877267148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/2118748718877267148'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/01/blog-post_12.html' title='早起き'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-6140426776402406677</id><published>2010-01-11T23:20:00.002+09:00</published><updated>2010-01-11T23:27:16.304+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='身の回り'/><title type='text'>接触事故？</title><content type='html'>父親が自転車と接触事故を起こしたらしい。&lt;br /&gt;話を聞いてみると、信号を左折中に直進してきた自転車が車体の左後部にぶつかった模様。&lt;br /&gt;相手側(女性)には怪我もなく、自転車も壊れてはいないようなので、大事には至りそうにないが、なにやら父の「後方不注意」とかいってゴネたがっているらしい。&lt;br /&gt;さて、どうなることやら。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-6140426776402406677?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/6140426776402406677/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/01/blog-post_3395.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6140426776402406677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/6140426776402406677'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/01/blog-post_3395.html' title='接触事故？'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-895902773726653012</id><published>2010-01-11T02:45:00.005+09:00</published><updated>2010-01-17T10:23:14.536+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='動画'/><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><title type='text'>ベネディクト戦記　エンコード設定</title><content type='html'>この前筆者がエンコした動画に「エンコ設定教えてよ」というコメントがついていたので、ここに書いておくことにする。 &lt;br /&gt;&lt;iframe frameborder="0" height="176" scrolling="no" src="http://ext.nicovideo.jp/thumb/sm9293085" style="border: 1px solid rgb(204, 204, 204);" width="312"&gt;&amp;lt;a href="http://www.nicovideo.jp/watch/sm9293085"&amp;gt;【ニコニコ動画】ボーダーブレイク　ベネディクト戦記15　第3採掘島（B）&amp;lt;/a&amp;gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;0.使用したものとか&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;エンコード素材：&lt;br /&gt;DVDレコーダーによる録画（VOBファイル、19725フレーム、10分58秒)&lt;br /&gt;&lt;br /&gt;使用ツール：&lt;br /&gt;DGMPGDec 1.5.7&lt;br /&gt;AviSynth 2.5.8MT(SEt)&lt;br /&gt;VirtualDub 1.9.8(プレビュー用)&lt;br /&gt;avs2yuv.exe&lt;br /&gt;pipebuf.exe&lt;br /&gt;x264.exe (rev1376/64bit)&lt;br /&gt;wavi.exe&lt;br /&gt;neroaacenc.exe 1.5.3.0&lt;br /&gt;mp4box.exe&lt;br /&gt;&lt;br /&gt;なお解説にあたってはファイルパスは省略&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.d2vファイルと音声ファイルの作成&lt;/b&gt;&lt;br /&gt;DGIndex.exe -ai source.vob -o source -ia 3 -fo 0 -yr 2 -om 2 -hide -exit &amp;gt;null&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.avisynth scriptの作成&lt;/b&gt;&lt;br /&gt;#ベネディクト戦記 #16 movie.avs&lt;br /&gt;&lt;i&gt;SetMemoryMax(1024)&lt;br /&gt;SetMTMode(2,0)&lt;br /&gt;LoadPlugin("DGDecode.dll")&lt;br /&gt;LoadPlugin("NicAudio.dll")&lt;br /&gt;LoadPlugin("YadifMod.dll")&lt;br /&gt;LoadPlugin("NNEDI2.dll")&lt;br /&gt;LoadPlugin("mt_masktools-25.dll")&lt;br /&gt;LoadPlugin("RemoveGrainSSE2.dll")&lt;br /&gt;Import("LimitedSharpenFaster.avs")&lt;br /&gt;LoadPlugin("mvtools2.dll")&lt;br /&gt;LoadPlugin("AddGrainC_11.dll")&lt;/i&gt; #メモリリーク回避のためver.1.1を使用&lt;br /&gt;&lt;i&gt;LoadPlugin("Gradfun2db.dll")&lt;br /&gt;Import("Gradfun2dbmod.avs")&lt;br /&gt;Import("GrainFactory3.avs")&lt;/i&gt;&lt;br /&gt;#映像、音声の読み込み&lt;br /&gt;&lt;i&gt;MPEG2Source("source.d2v", cpu=6)&lt;/i&gt; #ブロックノイズがひどいのでcpu=6&lt;br /&gt;&lt;i&gt;AudioDub(NicAC3Source("source T80 2_0ch 256kbps DELAY24ms.ac3", channels=2))&lt;br /&gt;DelayAudio(0.024)&lt;br /&gt;Normalize(volume=1.0,show=false)&lt;/i&gt;&lt;br /&gt;#動画の開始部分の崩れた映像を1秒弱削る&lt;br /&gt;&lt;i&gt;Trim(25,0)&lt;/i&gt;&lt;br /&gt;#インターレース解除&lt;br /&gt;#60fps? ニコニコでは再生重過ぎ&amp;amp;ビットレート足りないだろｊｋ&lt;br /&gt;&lt;i&gt;interp=NNEDI2(qual=3)&lt;br /&gt;YadifMod(edeint=interp)&lt;/i&gt;&lt;br /&gt;#周囲の黒ベタを全部削り、16：9にリサイズ&lt;br /&gt;＃アスペクト比はほんの少し狂うが、画面の大きさ&amp;amp;見やすさ優先&lt;br /&gt;&lt;i&gt;Spline36Resize(768,432,15,21,-17,-16)&lt;/i&gt;&lt;br /&gt;#とにかくボケボケのソースなので思いっきりSharpenかけてから512x288にリサイズ&lt;br /&gt;&lt;i&gt;Sharpen(1.0)&lt;br /&gt;LimitedSharpenFaster(dest_x=512, dest_y=288, SMode=4, LMode=4, strength=200)&lt;/i&gt;&lt;br /&gt;#30fpsの動きの悪さをごまかす＆ビットレート削減のため、ちょっと強めにモーションブラー&lt;br /&gt;#ベネディクト戦記はやたら動きが激しいので、モーションブラーかけるとカッコイイ(と思う)&lt;br /&gt;&lt;i&gt;super=MSuper()&lt;br /&gt;bw_vec=MAnalyse(super, isb=true)&lt;br /&gt;fw_vec=MAnalyse(super, isb=false)&lt;br /&gt;MFlowBlur(super, bw_vec, fw_vec, blur=45)&lt;/i&gt;&lt;br /&gt;#壁や地面ののっぺり対策にディザとシルバーグレインをかける&lt;br /&gt;#ただし、明部にかけるとノイズが目立ちすぎるので、中間部と暗部のみ&lt;br /&gt;&lt;i&gt;GradFun2dbmod(custom="GrainFactory3(g1str=10, g2str=10, g3str=0, g1shrp=50, g2sharp=50,g1size=1.4, g2size=1.1, th3=120, th4=120)&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Distributor()&lt;/i&gt;&lt;br /&gt;&lt;i&gt;return last&lt;/i&gt; #スクリプト終了&lt;br /&gt;&lt;br /&gt;３.音声のエンコード&lt;br /&gt;とりあえずHE-AACで64kbps使っとけば、まず音質で文句はでない&lt;br /&gt;wavi.exe movie.avs audio.wav&lt;br /&gt;neroaacenc.exe -br 64000 -2pass -if audio.wav -of audio.aac&lt;br /&gt;&lt;br /&gt;4.映像のエンコード&lt;br /&gt;基本方針はプレミアム会員のファイルサイズ100MBをほぼ使い切る＆多少のノイズは気にしないでディテール重視。&lt;br /&gt;x264は非常に優秀なので、あれこれオプションをいじってもいいことは殆どない。適当に任せておけば、うまいこと良い感じに誤魔化してくれる。&lt;br /&gt;pipebuf.exe avs2yuv.exe movie.avs -o video.y4m -o - : ^&lt;br /&gt;x264_x64.exe - stdin y4m --pass 1 --bitrate 1182 --tune film --bframes 5 --b-pyramid normal --direct auto --weightp 0 --keyint 300 --aq-mode 2 -o null&lt;br /&gt;&lt;br /&gt;x264_x64.exe video.y4m --pass 2 --bitrate 1182 --tune film --bframes 5 --b-pyramid normal　--ref 8 --keyint 300 --direct auto --me umh --subme 10 --trellis 2 --colormatrix smpte170m&lt;br /&gt;--weightp 0 --no-dct-decimate --aq-mode 2 -o video.264&lt;br /&gt;&lt;br /&gt;５.映像と音声を結合&lt;br /&gt;mp4box.exe -add video.264:fps=30000/1001 -add audio.aac -new result.mp4&lt;br /&gt;&lt;br /&gt;以上で全行程終了&lt;br /&gt;所要時間　約１時間半(Core2Quad Q9450 定格 / Windows7pro x64 / メモリ8GB)&lt;br /&gt;&lt;br /&gt;６.最後に&lt;br /&gt;筆者は、このゲームをやったことはおろか、実物を見たことすらありません(近所のゲーセンには入っていませんでした)。&lt;br /&gt;仕方が無いので、画質に関しては自分の好み＆視聴者受けしそうな感じになるように、適当にフィルターかけていじってます。&lt;br /&gt;いままでのシリーズ16回のうち14回は自分がエンコしました。&lt;br /&gt;もし変だったらごめんね、ベネディクトさん...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-895902773726653012?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/895902773726653012/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/01/hrefhttpwww.html#comment-form' title='6 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/895902773726653012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/895902773726653012'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/01/hrefhttpwww.html' title='ベネディクト戦記　エンコード設定'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-1213951050579624500</id><published>2010-01-11T02:17:00.002+09:00</published><updated>2010-01-11T23:28:18.117+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='動画'/><category scheme='http://www.blogger.com/atom/ns#' term='エンコード'/><title type='text'>活動記録</title><content type='html'>10日(日)&lt;br /&gt;朝っぱらからニコニコ用代理エンコを2本(依頼人は同一) &lt;br /&gt;内容：作業用BGM&lt;br /&gt;ソース：VC-1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-1213951050579624500?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/1213951050579624500/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/01/blog-post_11.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1213951050579624500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1213951050579624500'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/01/blog-post_11.html' title='活動記録'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6785131310840836746.post-1243490926008857485</id><published>2010-01-11T01:45:00.000+09:00</published><updated>2010-01-11T01:56:04.188+09:00</updated><title type='text'>始まりました</title><content type='html'>いつまで続くことやら…。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6785131310840836746-1243490926008857485?l=csbarn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://csbarn.blogspot.com/feeds/1243490926008857485/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://csbarn.blogspot.com/2010/01/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1243490926008857485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6785131310840836746/posts/default/1243490926008857485'/><link rel='alternate' type='text/html' href='http://csbarn.blogspot.com/2010/01/blog-post.html' title='始まりました'/><author><name>Chikuzen</name><uri>http://www.blogger.com/profile/09325511909981096581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
