[[ノート/ノート]]~
訪問者 &counter;   最終更新 &lastmod();

*Linuxでビデオデータを作る [#o2e18d36]
ビデオデータフォーマットをいろいろと変更してみたい。そのためには
エンコーダに手を加える必要がある。Linuxでないと不都合。

***ググった結果 [#m71a72f8]
-[[Linuxによるビデオ編集:http://opentechpress.jp/special/07/07/13/0912233.shtml]]
-[[Linux ムービー・動画環境:http://real-baishi.net/index.php?Linux%20%A5%E0%A1%BC%A5%D3%A1%BC%A1%A6%C6%B0%B2%E8%B4%C4%B6%AD]]  [[DVD ビデオ作成:http://real-baishi.net/linux/video/dvd_author.html]]
-[[LinuxでDVDを作成:http://www.nslabs.jp/linux-burn-dvd.rhtml]]

***まず、画面キャプチャによってソースデータを作ってみる。 [#u6df9686]
-スクリーンキャプチャは[[アマレココ:http://www.vector.co.jp/soft/winnt/art/se439053.html]](V1.21)を使ってみる。 これにてスクリーン上の操作をキャプチャし、raw data(BMP)のデータを作る。

***H264へのエンコード [#f91e57e7]
-Win上でffmpegを使うことも考えられるが、ffmpeg自体はソースオンリー配布であり、プリコンパイルパッケージを使うとすると、x264は自分で改変できない(自分でコンパイルできないから)。
--プリコンパイルパッケージ[[gui4ffmpeg:http://cowscorpion.com/dl/gui4ffmpeg.html]]

--プリコンパイルパッケージ携帯変換君3GP_Convert~
携帯変換君にffmpeg.exeがついてくるので、その中からffmpeg.exeとcygwin1.dllとcygz.dllをコピー。

-Linuxの場合ffmpegを自分でコンパイルするのがよい。~
ffmpeg -i nmr1_raw_1.avi -pix_fmt yuv420p -f yuv4mpegpipe nmr1_raw_1.y4m~
pix_fmtでyuv420pを指定。出力コンテナ形式としてyuv4mpegpipeを指定

 FFmpeg version SVN-r11168, Copyright (c) 2000-2007 Fabrice Bellard, et al.
   configuration: --enable-gpl --enable-libx264 --enable-libxvid  --enable-pthreads --enable-libmp3lame
   libavutil version: 49.5.0
   libavcodec version: 51.48.0
   libavformat version: 52.1.0
   built on Dec 20 2007 16:36:33, gcc: 4.1.2 20070925 (Red Hat 4.1.2-33)
 Input #0, avi, from 'nmr1_raw_1.avi':
   Duration: 00:00:20.0, start: 0.000000, bitrate: 753983 kb/s
     Stream #0.0: Video: rawvideo, rgb32, 1028x764 [PAR 0:1 DAR 0:1], 30.00 tb(r)
 Output #0, yuv4mpegpipe, to 'nmr1_raw_1.y4m':
     Stream #0.0: Video: rawvideo, yuv420p, 1028x764 [PAR 0:1 DAR 0:1], q=2-31,  200 kb/s, 30.00 tb(c)
 Stream mapping:
   Stream #0.0 -> #0.0
 Press [q] to stop encoding
 frame=  601 fps=  6 q=0.0 Lsize=  691440kB time=20.0 bitrate=282742.6kbits/s
 video:0kB audio:0kB global headers:0kB muxing overhead inf%

***次にx264でYUV⇒H264変換 [#s7c984d2]
Linux上にインストールしたx264([[ホームはここ:http://www.videolan.org/developers/x264.html]])を使うと
-x264 -B 512 -o nmr1_raw.mkv nmr1_raw_1.y4m~
但し-B 512はビットレート512Kbpsで指定しないと怒る、-o nmr1_ra2_1.mkvは出力ファイル名だが形式としてmkv([[Matroskaコンテナ形式:http://www.matroska.org/]])を指定。次に入力ファイルnmr1_raw_1.y4mだがこれは前にyuvに展開したファイル。
-やってみると、240x180は「16で割れない」のでおかしくなるよという警告が出て、でも処理は完了。

 yuv4mpeg: 1028x764@30/1fps, 0:0
 x264 [warning]: width or height not divisible by 16 (1028x764), compression will  suffer.
 x264 [info]: using cpu capabilities: MMX MMXEXT SSE SSE2 Cache64
 x264 [info]: slice I:3     Avg QP:30.33  size: 49692  PSNR Mean Y:35.30 U:44.42 V:45.02 Avg:36.77 Global:32.51
 x264 [info]: slice P:598   Avg QP:24.87  size:  1544  PSNR Mean Y:44.38 U:48.10 V:48.42 Avg:45.26 Global:41.27
 x264 [info]: mb I  I16..4: 75.5%  0.0% 24.5%
 x264 [info]: mb P  I16..4:  2.5%  0.0%  0.2%  P16..4:  6.0%  0.4%  0.2%  0.0%  0.0%    skip:90.8%
 x264 [info]: final ratefactor: 37.17
 x264 [info]: SSIM Mean Y:0.9924697
 x264 [info]: PSNR Mean Y:44.337 U:48.078 V:48.405 Avg:45.219 Global:41.134  kb/s:428.27
 
 encoded 601 frames, 4.22 fps, 428.80 kb/s

-これで出来たファイルは、matroska形式なので、テスト視聴にはそれを受け付けるプレイヤーが必要。~
VLC(MediaLANの再生ソフト)でOK。
-再生できる(VLCは受け付ける)が、上記のサイズのエラーのためか、画面は乱れている。何が出来るかな?

***もう1度少し小さいデータで同じプロセスを行う [#td718bc4]
-WindowsでアマレッコAmaRecCoを使って画面をBMP-AVIでキャプチャ。今回は画面サイズを688x480に設定(16で割れる数) ⇒ nmr2_raw.avi
-WinからLinuxホストへ転送。Win側でbzip2で圧縮しておいてから転送し、Linux側で解凍。
-Linuxホストで、ffmpegを用いてBMP-AVIからYUVに変換。~
ffmpeg -i nmr2_raw.avi -pix_fmt yuv420p -f yuv4mpegpipe nmr2_raw.y4m

 [root@salt nmr1]# ffmpeg -i nmr2_raw.avi -pix_fmt yuv420p -f yuv4mpegpipe nmr2_raw.y4m
 FFmpeg version SVN-r11168, Copyright (c) 2000-2007 Fabrice Bellard, et al.
   configuration: --enable-gpl --enable-libx264 --enable-libxvid --enable-pthreads  --enable-libmp3lame
   libavutil version: 49.5.0
   libavcodec version: 51.48.0
   libavformat version: 52.1.0
   built on Dec 20 2007 16:36:33, gcc: 4.1.2 20070925 (Red Hat 4.1.2-33)
 Input #0, avi, from 'nmr2_raw.avi':
   Duration: 00:00:08.5, start: 0.000000, bitrate: 317038 kb/s
     Stream #0.0: Video: rawvideo, rgb32, 688x480 [PAR 0:1 DAR 0:1], 30.00 tb(r)
 File 'nmr2_raw.y4m' already exists. Overwrite ? [y/N] y
 Output #0, yuv4mpegpipe, to 'nmr2_raw.y4m':
    Stream #0.0: Video: rawvideo, yuv420p, 688x480 [PAR 0:1 DAR 0:1], q=2-31, 200  kb/s, 30.00 tb(c)
 Stream mapping:
   Stream #0.0 -> #0.0
 Press [q] to stop encoding
 frame=  257 fps= 15 q=0.0 Lsize=  124325kB time=8.6 bitrate=118887.9kbits/s
 video:0kB audio:0kB global headers:0kB muxing overhead inf%
 
-次に、x264で、YUV⇒H264変換。~
x264 -B 512 -o nmr2_raw.mkv nmr2_raw.y4m

 [root@salt nmr1]# x264 -B 512 -o nmr2_raw.mkv nmr2_raw.y4m
 yuv4mpeg: 688x480@30/1fps, 0:0
 x264 [info]: using cpu capabilities: MMX MMXEXT SSE SSE2 Cache64
 x264 [info]: slice I:2     Avg QP:23.00  size: 34874  PSNR Mean Y:46.35 U:49.65  V:49.39 Avg:47.11 Global:40.06
 x264 [info]: slice P:255   Avg QP:12.06  size:  1423  PSNR Mean Y:55.65 U:58.76  V:58.13 Avg:56.31 Global:49.35
 x264 [info]: mb I  I16..4: 63.6%  0.0% 36.4%
 x264 [info]: mb P  I16..4:  2.5%  0.0%  0.7%  P16..4: 10.5%  0.2%  0.2%  0.0%   0.0%    skip:85.7%
 x264 [info]: final ratefactor: 14.31
 x264 [info]: SSIM Mean Y:0.9982503
 x264 [info]: PSNR Mean Y:55.577 U:58.687 V:58.065 Avg:56.237 Global:49.101  kb/s:403.98
 
 encoded 257 frames, 10.71 fps, 404.53 kb/s

-B-frameを使う
B-frameは使わない設定になっている。使うためには -b nn 但しnnはI,P間のbフレーム数~
x264 -B 512 -b 4 (-v) -o nmr2_raw.mkv nmr2_raw.y4m

-x264で-vを指定してログを書いた結果:

 yuv4mpeg: 688x480@30/1fps, 0:0
 x264 [info]: using cpu capabilities: MMX MMXEXT SSE SSE2 Cache64
 x264 [debug]: frame=   0 QP=36 NAL=3 Slice:I Poc:0   I:1290 P:0    SKIP:0    size=7529 bytes PSNR Y:35.96 U:41.02 V:41.08 SSIM Y:0.9744 9
 x264 [debug]: frame=   1 QP=36 NAL=2 Slice:P Poc:10  I:6    P:49   SKIP:1235 size=197 bytes PSNR Y:35.99 U:41.03 V:41.10 SSIM Y:0.97476
 x264 [debug]: frame=   2 QP=38 NAL=0 Slice:B Poc:2   I:0    P:0    SKIP:1288 size=63 bytes PSNR Y:35.97 U:41.02 V:41.10 SSIM Y:0.97469
 x264 [debug]: frame=   3 QP=38 NAL=0 Slice:B Poc:4   I:1    P:3    SKIP:1285 size=180 bytes PSNR Y:35.94 U:41.02 V:41.10 SSIM Y:0.97474
 x264 [debug]: frame=   4 QP=38 NAL=0 Slice:B Poc:6   I:0    P:1    SKIP:1287 size=101 bytes PSNR Y:35.96 U:41.02 V:41.10 SSIM Y:0.97470
 x264 [debug]: frame=   5 QP=38 NAL=0 Slice:B Poc:8   I:0    P:1    SKIP:1287 size=87 bytes PSNR Y:35.94 U:41.02 V:41.10 SSIM Y:0.97469
 x264 [debug]: frame=   6 QP=35 NAL=2 Slice:P Poc:20  I:10   P:35   SKIP:1245 size=358 bytes PSNR Y:36.00 U:41.04 V:41.17 SSIM Y:0.97487
 x264 [debug]: frame=   7 QP=38 NAL=0 Slice:B Poc:12  I:0    P:4    SKIP:1285 size=75 bytes PSNR Y:36.00 U:41.04 V:41.15 SSIM Y:0.97491
 x264 [debug]: frame=   8 QP=38 NAL=0 Slice:B Poc:14  I:0    P:4    SKIP:1285 size=111 bytes PSNR Y:35.99 U:41.04 V:41.15 SSIM Y:0.97484
 x264 [debug]: frame=   9 QP=38 NAL=0 Slice:B Poc:16  I:0    P:2    SKIP:1285 size=98 bytes PSNR Y:35.99 U:41.04 V:41.15 SSIM Y:0.97484
 x264 [debug]: frame=  10 QP=37 NAL=0 Slice:B Poc:18  I:0    P:4    SKIP:1285 size=86 bytes PSNR Y:36.00 U:41.04 V:41.15 SSIM Y:0.97484
 x264 [debug]: frame=  11 QP=33 NAL=2 Slice:P Poc:30  I:33   P:179  SKIP:1078 size=1027 bytes PSNR Y:36.47 U:41.05 V:41.21 SSIM Y:0.97632
 x264 [debug]: frame=  12 QP=37 NAL=0 Slice:B Poc:22  I:0    P:3    SKIP:1286 size=109 bytes PSNR Y:36.36 U:41.05 V:41.20 SSIM Y:0.97604
 x264 [debug]: frame=  13 QP=36 NAL=0 Slice:B Poc:24  I:0    P:3    SKIP:1286 size=138 bytes PSNR Y:36.36 U:41.05 V:41.20 SSIM Y:0.97604
 x264 [debug]: frame=  14 QP=36 NAL=0 Slice:B Poc:26  I:0    P:4    SKIP:1286   size=77 bytes
  PSNR Y:36.33 U:41.05 V:41.20 SSIM Y:0.97606
 x264 [debug]: frame=  14 QP=36 NAL=0 Slice:B Poc:26  I:0    P:4    SKIP:1286   size=77 bytes PSNR Y:36.33 U:41.05 V:41.20 SSIM Y:0.97606
 x264 [debug]: frame=  15 QP=36 NAL=0 Slice:B Poc:28  I:0    P:3    SKIP:1286 size=120 bytes PSNR Y:36.37 U:41.05 V:41.20 SSIM Y:0.97604

***RGP/BMP ⇒ YUVの変換について [#h87ef61e]
-参考ページのリスト [[tomixiのブックマーク:http://b.hatena.ne.jp/tomixi/rss]]
-その中でも役立ちそうなページ [[色情報の省略による画像圧縮:http://www.sm.rim.or.jp/~shishido/yuva.html]]
http://b.hatena.ne.jp/tomixi/rss
-[[AviSynth:http://sourceforge.net/project/showfiles.php?group_id=57023]]を使ってみよう。[[日本語の解説:http://www.avisynth.info/?FrontPage]] ソースはあるがWindowsだけ。
-更にAviSynthのお勧めにしたがってビデオソフト編集プログラム[[VirtualDubMod:http://sourceforge.net/projects/virtualdubmod/]]をインストール
-AviSynthの[[Script Examples:http://avisynth.org/mediawiki/Script_examples]]

***[[AVI形式>ノート/Video-AVI]] [#if355d93]

***MEncoder (MPlayerと同梱) [#m986d59c]
-[[MPlayer本家:http://www.mplayerhq.hu/design7/dload.html]]
-[[MPlayer/MEncoder manpage:http://tivo-mplayer.sourceforge.net/docs/mplayer-man.html]]
-[[MEncoder解説:http://www.geocities.jp/rattcv7/]] [[Mencoderを使う:http://shino.pos.to/linux/mencoder.html]]

***[[x264ソースを見る>ノート/x264ソース1]] [#ief7d9c7]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS