一茶一坐

不小心走进了一茶一坐,发现里面的东西品质还是不错的,但是有点小贵,两个人5个菜,一共100多人民币。可能你会说5个菜才这么点钱还贵?问题是每个菜的分量都不多。 看看我们吃了些啥吧 这个好像是招牌菜,端上来有一个炉在下面烧着,冬天吃很多,鸡很滑,也很有麻油味。 另一道我很喜欢的菜,一个烧得很热的石锅,生牛肉在端上来的时候才放上去,然后服务员帮我们一直搅拌,牛肉慢慢变熟,然后就可以吃啦,很香的一个饭。 这里的煎饺子也不错,里面很多汁。 这个菜就有点不靠谱了。 这个焦糖布丁给了我很大的惊喜,颠覆了我对布丁的看法,像在吃芝士蛋糕。

March 5, 2013

安装ubuntu12.04后...

生命在于折腾,这次除了折腾博客,也折腾了一下系统,ubuntu12.04是一个非常棒的系统,因为它解决了很多以前无解的问题,例如:我笔记本的亮度调节问题,显卡发热问题。而且软件也做了很多调整,gvim竟然是7.3的,而且支持ibus输入中文,可以抛弃vimim插件了。 但是这一切并不是一安装好就有的,需要去配置,这就是为什么写这篇blog。 ##显卡驱动,亮度调节和保存问题 笔记本的配置是双显卡,6750m和核心显卡,dv4-3115,现在的闭源驱动已经可以很好地工作了。 首先去这里下载驱动。我下载的是13.01版本。 还要使用 sudo apt-get install ia32-libs 安装32位库,如果你的系统是64位的话。 然后就可以像装windows软件一样安装驱动了,安装完后执行 sudo aticonfig --inistial -f ,然后重启,检测是否成功的命令是 fglrxinfo 和 fgl_glxgears 。 安装完后打开/etc/default/grub 改一行语句: :::sh GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_backlight=vendor" 接着运行sudo update-grub,然后重启电脑,这时系统可以调节亮度了,但是不会保存当前值 要保存值,先看看现在的亮度值是多少,可以通过cat /sys/class/backlight/intel_backlight/brightness ,我的值是2442,然后打开文件 sudo gedit /etc/rc.local,在exit0前面加一条语句 :::sh echo 2442 > /sys/class/backlight/intel_backlight/brightness ##安装触摸板驱动器 :::sh sudo add-apt-repository ppa:atareao/atareao sudo apt-get update sudo apt-get install touchpad-indicator ##其他软件的调整 ...

March 4, 2013

wav音频文件格式详解

##利用ffmpeg做音频转换 大多时候我们得到的都是mp3格式的音频文件,在linux下我们想要转换音频格式可以使用ffmpeg ,非常方便,没有ffmpeg就安装一个吧 sudo apt-get install ffmpeg 感觉ubuntu真心的方便。 :::java ffmpeg -i track8.mp3 -ar 44100 -ac 2 -acodec pcm_s32le track8.wav 根据上面的命令,我们把track8.mp3转换为采样率44100,采样精度32位,双声道的wav音频文件。 ##文件的十六进制表示 我们选择vim来看其十六进制数据,或许你不相信vim的强大,但事实就是如此,我们用vim打开一个wav是这样的: info 加上 -b 让vim知道你是打开了一个二进制文件,例如:vim track8.wav -b 不用急,只要用命令模式运行如下命令,将会有奇迹发生。:%!xxd 我们需要的信息就在眼前了。现在可以用来分析了。 ##wav框架 终于进入主题了。 分析头部信息前,首先要明确wav文件存储的头部信息是包含在trunk中的,wav由trunk组成的,一个wav大致有以下几个trunk RIFF WAVE Chunk ID=‘RIFF’ RiffType=‘WAVE’ Format Chunk ID = ‘fmt’ Fact Chunk(optional) ID = ‘fact’ Data Chunk ID = ‘data’ ##具体分析 ...

January 24, 2013

ffmpeg教程一:视频截图(Tutorial 01: Making Screencaps

教程原地址为:http://dranger.com/ffmpeg/tutorial01.html,本人只是做了翻译和部分接口更新工作,保证其能正常工作。需要做一些预备工作 :::java sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libavdevice-dev libavfilter-dev libavutil-dev libpostproc-dev 首先我们需要了解视频文件的一些基本概念,视频文件本身被称作容器,例如avi或者是quicktime,容器的类型确定了文件的信息。然后,容器里装的东西叫流(stream),通常包括视频流和音频流(“流”的意思其实就是“随着时间推移的一段连续的数据元素”)。流中的数据元素叫做“帧”。每个流由不同的编解码器来编码,编解码器定义了数据如何编码(COded)和解码(DECoded),所以叫做编解码器(CODEC)。编解码器的例子有Divx和mp3。包(Packets),是从流中读取的,通过解码器解包,得到原始的帧,我们便可以对这些数据进行播放等的处理。对于我们来说,每个包包含完整的帧,或者多个音频帧。 在初级的水平,处理音视频流是非常简单的: 从video.avi中获得视频流 从视频流中解包得到帧 如果帧不完整,重复第2步 对帧进行相关操作 重复第2步 用ffmpeg来处理多媒体就像上面的步骤那么简单,即使你的第4步可能很复杂。所以在本教程,我们先打开一个视频,读取视频流,获得帧,然后第4步是把帧数据存储为PPM文件。 ##打开文件 我们先来看一下怎么打开一个视频文件,首先把头文件包含进来 :::c #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libswscale/swscale.h> ... int main(int argc, char *argv[]){ av_register_all(); av_register_all只需要调用一次,他会注册所有可用的文件格式和编解码库,当文件被打开时他们将自动匹配相应的编解码库。如果你愿意,可以之注册个别的文件格式和编解码库。 现在我们真的要打开一个文件了 :::c AVFormatContext *pFormatCtx; if(av_open_input_file(&pFormatCtx,argv[1],NULL,0,NULL)!=0) return -1; 我们从传入的第一个参数获得文件路径,这个函数会读取文件头信息,并把信息保存在我们存入的pFormatCtx结构体当中。这个函数后面三个参数分别是指定文件格式,缓存大小,和格式化选项,当我们设置为NULL或0时,libavformat会自动完成这些工作。 这个函数仅仅是获得了头信息,下一步我们要得到流信息 :::c if(av_find_steam_info(pFormatCtx)<0) return -1 这个函数填充了pFormatCtx->streams流信息, 我们可以通过dump_format把信息打印出来 :::c dump_format(pFormatCtx, 0, argv[1], 0); pFromatCtx->streams只是大小为pFormateCtx->nb_streams的一系列的点,我们要从中得到视频流 :::c int i; AVCodecContext *pCodecCtx; // Find the first video stream videoStream=-1; for(i=0; i<pformatctx->nb_streams; i++) if(pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO) { videoStream=i; break; } if(videoStream==-1) return -1; // Didn't find a video stream</pformatctx-></pre> // Get a pointer to the codec context for the video stream pCodecCtx=pFormatCtx->streams[videoStream]->codec; pCodecCtx包含了这个流在用的编解码的所有信息,但我们仍需要通过他获得特定的解码器然后打开他。 ...

January 17, 2013