更好的转换数码相机(canon)中的录像

佳能相机中的录像格式为动态JPG的AVI影像,没有压缩,导致文件很大,因此需要转换为压缩格式,此处我们选择xvid格式。
首先要安装所需的软件,也可参考此
sudo aptitude install mencoder
注意:录像从相机中拷贝出来后最好立即进行转换操作,若进行了二次拷贝操作,录像中的时间信息有可能会丢失,而录像的元数据中又没有时间信息(这点很奇怪,为何video metadata中不包含创建时间信息?)。

1 转换所有的后缀为avi,因为我得到的文件中有大写的,也有小写的。

for i in *.AVI; do mv $i ${i%.AVI}.avi;done

2 转换格式,我在转换的时候没有改变大小,音频质量设置为6,视频质量设置为8,然后文件按照拍摄时间(精确到秒)进行重命名。

for i in M*.avi; do
mencoder -oac mp3lame -lameopts aq=7:vbr=2:q=6 -srate 32000 -vf harddup -ovc xvid -xvidencopts fixed_quant=8 $i -o test.avi
touch -m -r $i test.avi
mv test.avi `stat -c %y test.avi | awk ‘{print $1 $2 $3}’|cut -d”.” -f1|sed -e ‘s/-//g’ -e ‘s/://g’ `.avi
done

3 若你的totem不能播放此AVI,则说明你没有安装相应的插件,根据提示安装即可。安装完成后在nautilus有可能看不到video的thumbnail,可以进行此操作:

rm ~/.thumbnails/fail/gnome-thumbnail-factory/*

转换数码相机的录像格式

参考使用mencoder转换佳能数码相机录像文件的最佳参数
采用mencoder转换相机里的AVI格式:

mencoder MVI_2145.AVI -o 20070101-make_huntun.avi -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=800 -oac mp3lame -srate 11025 -channels 1 -af-adv force=1 -lameopts preset=medium -mc 0

我用了一个shell命令:

for i in *.avi;do mencoder $i -o mvi$i -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=800 -oac mp3lame -srate 11025 -channels 1 -af-adv force=1 -lameopts preset=medium -mc 0 ;done

msnconvert: 转换MSN的聊天记录到PIDGIN格式

这应该是我第一个以GPL3发布的C++程序。

依赖: libxml++2.6,因此你应该首先安装:

sudo aptitude install libxml++2.6c2a

我是在ubuntu gutsy平台上开发的,因此若是其他平台,你需要自己重新编译,编译命令可以参考包里的make文件。
msnconvert 0.1 source code
msnconvert 0.1 可执行文件
使用方法:
1、若你的pidgin已经使用了log reader(日志读取器)插件,则在blist.xml就包含了对应了信息,可以直接使用log reader的对应信息进行转换,但你需要告诉程序你的MSN聊天记录存放位置,这个目录下应该是一系列的XML文件。

./msnconvert -u /path/to/msn/history/

2、转换一个具体的XML聊天记录文件
比如,已经有一个XML文件,是和某个朋友产生聊天后的记录。
./msnconvert -f /path/to/user00234234.xml
注意:xml文件的名称必须保持原始名称,因为这里面包含了你朋友帐号的部分信息。
而且此处有一个理论上的BUG:若你的朋友里有几个非常相似的帐号,如love9@mail1, love91@mail2,这时系统就有可能判断错误。因为MSN产生的聊天记录名称是love9再加一串数字,而我现在还不知道这串数字的规律,因此就无法进行更明确的判断。

c++中的string转换

如何转换string到其他类型?如何从其他类型转换到string?
代码1:toString
template std::string toString(const T& a)
{
std::ostringstream ost;
ost << a; return ost.str(); }

代码2:fromString
templateT fromString( const std::string& s)
{
std::istringstream is(s);
T t;
is >> t;
return t;
}

使用方法:
int d = fromString( s );
string str=toString(d);

参考:
http://www.thescripts.com/forum/thread62219.html

转换vbb 3.0.3到phpbb3

集思学院已经用了很长时间的vbb3.0.3,现在有些功能在我们的服务器已经出问题了,而且不想再跟vbb了,因为数字流域论坛已经转换到phpbb了,为了以后维护方便,决定从vbb3.0.3转换到phpbb 3 rc1。(估计RC2版本就要出来了,BUG已经很少了)

因为之前已经写了一个webwiz到phpbb的转换程序,所以再写vbb3到phpbb3的转换程序,比上次要轻松不少,但webwiz的设计思想就是来源于phpbb,所以很多库结构都非常像,而vbb的结构和phpbb有较大差异,在调试过程中还是耗费了大量的时间,回头来看,大约耗费了有一个礼拜的时间。感觉我都能提供有偿论坛转换服务了,哈哈。

转换过程:
首先要进行数据库的UTF8转换。之前论坛采用的是gb2312编码,但论坛上有台湾的注册用户,原来也能显示繁体中文,所以应该采用的是gbk或gb18030的编码。
在进行数据库的备份之前,要在原来的vb论坛后台把附件的存贮方式修改为文件方式,上传头像的存贮方式也修改为文件方式,而customprofilepic我没有找到对应的phpbb设置,所以这一块就直接丢弃了。
然后导出数据库:

mysql -uroot --add-drop-table --default-character-set=utf8 cngis > cngis.sql

进行编码的转换:

iconv -c -f gb18030 -t utf8 cngis.sql > cngisutf8.sql

然后修改此sql文件,替换所有的utf8为utf8,并在文件的开始处添加:


SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;

然后新建一个数据库cngisutf8,作为我们的测试数据库并尝试导入此sql文件。

mysql -uroot cngisutf8 < cngisutf8.sql

若在导入过程中没有错误,那么恭喜你,你太幸运了。
我在这一步中遇到错误,导致我以为是中文编码的问题,还以为繁体中文无法正常转换过来呢,后来经过多次测试,发现是转换后的sql文件里存在歧义字符:

\'

导致mysql无法导入,若你也有这个问题,直接去掉那个反斜线就可以了。

安装一个全新的phpbb3。

拷贝我写的vbb3.0.x转换器到phpbb3的install/convertors目录下,并运行相应的转换程序。
在我的转换程序中,给phpbb3默认的数据库结构中添加了两个字段:
一个是users表里添加了一个salt字段,这个是为了无缝转换论坛密码使用的。
一个是topics表里添加了一个goodnees字段,这个是因为我原来的vbb3中使用了精华插件,若你没有使用,可以把相关部分注释掉。
修改论坛的登录程序,使原来的用户可以直接登录,就是修改includes/auth/auth_db.sql文件。

// Check password ...
// added for vb3 conversion
if (!$row['user_pass_convert'] && (md5($password) == $row['user_password']
or md5(md5($password).$row['salt'])==$row['user_password']))
{
if (md5($password)!=$row['user_password'])
{
// Unconverted password
$sql = 'UPDATE ' . USERS_TABLE . '
SET user_password = "'.md5($password).'"
WHERE user_id = ' . $row['user_id'];
$db->sql_query($sql);
}

if ($row['user_login_attempts'] != 0)
{
// Successful, reset login attempts (the user passed all stages)
$sql = 'UPDATE ' . USERS_TABLE . '
SET user_login_attempts = 0
WHERE user_id = ' . $row['user_id'];
$db->sql_query($sql);
}

同时,前面的$sql语句中要添加一个字段:salt。
或者,也可以直接使用我提供的auth_db.php文件。

要注意,这个转换程序对自定义头像导入的功能不细致,还需要进一步处理,但我的论坛上已经够用了,若你的论坛有问题,请反馈给我。
同时,对用户的多组功能也不细致,因为我的论坛上只有2个用户是多组,而且只多1个组,因此转换程序在这儿也进行了简化。
在使用时,请根据自己的实际情况作调整!

授权:GPL2
致谢:
1. shely@ubuntu-cn irc,在编码转换问题上提供了大力帮助。
2. vb3_2phpbb的转换程序,在遇到问题时,首先就参考了这个转换程序。

下载:vb3.0.x convertor

转换论坛:webwiz 7.9 -> phpBB3

webwiz是一个基于ASP的论坛,由于此官方论坛已经停止维护,官方网站很长时间无法登录了,由于ASP的先天缺陷,而且正好PHPBB3也已经到RC1了,就决定把这个论坛进行转换。

1、实际情况
我们使用的WEBWIZ 7.9使用的是ACCESS数据库,并且在使用过程中有一定的修改,但我不清楚有哪些修改,因此,你的转换若有问题,也请反馈你的实际情况。
头像有三种,一种是系统提供的,在avatars目录下,另一种是用户上传的头像,放在uploads目录下,还有一种是HTTP连接,就是放在另外网站上的头像。
WEBWIZ的附件是直接存放在uploads目录下,但数据库里没有任何相关信息。
WEBWIZ的密码是采用了HASHEncode+Salt的加密算法,和SHA1类似,但不同。

2、转换程序
phpBB3只提供了从phpbb2的升级程序,在phpbb的官方论坛上搜索到了一个从webwiz到phpbb2的转换程序,但其转换的内容不完整,因此就决定自己写一个。而且PHPBB3现在已经采用了UTF8编码,要求数据库也要采用UTF8编码,MYSQL 4.1之后的程序也提供了UTF8编码。
首先需要转换ACCESS数据库到MYSQL,我前面有介绍过如何进行转换
我是使用了knoda进行数据转换的,在ubuntu系统下,注意,转换好后,数据库是默认为UTF8编码的。
转换完后,导出mysql数据。

mysqldump --default-character-set=utf8 -uroot yourdb > yourdb.sql

要修改此SQL文件,使之成为UTF8编码。替换所有的utf8为utf8,并在文件的开始添加:

SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;

然后转移到测试服务器上,并进行相应的导入工作。

在http://www.phpbb.com下载最新的phpbb3,根据安装提示,安装一个默认的空白的PHPBB3系统,假如你的数据库是phpbb。
并把webwiz论坛的所有文件拷贝到同一个服务器上,二者目录可以在一个层次。
如:

/var/www/phpbb
/var/www/webwiz

然后把我提供的转换程序拷贝到phpbb/install/convertors目录下,即convert_webwiz.php和functions_webwiz.php文件。
同时修改phpbb/includes/auth/auth_db.php文件,若你想让你的用户重新申请密码的话,也可以不修改这个文件。

// Check password ...
// added for webwiz conversion
// HashEncode is webwiz function.
global $phpbb_root_path, $phpEx;
require($phpbb_root_path . 'includes/functions-webwiz-hash.' . $phpEx);
if (!$row['user_pass_convert'] && (md5($password) == $row['user_password']
or HashEncode($password.$row['salt'])==$row['user_password']))
{
if (md5($password)!=$row['user_password'])
{
// Unconverted password
$sql = 'UPDATE ' . USERS_TABLE . '
SET user_password = "'.md5($password).'"
WHERE user_id = ' . $row['user_id'];
$db->sql_query($sql);
}

if ($row['user_login_attempts'] != 0)

这个前面的$sql语句中要添加一个字段:salt。

若修改了此文件,还要拷贝functions-webwiz-hash.php到phpbb/includes/目录下。
然后就可以在PHPBB的安装界面那儿进行系统的转换了。

下载:webwiz 7.9 converter

宝宝的两段录像

宝宝已经98天大了!
作运动:

躺在小车里也要动一动:

这是用一个DC拍下来的,保存为MOV格式,但文件容量太大,因此就用mencode转换成flv格式,然后用了google video的公用播放器。
转换命令 :

mencoder test.mov -o output.flv -of lavf -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -oac mp3lame -lameopts abr:br=56 -ovc lavc -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:dia=4:cmp=6:vb_strategy=1 -vf scale=512:-3 -ofps 12 -srate 22050

使用ogr转换文本到shape

这儿采用的是CSV格式,注意文件名要使用csv后缀,而且要指定输出图层的类型,比如POINT。
同时,要创建一个相应的VRT文件:


test2.csv
test2
wkbPoint

ogr2ogr -f “ESRI Shapefile” map.shp test2.vrt -nlt POINT
同时,在CSV文件的首行要指定字段的名称,同时要标明X、Y字段。

邮件转换方案(windows->linux)

原来使用OUTLOOK 2003。
现在想转换成LINUX的MAIL客户端。
直接使用thunderbird102版本进行转换,虽然可以转换,但是转换到一半的时候就发生错误,一直不成功。
然后尝试把OUTLOOK的邮件首先转换到outlook express 6,成功。然后再使用thunderbird转换,成功。(这时应该也可以转换到evolution?)
然后拷贝到LINUX系统下,就应该可以使用了。
但想使用EVOLUTION,就下载了一个mozilla for windows,安装后其包括了mozilla mail,然后导入。
(后来发现其自身带的帮助就有从outlook升级的说明)