2009年9月22日星期二

PSP+Mencoder+FFMPEG+X264的搭配版本

會寫這一篇文章,主要是因為先前用來轉檔的script,在Debian Squeeze的版本上,使用 debian-multimedia 的版本匹配上出錯,造成無法再轉錄 h264 的影片到 PSP 上了。有鑑於此,還是寫個文件記錄一下好了。

轉錄的工具軟體如下:
mencoder 1:1.0.rc2svn20090823-0.0
libavcodec52 5:0.5+svn20090823-0.0
libx264-68 1:0.svn20090730-0.0
libfaac0 1.28-0.3

以上是 Debian Squeeze 的搭配,很不巧的是目前的 libx264-68 會無法轉錄為 H.264 的檔案,所以我們改用上一個版本:
libx264-67
libx264-dev

安裝後,請再重新編譯一次 mencoder(別忘記裝 libfaac-dev),配合我常用的 rip2pmp,又能正常地轉錄地將影片轉錄成 h.264 的格式了。

參考:
rip2pmp :這是我用來快速轉錄成 H.264 格式的 Script,支援PSP,PS3,IPOD,影片來源只要是mplayer能撥放的,皆可以轉錄。

2009年8月6日星期四

Grub2 如何加入別的 OS

在 /etc/grub.d/ 目錄下,有一些數字開頭的 script 檔,這些 script 檔會在執行 grub-mkconfig 時依序的執行並加到 grub.cfg 中。

所以當我們要加入一個 OS 項目時,可以這樣實作:
1. 加入一個 WinXP 的項目檔案,
# vim /etc/grub.d/40_winxp
#! /bin/sh -e
echo 」Adding Windows" >&2
cat << EOF
menuentry 「Windows XP」 {
set root=(hd0,1)
chainloader +1
}
EOF

然後再執行,grub-mkconfig,就會加入WinXP的選項。但我並不建議這樣用,太累了。
Debian有更聰明的做法,/etc/grub.d/下有一個30_os_prober的 script,望文生意就能知道它能自動偵測有什麼OS在硬碟裡。

首先,安裝os-prober後,再執行一次 grub-mkconfig,就會發現到 console 有這樣的敘述:

Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.26-2-686-bigmem
Found initrd image: /boot/initrd.img-2.6.26-2-686-bigmem
Found Microsoft Windows XP Professional on /dev/sda1

這樣就表示已經抓到Windows的磁區了,這樣就不用再煩惱OS開機碟怎麼設定了!

Debian Testing 升級到grub2

今早upgrade的時候,發現debian已建議轉換成 grub2,既然都這樣建議了,當然是把它換掉。

一開始安裝 grub2-pc後,會先相容舊的grub,開機的時候會出現:

When you have verified GRUB 2 works, you can use this command to
complete the upgrade: upgrade-from-grub-legacy

選擇linux-kernel的選項後,再執行 upgrade-from-grub-legacy,就能轉換成功。

設定檔由原本的 menu.lst 變成 /etc/grub.d/ 和 /etc/default/grub,設定完這兩個檔案內容後,執行 /usr/sbin/grub-mkconfig 就能產生 /boot/grub/grub.cfg,也就是開機時的選單了。

配合新版的grub2-splashimage,開機選單真是漂亮!而且,我覺得開機變快!


GRUB 2 has the following tasks:

* Create a compact core image. This will make Stage 1.5 unnecessary.
* Add support for dynamic loading to the core image, so that it can extend itself at the run time rather than at the build time.
* Add real memory management, to make GNU GRUB more extensible.
* Add a more object-oriented framework for file systems, files, devices, drives, terminals, commands, and OS loaders.
* Add support for internationalization. This includes support for non-ASCII character code, message catalogs like gettext, fonts, graphics console, and so on.
* Add an actual localization, based on the above internationalization support. We will target on Japanese as the first step.
* Segregate code specific to i386-pc from generic code, to make GNU GRUB portable.
* Add support for cross-platform installation.
* Develop additional software packages which will help our project and hopefully other projects.

2009年7月3日星期五

體驗multi-thread decode的mplayer

先前閱讀了GeeXbox的 multi-thread decode 的功能,感到非常有興趣,因為我自已有收藏了許多1080p H264的影片,但我的Althon X2 3600+其實撥不太動。看到了Multi-thread decode的功能,當然要好好嘗試,讓我的 CPU 可以播放高清影片。

影片格式必須是 Mpeg1/2 H264才可以,大部份的高清片都以Mpeg2, H264為主,所以不用擔心。

先記錄一下做法。

1. 下載最新的 mplayer:
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer

