树莓派充当mp3播放器

最近想着通过Raspberry Pi来充当mp3用,因为没有显示器,只有音箱,所以就把音箱直接接在Pi的3.5mm耳机接口上。可以在电脑上或者手机上通过网页来播放音乐。也许有人问,有了电脑或手机为什么要这个,因为也许电脑、手机的外放效果不怎么样,接音箱总归好一些。而且对于我这个懒人,就喜欢躺床上,希望通过手机来控制一切,所以才诞生了这个想法。

基本步骤:

1.安装系统,本人使用的是xbian,理论上其他系统也可以。如果已经装好系统,可以跳过这一步

2.安装mpg123

命令: apt-get install mpg123

安装完毕mpg123,拷贝一个mp3文件到Pi中,可以运行mpg123 xxx.mp3(xxx.mp3为mp3文件名)看看能否正常运行。

本人在运行的时候出现找不到输出口的问题,大概是声卡驱动没有正确加载,运行以下命令解决:

sudo modprobe snd-bcm2835

3.安装lnmp,其实这里只需要安装nginx和php就可以了。

参照我之前的帖子 https://blog.wo.ai/archives/194 来进行安装

或者简单运行如下程序:

apt-get install nginx php5 php5-fpm php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps
php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

4.然后配置php sudo权限,这样php执行命令的时候不需要输入自己的密码

为 nginx,而想透过 PHP 发送irsend,用 root 输入指令 vi /etc/sudoers,
在档案最底加上以下一行:

www-data ALL=NOPASSWD: /usr/bin/mpg123

5.开始php旅程:

首先是index.php,用来遍历某个目录下所有的mp3文件,并显示出来:

//获取文件目录列表,该方法返回数组
function getDir($dir) {
$dirArray[]=NULL;
if (false != ($handle = opendir ( $dir ))) {
$i=0;
while ( false !== ($file = readdir ( $handle )) ) {
//去掉””.”、”..”以及带”.xxx”后缀的文件
if ($file != “.” && $file != “..”&&!strpos($file,”.”)) {
$dirArray[$i]=$file;
$i++;
}
}
//关闭句柄
closedir ( $handle );
}
return $dirArray;
}

//获取文件列表
function getFile($dir) {
$fileArray[]=NULL;
if (false != ($handle = opendir ( $dir ))) {
$i=0;
while ( false !== ($file = readdir ( $handle )) ) {
//去掉””.”、”..”以及带”.xxx”后缀的文件
if ($file != “.” && $file != “..”&&strpos($file,”.mp3″)) {
$fileArray[$i]=”/home/test/”.$file;
if($i==100){
break;
}
$i++;
}
}
//关闭句柄
closedir ( $handle );
}
return $fileArray;
}

读取mp3tag

function readmp3($mp3_file)
{
$fp=fopen($mp3_file,"rb"); //读取mp3文件
//首先判断是否有TAG,如果没有,那就没必要读取了,方法就是读取倒数128-126字节,看是否是TAG
//详情参看http://www.readlog.cn/archives/2961/
fseek($fp,-128,SEEK_END); //指针移到倒数128字节处
$tag=fread($fp,3); //读取倒数128-126字节位置的数据
if($tag=="TAG") //如果这3个字节是TAG,表明有TAG
{
$mp3=array();
//标题30个字节,从倒数125字节到倒数96字节
//现在直接读就可以了
$mp3['标题']=fread($fp,30);
//艺术家30个字节,从倒数95字节到66字节
$mp3['艺术家']=fread($fp,30);
//专辑30个字节,从倒数65字节到36字节
$mp3['专辑']=fread($fp,30);
//年份4个字节,从倒数35字节到32字节
$mp3['年份']=fread($fp,4);
//注释28个字节,从倒数31字节到4字节 (有的是30个字节,那就把倒数第2,3位归入注释了)
$mp3['注释']=fread($fp,28);
fseek($fp,1,SEEK_CUR); //跳过倒数第3位保留位
//第几首1个字节,倒数第2位
$mp3['编号']=ord(fread($fp,1));
//流派1个字节,就是倒数第一个字节了
//流派这里是存放的整型数据,可以写个函数来把数字变成具体的文字。
//具体含义参看http://www.readlog.cn/archives/2961/
$mp3['流派']=ord(fread($fp,1));
return $mp3;
}
}

生成mp3列表:

<?

//调用方法getDir(“./dir”)……可以是绝对路径也可以是相对路径
$filelist = getFile(“/home/test”);
//var_dump($filelist);
foreach($filelist as $file){
echo(“<li><input type=\”button\” onclick=\”checkMe(‘play.php?file=”.$file.”‘)\” value=\””.$file.”\”<br />”);
$mp3 = readmp3($file);
if($mp3){
echo($mp3[‘艺术家’].’-‘.$mp3[‘专辑’].’-‘.$mp3[‘标题’]);
}
}
?>
</ul>
<input type=”button” onclick=”checkMe(‘play.php?’)” value=”stop” />

页面基本完成了。

然后是play.php,根据传进来的文件名,通过后台播放:

<?php
$cmdline = “/usr/bin/sudo /usr/bin/killall mpg123 >/dev/null &”;
shell_exec($cmdline);
if($_GET[‘file’]){
$cmdline = “/usr/bin/sudo /usr/bin/mpg123 –loop -1 “.$_GET[‘file’].” >/dev/null &”;
echo($cmdline);
$output = shell_exec($cmdline);
echo($output);
}
?>

基本上大功告成了,这里的mp3文件名除了本地文件外,还可以是流媒体或者网址,都可以试试看。

英文中有个词是couch potato,我还是当bed potato吧。好好享受着音乐吧。

 

附:Raspberry Pi(树莓派)声音输出的设置

Raspberry Pi(树莓派)声音输出可以设置为自动,耳机输出,从HDMI输出三种,默认为自动

pi@aborn ~ $ sudo apt-get install alsa-utils
pi@aborn ~ $ sudo modprobe snd-bcm2835    #把声音模块加入内核
pi@aborn ~ $ sudo aplay /usr/share/sounds/alsa/Front_Center.wav
pi@aborn /opt/vc $ sudo amixer cset numid=3 2
numid=3,iface=MIXER,name=’PCM Playback Route’
; type=INTEGER,access=rw——,values=1,min=0,max=2,step=0
: values=2
pi@aborn /opt/vc $ sudo aplay /usr/share/sounds/alsa/Front_Center.wav
Playing WAVE ‘/usr/share/sounds/alsa/Front_Center.wav’ : Signed 16 bit Little Endian, Rate 48000 Hz, Mono
pi@aborn /opt/vc $ sudo amixer cset numid=3
numid=3,iface=MIXER,name=’PCM Playback Route’
; type=INTEGER,access=rw——,values=1,min=0,max=2,step=0
: values=0

pi@aborn /opt/vc $ sudo amixer cset numid=3 1
numid=3,iface=MIXER,name=’PCM Playback Route’
; type=INTEGER,access=rw——,values=1,min=0,max=2,step=0
: values=1

values取不同的值分别代表:
0=auto(自动), 1=headphones(耳机), 2=hdmi

php读取mp3文件信息 (转)

一个读取的程序。其实稍作改动,就可以变成读写的(id3v1),id3v2复杂的多,以后看情况再写吧。
<?php
$file=”回到我身边.mp3″; //要读取的文件–俺偶像的
$mp3info=readmp3($file); //获得文件信息,数组
print_r($mp3info); //输出数组
function readmp3($mp3_file)
{
$fp=fopen($mp3_file,”rb”); //读取mp3文件
//首先判断是否有TAG,如果没有,那就没必要读取了,方法就是读取倒数128-126字节,看是否是TAG
//详情参看http://www.readlog.cn/archives/2961/
fseek($fp,-128,SEEK_END); //指针移到倒数128字节处
$tag=fread($fp,3); //读取倒数128-126字节位置的数据
if($tag==”TAG”) //如果这3个字节是TAG,表明有TAG
{
$mp3=array();
//标题30个字节,从倒数125字节到倒数96字节
//现在直接读就可以了
$mp3[‘标题’]=fread($fp,30);
//艺术家30个字节,从倒数95字节到66字节
$mp3[‘艺术家’]=fread($fp,30);
//专辑30个字节,从倒数65字节到36字节
$mp3[‘专辑’]=fread($fp,30);
//年份4个字节,从倒数35字节到32字节
$mp3[‘年份’]=fread($fp,4);
//注释28个字节,从倒数31字节到4字节 (有的是30个字节,那就把倒数第2,3位归入注释了)
$mp3[‘注释’]=fread($fp,28);
fseek($fp,1,SEEK_CUR); //跳过倒数第3位保留位
//第几首1个字节,倒数第2位
$mp3[‘编号’]=ord(fread($fp,1));
//流派1个字节,就是倒数第一个字节了
//流派这里是存放的整型数据,可以写个函数来把数字变成具体的文字。
//具体含义参看http://www.readlog.cn/archives/2961/
$mp3[‘流派’]=ord(fread($fp,1));
return $mp3;
}
}
?>

无根浮萍

周末回到SH整理了两天东西,然后将所有打包好的东西发物流回去,居然有587公斤,这是来SH近10年存下来的。发完快递以后,不知为什么心情很乱,不想在SH多停留一分钟,打电话给航空公司改早一班飞机到SZ。到飞机上也一直很乱,突然明白“家”没了。回国两年来,一直在外面出差,孩子妈和孩子一直在SH,心理上那个“家”还在SH。前不久他们回去了,SH那个“家”空在那里,至少觉得他们会回去,也还算一个家。今天把所有家当发回去,突然发现象征意义的那个家没了,难怪会乱。虽然孩子妈在那里也找了房子,我也可以周末回去,但冥冥中告诉我,那不是我的家,只是个住所而已。

很早以前听说,走到哪,家就在哪,那应该是在单身的时候吧。

寻找公历农历相同的日子

今年大家都在热炒1986年的公历和今年的一样,但是农历却不一样。因为公历每四年闰一天,每周有七天,所以大概是28年同一次,农历是19年同一次(解释在下面),理论上农历和西历要完全相同,大概需要19*28=532年。理论上公元1482年的西历和农历都和今年相同。实际上28年重复一次,也不是靠谱的,因为每年的日子实际上是个小数,公历四年一闰,但是百年反而不一定闰了,规则是如果年份可以被100除尽,还需要被400除尽才闰,这样导致公历也会相差,比如1902,1930,1958,1986,2014这几年日历相同,因为1900年不是闰年,导致1874年比2014年的元旦晚了一天。所以翻遍万年历,几乎不可能找到农历公历完全相同的日子。

2014/1/1 周三,农历十二月初一

1482/1/1 周四,农历十二月初三

950/1/1周四,农历十二月初四

418/1/1周一,农历十二月初八

另外,澄清一点,公历或者西历是太阳历,所以可以称作阳历,而农历不但根据月亮公转地球的周期,还要计算地球公转太阳的周期,所以准确的说,应该是阴阳历,所以大众普遍说的阴历其实是不准确的。

下面是解释为什么农历中十九年七闰及公历四年一闰的原因:

转载自

http://destiny.xfiles.to/ubbthreads/ubbthreads.php/topics/610122

除了你出生的那一年之外,大家有沒有遇過你西曆生辰的那一天又是你的農曆生辰呢?未遇過?這不出奇。因為根據曆法,西曆和農曆每隔 19 年才循環一次,如果你的年齡未滿 19 歲,自然不會遇上西曆生辰和農曆生辰在同一天出現的情況了。

可能大家會懷疑,為甚麼一定要等 19 年,西曆和農曆才會循環一次呢?為了明白 19 年循環的奧秘,我們先就要明瞭倒底「西曆」和「農曆」是怎樣制定出來的。首先,讓我們看看「西曆」:

我們現時所採用的「西曆」,顧名思義,就是一套從西方傳入的曆法系統。遠在古羅馬(甚至是更早的)時期,當時的歐洲人就已經將地球環繞太陽公轉一周所需的時間定為「一年」。通常我們都說 1 年有 365 日,即是說地球自轉了 365 次(日),它就會環繞太陽公轉 1 次(年)。如果地球自轉和公轉之比,剛好是一個整數,那麼一切就好辦了,但很可惜,經過仔細的天文觀測後發現,地球環繞太陽公轉所需的準確時間應為 365 日 5 小時 48 分 46 秒,即約 365.2422 日。故此,1 年有 365 日的想法,和地球公轉所需的時間,實際上有 0.2422 日的差別。

相信大家都知道,我們每隔 4 年就會在第 4 年中增加一日(即該年的 2 月 29 日),目的就是為了彌補上述的差別。注意:0.2422 ´ 4 = 0.9688,而 1 – 0.9688 = 0.0312 日,即約等於 44 分 56 秒。換句話說,使用了「四年一閏」的曆法,我們每隔 4 年就可以將上述的差別減少至 4 年才相差 44 分 56 秒,相信這是一個很合理的處理辦法了。

由於「西曆」是按照太陽和地球的關係而制定出來的,故此亦有人將「西曆」稱為「陽曆」。而為了方便後面的討論,我將地球公轉所需的時間(即 365.2422 日)稱為 1 個「太陽年」。

「農曆」就比較麻煩。有人稱「農曆」為「陰曆」,這是因為「農曆」主要是根據月球環繞地球公轉所需的時間而制定出來的。同樣,據觀測,月球環繞地球公轉一周所需的時間亦不是一個整數,而是等於 29 日 12 小時 44 分 2.8 秒,即約 29.5306 日。故此,在農曆裏面,1 個月有時會有 29 日,有時又會有 30 日。這要看每次月缺和月圓的時間才可定出一個月到底有多少日。通常,我們會將月圓的那一天定為每個月的第 15 日。同樣,為了方便後面的討論,我將月球環繞地球公轉所需的時間(即 29.5306 日)稱為 1 個「太陰月」。

將 1 個太陽年和 1 個太陰月相除,得 365.2422 ¸ 29.5306 = 12.368262,由此可知 1 個太陽年比 12 個太陰月多出 0.368262 個太陰月,約 10 日 21 小時。在這裏,問題來了:如果我們將 1 個農曆年定為 12 個月,那麼每過 1 年,我們就要提早差不多 11 日過新年了!這樣做,會令到我們使用農曆時出現很多混亂和困難的情況。例如:農夫發覺今年農曆 3 月 1 日天氣回暖,春天到了,適合播種,那麼到了第二年就要改於 3 月 12 日播種,第三年就要改於 3 月 23 日,如此類推。十年後就要在 7 月才開始耕種,二十年後就要到 11 月了!

為了解決上述的困難,農曆的曆法亦好像西曆「四年一閏」的制度一樣,在適當的時候就會在某一年之中加插多一個月(即閏月)來調節上述的差距。至於哪一年需要多加一個閏月,它的推算方法亦十分簡單,就是直接將每年多出來的時間(即 0.368262 個太陰月)累積地加起來,如果剛好超過 1 個太陰月,就可以在該年加插一個閏月了。

例如:第 1 年多了 0.368262 個太陰月,第 2 年就會多 0.736524 個太陰月,第 3 年將會多出 1.104786 個太陰月。這時剛好多於1個太陰月,所以我們就在第 3 年中加添一個閏月,因而得到農曆「三年一閏月」的規律。

但「三年一閏月」這個方法並不完美,原因是即使增加了 1 個閏月,3 年後仍和實際的太陽年相差了 0.104786 個太陰月,約 3 日 2 小時。這個差距依然很大。為了建造一個更好的曆法,我們可以繼續算下去,從而得到下表:

年數 累積差額(個太陰月)
3 1.104786
6 2.209572
8 2.946096
11 4.050882
14 5.155668
16 5.892192
19 6.996978

這樣,我們就計算出農曆年和太陽年之間一個更準確的關係了。從上表可以見到,當過了 8 年後,雖然差額祇有 2.946096 個太陰月,仍未足 3 個太陰月,但這個數字卻和 3 非常接近,故此,在農曆的曆法中,亦有「八年三閏月」的規定,即除了在第 3 和第 6 年分別插入 1 個閏月外,亦在第 8 年再加插多 1 個閏月。這時候,我們祇是隔了一年,就已經有多 1 個閏年了。類似地,到了第 16 年,就應該有 6 個閏月了。

注意:按「八年三閏月」的規定推算,8 年後太陽年和農曆年應該相差了 3 – 2.946096 = 0.053904 個太陰月,即約 1 日 14 小時。亦即是說,經過 8 年後,農曆年和太陽年其實祇有一至兩天的差距。大家是否記得你們 8 歲的那一年,你們的西曆生辰祇比農曆生辰早了 1 天或 2 天到臨呢?看過以上的計算,大家就應該明白,這個現象是基於甚麼原因而造成的了。

但一個更準確的結果,應該出現在第 19 年了。如果我們定「19 年 7 閏月」,那麼太陽年和農曆年就祇相差 7 – 6.996978 = 0.003022 個太陰月,即約祇有 2 小時!試想想:在長長 19 年的歲月中,若依照「19 年 7 閏月」的方法,最後兩種曆法其實祇相差 2 小時,這是一個多麼精確的結果!因此,每逢 19 或 19 倍歲數生辰的時候,西曆生辰和農曆生辰就有機會在同一天出現了。

例如:2003 年的 2 月 1 日是農曆年的正月初一。19 年後,即 2022 年的 2 月 1 日那天亦剛好是農曆正月初一!換句話說,在 2003 年 2 月 1 日出生的人,到了 2022 年 19 歲生辰那天,就會同日慶祝兩個曆法上的生辰了。(大家不妨查一查,你們 19 歲的那一年,西曆生辰和農曆生辰又是否重疊在同一天呢?)不過,如果我們倒數 19 年卻發現,1984 年的正月初一卻在 2 月 2 日,而並非 2 月 1 日!這又是甚麼原因呢?

其實理由也很簡單,這是因為「太陽年」和「太陰月」的日數都不是整數,而我們實際使用的西曆和農曆,每一年和每一個月的日數都必須是整數的。例如:西曆每逢第 4 年就會多加一日,而農曆的月份亦有長有短,有時會有 29 日,有時又會有 30 日,所以會令到部分的日子會有些微的出入,亦引致有些人即使他們到了 19 歲時,西曆生辰和農曆生辰仍然會有一天的差距。

例如:2000 年的 2 月 29 日是農曆的正月 25 日,3 月 1 日是正月 26 日。19 年後,即 2019 年,該年根本不是閏年,該年沒有 2 月 29 日,而該年的 3 月 1 日則變成農曆的正月 25 日。所以在 2000 年那幾天出生的人,到了 19 歲,亦沒有機會在同一天慶祝兩個生辰了。

就以我本人而言,在我 19 歲的那一年,農曆生辰比西曆生辰早了一天出現,即使到了 38 或 57 歲,這兩個生辰亦不會重疊在一起。這的確是一件令我感到遺憾的事情!

=======================

我测试了一下,如果说某年正好是西历的闰年,之后的的日子就被打乱了,西、农历会相差一天。

乱弹

拣尽寒枝不肯栖 飘渺孤鸿影

曲巷跳鱼 圆荷泻露 寂寞无人见