2. 下載 FFmpeg-mt:
git clone git://gitorious.org/~astrange/ffmpeg/ffmpeg-mt.git

3. 更新 mplayer 的libav*目錄
cd mplayer
rm -fr libav*
cp -a ../ffmpeg-mt/libavformat .
cp -a ../ffmpeg-mt/libavcodec .
cp -a ../ffmpeg-mt/libavutil .

4. 開始編譯和make
./configure
make
make install


編譯完成後,隨便拿一個測試影片(網路上也有提供高清的試看),執行下列指令來撥放:
mplayer -vc ffh264 -lavdopts threads=[N] movie.mp4 (N代表CPU的核心數)

撥放時用top來看,可以看到 mplayer 的 loading 會超過100%,而且畫面很順,真是開心極了。按照ffmpeg-mt的官方說法,目前除了Atom N330之外,其它雙核以上CPU都可以順暢。

這應該是C/P值最高的高清撥放功能了。

提外話,等我買了Nvidia8系列的顯示放後,再來測試 nvidia-libvdpau 的高清撥放功能。

2009年6月27日星期六

GeeXBox 1.2.2

Detailed Changelog (relative to 1.2.1 release):

- Multi-threaded video decoding for MPEG-1/2/4 and H.264 codecs.
- Support for newly discovered DVD MovieProtect encryption method.
- Extended DVD CSS descrambiling capabilities.
- Removal of GOOM audio visualization (was causing too much troubles).
- Automount daemon enhancements.
- Upgrade of MPlayer and its set of codecs.

我很好奇multi-threaded video decoding是怎麼做到的,mplayer有辦法達到multi-thread decode嗎?會不會是GeeXbox團隊自已實做出來的?

2009年1月5日星期一

宇瞻 Apacer AH321 紅寶石16G隨身碟入手

最近不小心摔到了用了近兩年的NEXS 4G的隨身碟,資料都不見了...><,該隨身碟的讀取有15MB,寫入了7MB以上。而且不貴。

由於隨身碟壞掉的關係,於是就上網物色了一下便宜又大碗的隨身碟。市面上標榜快速讀寫的牌子有OCZ, patriot,但16G的價格破千,甚至到1.5k,實在是買不起,最後在討論區看到了這一隻隨身碟。16G的價格在大同3C才$799,實在是滿心動的。

於是下班後就買了跑去大同買了該碟,回家用hdparm -t測試,讀取竟然有30MB!!!!,寫入也有15MB,實在是太嚇人了。幾乎跟OCZ, Patriot的牌子一樣快。

買到了物美價廉的好物,真是開心 :D

2008年8月2日星期六

iconv的初體驗

最近因為公司任務的關係,我要負責弄DVB-T的東西。DVB-T對我是一個全新的挑戰,也滿有趣的。第一個遇到的問題就是EPG的亂碼。想到亂碼的解決,就是澆冷水...囧rz.....恕我開個玩笑。:-P

咳咳...在Linux的環境下,一想到轉碼,就會想到iconv!

對iconv,小弟都只聞其名、未深入體驗,這次剛好有個機會來嘗試。試著寫個簡單的小範例來轉換字串成UTF-8或是Big5。

PS:因為blogger不知道要怎麼顯示 <> 這樣的符號(會被辨試成delimiter),所以改用 "" 表示。


#include "iconv.h"
#include "string.h"
#include "stdlib.h"
#include "errno.h"

int main( int argc, char **argv )
{
iconv_t cd;
size_t in_s, out_s;

/* UTF-8 轉 Big5 */
cd = iconv_open("BIG-5", "UTF8");

char *ibuf = "我是阿信", *in_ptr;
char *obuf = NULL, *out_ptr;

in_s = strlen(ibuf);
in_ptr = ibuf;

obuf = malloc( in_s * 3 );
out_s = in_s * 3;
out_ptr = obuf;

if( cd == (iconv_t )-1 ){
fprintf( stderr, "error opening iconv \n" );
exit(1);
}

if( iconv( cd, &in_ptr, &in_s, &out_ptr, &out_s) == -1 ){
printf("errno: %s\n", strerror(errno));
}

*out_ptr = '\0';
printf("%s, %s\n",ibuf, obuf);

iconv_close( cd );
free( obuf );
return 0;
}

接下來就 gcc -Wall a.c -o a.out,開一個Big5的terminal,執行一下這個新生的a.out,就能看到轉換後的字串了。

試用過了iconv之後,花了一點時間修改dvb-apps的scan程式,利用下scan指令後,會得到正確的節目表的名稱在新產生的channel.conf檔案內了。