谁伴明窗独坐?我共影儿两个。灯尽欲眠时,影也把人抛躲。无那,无那。好个凄惶的我!

凭阑久,疏烟淡日,寂寞下芜城

乡梦断,旅魂孤,峥嵘岁又除

2014元旦

一大早起来就摔了一跤,觉得应该给自己找点事做,变换一下今天的心情,干脆来个HK半日游,。
过关的时候人还不是太多,可能因为中午的缘故。

来到时代广场,还留下了不少新年夜的气氛,不少小朋友在这里玩耍拍照。

20140102-181938.jpg

 

星光大道的经典塔楼。

20140102-181839.jpg

 

择日不如撞日,每周三免费这种事情居然让我碰到了。

20140102-181819.jpg

 

测试从手机发表。

春暖花开

2014就这么偷偷摸摸的来了,一大早就摔了俩跟头,也许就是把2014年的厄运都这么过去了吧。

外面现在阳光灿烂,虽然还算是冬天,还是向往春暖花开的时候。按照往年的惯例,开始整理打扫卫生,该洗的洗,该晒的晒。

2013年的好的也好,坏的也好,都这么过去吧,希望2014是个新的开始。

忘れられないひととことが色々ですけど、終わっちゃった。感謝すると謝罪する機会がありませんが、申し訳ございませんでした。

http://m6.file.xiami.com/21/2021/161000846/1771690321_4283785_h.mp3

歌名:春暖花开

作词:梁芒
作曲:洪兵
演唱:那英

春暖花开歌词:

如果你渴求一滴水
我愿意倾其一片海
如果你要摘一片红叶
我给你整个枫林和云彩
如果你要一个微笑
我敞开火热的胸怀
如果你需要有人同行
我陪你走到未来
春暖花开
这是我的世界
每次怒放
都是心中喷发的爱
风儿吹来
是我和天空的对白
其实幸福
一直与我们同在

如果你要一个微笑
我敞开火热的胸怀
如果你需要有人同行
我陪你走到未来
春暖花开
这是我的世界
每次怒放
都是心中喷发的爱
风儿吹来
是我和天空的对白
其实幸福
一直与我们同在

春暖花开
这是我的世界
生命如水
有时平静 有时澎湃
穿越阴霾
阳光洒满你窗台
其实幸福
一直与我们同在
我的世界

mpg123的循环播放

MPG123,听音乐最好能使用一个表(文件)把要播放的歌曲目录存在表里面:view plaincopy to clipboardprint?
find . -name “*.mp3” | sed ‘s/\.\///’ | sort > list.lst
find . -name “*.mp3” | sed ‘s/\.\///’ | sort > list.lst  播放的时候就可以:view plaincopy to clipboardprint?
mpg123 –list list.lst
mpg123 –list list.lst如果要循环的话可以加入–loop选项:view plaincopy to clipboardprint?
mpg123 –loop -1  songname.mp3
//-1(<0)的数表示无限循环,也可以指定确定的次数。只能是单首循环。
//这个–loop 参数如果用来播放List(文件)中的歌曲时
//是不能够达到重头到尾的重复播放的效果的,只是循环第一首。

//如果要循环目录内容的话,目前可以:
mpg123 –list list.lst -Z
//用于随机循环播放
mpg123 –loop -1  songname.mp3
//-1(<0)的数表示无限循环,也可以指定确定的次数。只能是单首循环。
//这个–loop 参数如果用来播放List(文件)中的歌曲时
//是不能够达到重头到尾的重复播放的效果的,只是循环第一首。//如果要循环目录内容的话,目前可以:
mpg123 –list list.lst -Z
//用于随机循环播放

ffmpeg笔记

 

ffmpeg version N-43921-ga366bea 版本 视频转换参数详解

(转自http://www.cppblog.com/nenlong/archive/2012/09/18/191047.html)

libavutil 51. 70.100
libavcodec 54. 54.100
libavformat 54. 25.104
libavdevice 54. 2.100
libavfilter 3. 13.101
libswscale 2. 1.101
libswresample 0. 15.100
libpostproc 52. 0.100

rem -c:v libx264 视频解码器
rem libvpx copy libxvid mpeg4 mpeg2video rawvideo
rem -b:v 2000k 视频比特率 x264固定解码率是正确 其他的都不正确
rem -c:a libmp3lame 音频解码器
rem -b:a 128k 音频比特率

rem -q:v 1 固定视频量化标度(VBR) 0.1-31 1高 31最差 这时-b:v无效 以前是 -qscale n格式
rem mpeg4时 0.1=4335k 1=3835k 2=3403k 3=2186k 4=1678k 5=1336k 6=1158k 7=1003k 31=286k
rem -qmin 1 最小视频量化标度(VBR)
rem -qmax 1 最大视频量化标度(VBR)
rem -qcomp 1.0 视频量化标度压缩(VBR) 0.0-1.0

rem -sameq 同样视频质量 此时 -b:v -qscale 无效

rem -ss 00:20:00.000 转换开始时间 不能在 -i 后面
rem -t 00:01:10.000 转换总时间
rem -vframes 600 转换振幅总数
rem -s 720×404 转换分辨路
rem -aspect 16:9 设置横纵比
rem -g gop_size 设置图像组大小
rem -bf frames 使用frames B 帧,支持mpeg1,mpeg2,mpeg4
rem -qcomp compression 视频量化标度压缩(VBR)
rem -dc 设置dct的算法
rem -mbd 2 宏块决策算法(高质量模式) 0=mbcmp (default) 1=fewest bits 2=best rate distortion
rem 转换某时间段
rem ffmpeg -y -ss 00:20:00.000 -i in_xxx.wmv -t 00:00:03.000 -c:a libmp3lame -b:a 128k -c:v mpeg4 -sameq -g 12 -bf 2 -qcomp 0.2 -dc 10 -mbd 2 -aspect 16:9 -f avi -s 720×404 out_xxx.avi

rem 全部转换
rem ffmpeg -y -i in_xxx.wmv -c:a libmp3lame -b:a 128k -c:v mpeg4 -sameq -g 12 -bf 2 -qcomp 0.2 -dc 10 -mbd 2 -aspect 16:9 -f avi -s 720×404 out_xxx.avi

视频合并
mencoder 001 002 003 -oac copy -ovc copy -o jion.avi

获取摄像头
ffmpeg -y -f vfwcap -i 0 -c:v mpeg4 -q:v 1 -qmin 1 -s 640×480 -r 24 -g 12 -bf 2 -qcomp 0.2 -dc 10 -mbd 2 -aspect 4:3 -f avi cap.avi

上传照片并自动旋转

项目中有个需求,需要通过手机浏览器上传照片。本来是个很简单的事情,后来发现手机自带的陀螺仪会根据手机的方向变化而发生旋转,导致上传的照片容易发生偏转。后来查了一些资料,在图片的EXIF信息中包含了照片的方向。

下载了metadata-extractor类,用来解析照片中的exif信息。

通过下面的方法得到方向:

public static int getImageOrientationTag(File f){
Metadata metadata;
try {
metadata = JpegMetadataReader
.readMetadata(f);
Directory exifDirectory = metadata.getDirectory(ExifDirectory.class);

if(exifDirectory.containsTag(ExifDirectory.TAG_ORIENTATION)){
return exifDirectory.getInt(ExifDirectory.TAG_ORIENTATION);

}

} catch (JpegProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MetadataException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return -1;
}

下面的方法来旋转照片:

public static void autoRotateImageByExif(String srcFile,String desFile){

try {
File in = new File(srcFile); // 读入文件
BufferedImage src = javax.imageio.ImageIO.read(in);
int orientation = getImageOrientationTag(in);
switch (orientation) {
case 1:
case -1:   //不需要旋转
FileUtil.copyFile(srcFile, desFile);
break;
case 8: //旋转270度
rotateImg(src, 270, Color.BLACK, desFile);
break;
case 3: //旋转180度
rotateImg(src, 180, Color.BLACK, desFile);
break;
case 6: //旋转90度
rotateImg(src, 90, Color.BLACK, desFile);
break;
default:
break;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 构造Image对象

}

根据exif权威解释,总共有8种方向,另外四种除了旋转以外,还有镜像,根据手头的测试,没有发生镜像问题,所以就把它忽略掉了。

虾米网音乐下载

为了下载虾米的音乐,网上找了不少帖子,自己写程序来解密地址加密。解密以后发现操作还是太复杂,干脆用了这个懒办法。
1.先找到音乐id
比如打开音乐的链接如下:
http://www.xiami.com/song/play?ids=/song/playlist/id/3297547/object_name/default/object_id/0

id就是3297547

2.拼下面的地址
http://www.xiami.com/app/iphone/song/id/3297547

把后面的数字换成前面的id

3.打开改地址
内容大概如下:
{“song_id”:”3297547″,”default_resource_id”:”164782″,”length”:”237″,”category”:null,”listen_file”:”\/aliyunos\/62\/7062\/297623\/3297547_164782_l.mp3″,”album_id”:”297623″,”name”:”\u306a\u3054\u308a\u96ea “,”artist_name”:”\u590f\u5ddd\u308a\u307f”,”artist_id”:”7062″,”title_url”:”yi”,”recommends”:”50″,”singers”:”\u590f\u5ddd\u308a\u307f”,”title”:”\u6b4c\u3055\u304c\u3057~\u30ea\u30af\u30a8\u30b9\u30c8\u30ab\u30d0\u30fc\u30a2\u30eb\u30d0\u30e0~ “,”album_logo”:”http:\/\/img.xiami.com\/images\/album\/img62\/7062\/297623_2.jpg”,”location”:”http:\/\/m1.file.xiami.com\/62\/7062\/297623\/3297547_164782_l.mp3″,”low_size”:”9489600″,”file_size”:null,”low_hash”:”d633a228ae032c0b0223618f367b2fbb”,”whole_hash”:”d633a228ae032c0b0223618f367b2fbb”,”content_hash”:”d633a228ae032c0b0223618f367b2fbb”,”content_size”:”9489600″,”lock_lrc”:”2″,”lyric”:”http:\/\/img.xiami.com\/lyric\/upload\/47\/3297547_1252216310.lrc”,”year_play”:”6694″,”grade”:”-1″,”album_url”:”http:\/\/www.xiami.com\/app\/iphone\/albuminfo?id=297623&uid=”,”artist_url”:”http:\/\/www.xiami.com\/app\/iphone\/artistinfo?id=7062&uid=”,”isad”:”0″}

其中的location是没有加密的地址:
http:\/\/m1.file.xiami.com\/62\/7062\/297623\/3297547_164782_l.mp3

然后把”\”全部去掉就是完整的mp3地址了,想下载或者在线播放都可以了。

なごり雪

一首被N多人翻唱的歌曲

1974年 かぐや姫 『三階建の詩』
1975年 吉田拓郎・かぐや姫 コンサート インつま恋
1975年 イルカ カバーバージョンがシングル
1976年 清水由貴子 (オーディション番組『スター誕生!』(NTV系)の第16回決戦大会で歌唱)
1978年 ビューティ・ペア(アルバム『〈スター・マイ・セレクション・シリーズ〉ビューティ・ペア』に収録)
1982年 松尾久美子 (『スター誕生!』の第42回決戦大会で歌唱)
1990年 福山雅治 (日本ビクターのビデオカメラ「ムービーごっこ」のCM曲としてカバー。未CD化)
1992年 Mi-Ke (アルバム『忘れじのフォーク・白い2白いサンゴ礁』に収録)
1994年 永井みゆき(アルバム『全曲集’95~応援歌でヨイショ』に収録)
1998年 鈴木真仁 (アルバム『いちご白書をもう一度』に収録)
1999年 LIFE RECODERS (アルバム『東京の空』に収録)
1999年 結城比呂 (アルバム『時の断層』に収録)
2000年 岡村靖幸 (シングル『真夜中のサイクリング』に収録)
2001年 七緒香 (アルバム『はじまりのうた』に収録)
2001年 市井紗耶香 (アルバム『FOLK SONGS』に収録)
2003年 ビリケン (「nagoriyuki」としてカバー)
2003年 JINDOU (シングル『なごり雪』に収録)
2004年 松浦亜弥 (アルバム『FS5〜卒業〜』に収録)
2004年 ketchup mania (アルバム『GAL盤』『THE BEST OF ketchup mania』に収録)
2005年 高橋直純 (アルバム『scene〜残したい風景〜』に収録)
2005年 平原綾香 (アルバム『From To』に収録)
2005年 石川ひとみ (アルバム『With みんなの一五一会〜フォークソング編』に収録)
2006年 徳永英明 (アルバム『VOCALIST 2』に収録)
2006年 ムック (限定配布アルバム『COVER PARADE』に収録)
2006年 神園さやか (アルバム『二十歳の原点』に収録)
2006年 嘉門達夫 (替え歌『なごり寿司』としてアルバム『笑撃王』に収録)
2007年 Kat McDowell (「ナゴリユキ」としてミニアルバム『kat』等に収録)
2007年 リュ・シウォン (シングル『花の首飾り』に収録)
2007年 夏川りみ (配信限定アルバム『歌さがし 〜リクエストカバーアルバム〜』に収録)
2008年 中孝介 (シングル『春』に収録)
2008年 ameji(アルバム『LOVE STORIES』に収録)
2008年 鬼束ちひろ (ライブDVD『NINE DIRTS AND SNOW WHITE FLICKERS』に収録)
2009年 坂本冬美 (アルバム『Love Songs 〜また君に恋してる〜』に収録)
2009年 Scott Murphy (アルバム『GUILTY PLEASURES LOVE』に収録)
2009年 ダンカン・レッドモンズ (アルバム『Up And At ‘Em』に収録)
2009年 中西保志 (アルバム『メロディーズ』に収録)
2009年 中森明菜 (アルバム『フォーク・ソング2 〜歌姫哀翔歌』に収録)
2010年 元ちとせ&秦基博(養命酒製造「ハーブの恵み」TVCMソング)
2012年 河村隆一(カヴァーアルバム『The Voice 2』に収録)
2013年 有安杏果(ももいろクローバーZ)with南こうせつ (アルバム『5TH DIMENSION』初回限定盤Aに収録)

听了好几个版本,貌似夏川里美的反而先入为主了。那就先推荐她的吧。

なごり雪

夏川りみ

なごり雪
作詞:伊勢正三
作曲:伊勢正三

汽車を待つ君の横で
ぼくは時計を気にしてる
季節はずれの雪が降ってる
「東京で見る雪はこれが最後ね」と
さみしそうに 君がつぶやく
なごり雪も 降る時を知り
ふざけすぎた 季節のあとで
今 春が来て 君はきれいになった
去年よりずっと きれいになった

動き始めた
汽車の窓に 顔をつけて

君は何か 言おうとしている
君の口びるが
「さようなら」と動くことが
こわくて 下を向いてた
時が行けば 幼い君も
大人になると 気づかないまま
今 春が来て 君はきれいになった
去年よりずっと きれいになった

君が去った ホームに残り
落ちてはとける 雪を見ていた
今 春が来て 君はきれいになった
去年よりずっと きれいになった

下面是イルカ的版本, 35年前的版本

vmware无法在ubuntu上安装

在ubuntu server上安装vmware总出错,google以后,运行以下命令解决

sudo apt-get install build-essential

sudo apt-get install linux-headers-$(uname -r)

 

Ubuntu 13.04是最新的3.0的Linux内核,其内核版本的头文件的位置发生了变化,

导致之前,相对旧的VMWare Tools,找不到对应的头文件,因此而报错。

解决办法:

用当前,实际上已经存在的头文件,做个软链接:

 

sudo ln -s /usr/src/linux-headers-$(uname -r)/include/generated/uapi/linux/version.h /usr/src/linux-headers-$(uname -r)/include/linux/version.h

 

就可以重新运行vmware安装程序了。

涙そうそう

最开始接触到的是《涙そうそう》这首歌,在收音里面听到这首歌。不知道名字,而且日语听力实在不怎么样,只能听到几个なだそうそう之类的音节。后来在网上搜了很久,才知道是夏川里美的《涙そうそう》,中文名字是《泪光闪闪》,因为带冲绳的发音,涙(なみだ)发音却是なだ。

这首歌流行于冲绳地区,似乎还有个硫球语版本,是写给过逝的亲人的歌曲,被夏川里美翻唱后,一炮走红,不仅红遍东夷,台湾大陆也是红极一时。

[swf]http://www.xiami.com/widget/0_3296711/singlePlayer.swf[/swf]

夏川里美天籁的声音感觉不带一点杂音,能够让我整个下午一直循环的听。

歌曲由翻看老照片开始,所有往事和思念一一展现出来。

古いアルバムめくり
ありがとうってぶやいた
いつもいつも胸の中
励ましてくれる人よ
晴れ渡る日も 雨の日も
浮かぶあの笑顔
思い出遠くあせても
おもかげ 探して
よみがえるのひは 涙そうそう

一番星に祈る
それが私のくせになり
夕暮れに見上げる空
心いっぱいあなた探す
悲しみにも 喜びにも
おもうあの笑顔
あなたの場所から私が
見えたら きっといつか
会えると信じ 生きてゆく
晴れ渡る日も 雨の日も
浮かぶあの笑顔
思い出遠くあせても
さみしくて 恋しくて
君への想い 涙そうそう
会いたくて 会いたくて
君の想い 涙そうそう

这首歌听过若干年后,听说还有一部同名的电影,找到以后,是一部很清爽的兄妹恋的片子。男主角母亲改嫁,继父带着一个小女孩,父亲离家出走,母亲临终托付男主角照顾小女孩。小男孩牺牲自己前途来兑现自己的承诺,给妹妹幸福。兄妹之间因为爱了不能不分,当男主角因劳累过度得心肌炎死去,妹妹的那声nini。妹妹送哥哥的骨灰回老家,收到了哥哥寄来的礼物,一件和服和道歉的信。当妹妹重新翻开哥哥留下的他们的回忆的照片时,这首歌声响起。

fbf5bc12c8fcc3ce193dccf79245d688d63f205e

硫球语版,听不懂,但是还是能听出其中的哀愁。

http://www.xiami.com/widget/0_3297380/singlePlayer.swf

唄:夏川りみ作詞者:森山良子/ウチナーグチ
作曲者:BEGIN
なちかしアルバムみくてぃ かふうしどーんでぃくとぅばかき
いちんいちまでぃんちむぬ内 くくるかきゅるあぬひとぅゆ
晴りわたる日ん あみぬ日ん 浮かぶあぬちゅらさ
なちかさやとぅーく うむよーなてぃん
うむかじとぅみてぃ かじ立ちゅる日や 涙そうそう

一番ぶしににがゆんくりが我めなれーなてぃ
ゆまんぎめすら見上ぎてぃちむふくらまち うんじゅとうゆゆん
なちかさてぃんるくらしゃてぃんうむいやあぬちゅらさ
うんじゅめはすかられしがた

みらりりば かなじいちか あゆるんでぃ信じいきてぃんか
晴りわたる日ん あみぬ日ん 浮かぶあぬちゅらさ
なちかさやとぅーく うむよーなてぃん
さびしさぬ くいしさぬ うむいや増さてぃ 涙そうそう