【转载】树莓派摄像头使用手册

更新日志: 2014 年 3 月 24 日更新:根据 2013 年 12 月更新的文档,对原译文进行扩展翻译。翻译完毕。 2014 年 3 月 4 日更新:根据 2013 年 12 月更新的文档,对原译文进行扩展翻译。部分内容未翻译完毕。 nike running goedkoop 2013 年 8 月 4 日更新:根据 Raspberry Pi 官方论坛发布的 RaspiCam 正式文档进行扩展翻译。硬件安装和软件安装部分稍后翻译完成。 2013 年 5 月 31 日更新:根据 eLinux 中的 Wiki 内容添加使用 MP4Box 对视频进行封装的介绍。 2013 年 5 月 24 日更新:根据 2013 年 5 月 10 日更新的官方文档完成了初步翻译。本文会在适当的时间里进行增删改等操作,如果您对该文感兴趣,可以仅收藏本页。 RaspiCam 文档 本文档将对 2013 年 12 月 7 日为止可用的三个 Raspberry Pi 摄像头应用程序进行介绍。 目前提供了三个应用程序,分别为:raspistill、raspivid、raspistillyuv。其中 raspistill 和 raspistillyuv 非常相似,并且都是用于捕捉图像,而 raspivid 用于捕捉视频。 所有应用程序均基于命令行方式运行,通过 OpenMAX 的 mmal API 进行编写。 Kanken No.2 Baratas OpenMAX 的 mmal API 提供了更易使用的系统组件。注意,mmal 是一个由 Broadcom 为 Videocore 4 系统定制的 API。 应用程序使用了四个 OpenMAX(mmal)组件:camera(摄像)、preview(预览)、encoder(编码)、null_sink。所有应用程序均使用了摄像组件,raspistill 使用了图像编码组件,raspivid 使用了视频编码组件,raspistillyuv 没有使用编码组件,而是直接将 YUV 或 RGB 从摄像组件输出到文件。 New Balance 373 męskie 预览显示为可选参数,但是可以用于全屏或输出到指定的显示器显示区域进行显示。如果预览被禁用,那么 null_silk 组件将会对预览帧进行“吸收”。这是由于尽管不需要摄像头生成供显示所用的的预览帧,但是仍需要使用它们进行曝光计算和白平衡设置的缘故。 此外,还可以省略文件名参数,这样既可以直接预览显示而不写入文件,或者直接输出到标准输出设备上。 Cameron Newton – Auburn Tigers 命令行帮助可以通过直接输入应用程序名称获得。 安装摄像头硬件 警告:摄像头对静电非常敏感。如果您在安装摄像头电路板时没有防静电手环,可以尝试触摸一下水龙头、金属水槽或其它类似的东西即可。 摄像头电路板与 Raspberry Pi 通过一条 15 芯的排线进行连接。仅有两个连接座需要连接,排线需要安装到摄像头电路板和 Raspberry Pi 上。您需要正确安装,否则摄像头无法工作。对于摄像头电路板,排线末端的蓝色标记应该背对着电路板。而 Raspberry Pi 部分,蓝色标记应该正对着网络接口方向(如果您使用的是 Model A,那么也是需要正对着网络接口预留位)。 New Balance 373 hombre 尽管两部分连接座不尽相同,但它们的工作方式很相似。 Solde yeezy boost 对于 Raspberry Pi,拉起连接座两端的卡扣。它应该很容易拉起,并能够轻微活动。把排线完全插入到连接座中,并保证竖直,然后轻轻按下两端的卡扣。摄像头电路板方面,也需要您将卡扣向电路板相反方向拉开,然后轻轻插入排线,最后将卡扣推回。摄像头电路板的连接座与 Pi 上的区别就在这里。 安装摄像头软件 执行下文介绍的命令行进行下载并安装最新的内核,GPU 固件及应用程序。您需要连接到互联网才可以实现以下操作。 sudo apt-get update sudo apt-get upgrade 接下来,您首先需要在 Raspberry Pi 的 raspi-conf1ig 程序中启用摄像头的支持。 sudo raspi-config 将光标移动到摄像头选项(Camera option)处,并选择启用(Enable)。在退出 raspi-config 时会要求您重新启动。启用选项是为了确保重启后 GPU 固件能够正确运行(包括摄像头驱动和调节电路),并且 GPU 从主内存划分到了足够的内存使摄像头能够正确运行。 测试系统已经完成安装并正常工作,可尝试以下命令: raspistill -v -o test.jpg 这将显示来自摄像头 5 秒钟的预览图像,并且拍摄一张照片,然后保存为文件 test.jpg,同时显示出需要相关信息。 故障排除 如果摄像头工作不正常,您可以尝试以下操作。 连接排线是否连接正确?它们必须都垂直插入到插槽中。摄像头模块的连接座是否紧密的贴合到了电路板上?摄像头模块电路板上连接座的黑色卡扣,有时会发生松动。用指甲轻轻拉开,并且重新将排线插入,并且把卡扣按回。是否运行过 sudo apt-get update 和 sudo apt-get upgrade 了?是否运行过 raspi-config 并启用了摄像头选项?您的电源合适吗?除 Raspberry Pi 所要求的电量,摄像头将需要额外的 200-250mA 的电量。如果仍然无法工作,可以尝试以下操作: Error : raspistill/raspivid not found. 该提示可以意味着您 update/upgrade 操作失败了。请重试。 Error : ENOMEM displayed. 摄像头没有启动。请再次检查所有的连接线。 Adidas Ultra Boost Dames Error : ENOSPC displayed. Hollister Soldes 摄像头可能使 GPU 内存溢出了。检查 /boot/ 目录下的 config.txt 文件内容。gpu_men 选项,最少应该为 128。 如果以上内容都尝试过了,摄像头仍然无法工作,那么它可能出现问题了。可以尝试在 Raspberry Pi 论坛的 Camera 板块找找是否有更多可用的帮助。 通用命令行参数 预览窗口 –preview, -p 预览窗口设置 允许用户在屏幕上定义预览窗口的大小和位置。注意,这将在所有其它窗口/图像的上层显示。 –fullscreen, -f 全屏预览模式 强制预览屏幕全屏显示。注意,这将会保留输入图像的长宽比例,所以可能会在图像的边缘出现填充条。 –nopreview, -n 不显示预览窗口 完全禁用预览窗口。注意,尽管预览窗口被禁用,但摄像头仍然在进行处理,所以会继续消耗资源。 –opacity, -op 设置预览窗口透明度 设置预览窗口的透明度。0 为完全透明,255 为完全不透明。 摄像头控制参数 –sharpness, -sh 设置图像锐度(-100 – 100) 设置图像的锐度,默认为 0。 –contrast, -co 设置图像对比度(-100 – 100) 设置图像的对比度,默认为 0。 –brightness, -br 设置图像亮度(0 – 100) 设置图像的亮度,默认为 50。0 为最暗,100 为最亮。 –saturation, -sa 设置图像饱和度(-100 – 100) 设置图像色彩饱和度。默认为 0。 –ISO, -ISO 设置捕捉 ISO 为捕捉图像设置 ISO。范围为 100 到 800。 –vstab, -vs 打开视频稳定 仅用于视频模式,用于开启视频稳定。 –ev, -ev 设置曝光补偿 设置图像的曝光补偿。范围为 -10 到 10,默认为 0。 cheap adidas uk –exposure, -ex 设置曝光模式 可能用到的参数为: auto – 使用自动曝光模式 night – 夜间拍摄模式 nightpreview -夜间预览拍摄模式(暂且这么称呼) backlight – 逆光拍摄模式 spotlight – 聚光灯拍摄模式 sports – 运动拍摄模式(高速快门等) snow – 雪景优化拍摄模式 beach – 海滩优化拍摄模式 verylong – 长时间曝光拍摄模式 fixedfps – 帧约束拍摄模式 antishake – 防抖模式 fireworks – 烟火优化拍摄模式注意,不是所有的设置都会在对摄像头进行微调时得到相应作用。 –awb, -awb 设置自动白平衡 可能用到的参数为: off – 关闭白平衡测算 auto – 自动模式(默认) sun – 日光模式 cloud – 多云模式 shade – 阴影模式 tungsten – 钨灯模式 fluorescent – 荧光灯模式 incandescent – 白炽灯模式 flash – 闪光模式 horizon – 地平线模式 –imxfx, -ifx 设置图像特效 设置应用于图像上的特效 可能用到的参数为: none – 无特效(默认) negative – 反色图像 solarise – 曝光过度图像 posterize – 色调图像 whiteboard – 白板特效 blackboard – 黑板特效 sketch – 素描风格特效 denoise – 降噪图像 emboss – 浮雕图像 oilpaint – 油画风格特效 hatch – 草图特效 gpen – 马克笔特效 pastel – 柔化风格特效 watercolour – 水彩风格特效 film – 胶片颗粒风格特效 blur – 模糊图像 saturation – 色彩饱和图像 colourswap – 暂未可用 washedout – 暂未可用 posterise – 暂未可用 colourpoint – 暂未可用 colourbalance – 暂未可用 cartoon – 暂未可用 –colfx, -cfx 设置色彩特效 指定图像 U 和 V 通道的参数(范围 0 到 255)。例如:–colfx 128:128 将得到一张单色图像。 –metering, -mm 设置测光模式 为预览和捕捉指定测光模式 可能用到的参数为: average – 全画面平衡测光 spot – 点测光 backlit – 模拟背光图像 matrix – 阵列测光 –rotation, -rot 设置图像旋转(0 – 359) 对取景器和最终得到的图像进行旋转。可以接受 0 以上任何值,但由于硬件限制,只支持 0、90、180、270 度。 –hflip, -hf 设置水平翻转 水平翻转预览和保存的图像。 –vflip, -vf 设置垂直翻转 垂直翻转预览和保存的图像。 –roi, -roi 设置传感器感光区域 允许指定用于预览和捕捉的源所使用的传感器区域。该功能中 x 和 y 参数指定了坐上角的坐标,以及定义了宽度和高度值,并且所有值都为标准化坐标(0.0 到 1.0)。那么,感光区域设置为横向和纵向都为一半,并且宽度和高度都为传感器的四分之一时,可以写为: -roi 0.5,0.5,0.25,0.25 –shutter, -ss 设置快门速度 设置快门的速度为指定的值(单位为微秒)。据当前的考证,目前未定义时,快门速度上限大约为 330000us(330ms 或 0.33s)。 应用程序专有设置 raspistill –width, -w 设置图像宽度 –height, -h 设置图像高度 –quality, -q 设置 JPEG 品质 品质为 100 时几乎等同于未压缩。75 相对是比较好的选择。 –raw, -r 向 JPEG 元数据中添加 RAW 信息 该参数将从摄像头获取到的 RAW 信息插入到 JPEG 元数据中。 –output, -o 输出文件名 指定输出的文件名。如果不指定,将不保存到文件。如果文件名为“-”,将输出发送至标准输出设备。 –latest, -l 链接最后一帧到文件名 基于该名称做一个指向最后一帧的文件系统链接。 –verbose, -v 在运行过程中输出详细信息 在程序运行过程中,输出调试/详细信息。 –timeout, -t 获取图片前的时间 程序将执行指定的时长,然后进行获取操作(前提是 output 已指定)。如果未指定,将设置为 5 秒。 –timelapse, -tl 间隔拍摄模式 指定多次拍摄之间所间隔的毫秒值。注意,您需要在文件名中加入 %04d 做为画面计数。 -t 30000 -tl 2000 -o image%04d.jpg 将会在 30 秒的时间内,每两秒拍摄一次,并且将文件命名为:image1.jpg、image0002.jpg…image0015.jpg。注意 %04d 表示在文件名中数字部分加入前导零,使其成为 4 位数。例如,%08d 将生成 8 位数字。 如果间隔时间设置为 0,程序将不间断(取决于系统负担及存储速度)进行拍摄。不过需要注意,每次捕捉前还是会有 30ms 的最小暂停时间,用于曝光计算操作。 –thumb, -th 设置缩略图参数(x:y:quality) 允许指定插入到 JPEG 文件中缩略图信息。如果不指定,将为默认的 64×48 质量为 35 的缩略图。 如果设置为 –thumb none,那么将不会向文件中插入缩略图信息。文件的尺寸也会稍微变小。 –demo, -d 运行演示模式 该参数将循环使用所有摄像头参数,并且不会捕捉。而且无论是否完成所有的循环,在超时周期到达时都会停止演示操作。循环之前的时间需要设置毫秒值。 –encoding, -e 指定输出文件的编码 可用的参数为 jpg、bmp、gif、png。注意,未被硬件加速支持的图像格式(gif、png、bmp)在保存的时候要比 jpg 格式耗时更长。还需要注意,文件扩展名在编码时将被完全忽略。 –exif, -x 在捕捉的内容中加入 EXIF 标签(格式为 ‘key=value’) 允许在 JPEG 图像中插入特定的 EXIF 标签。您可以插入 32 条记录。这是非常实用的功能,比如插入 GPS 元数据。例如设置经度 –exif GPS.GPSLongitude=5/1,10/1,15/100 该命令将会设置经度为 5 度 10 分 15 秒。查看 EXIF 文档获得所有可用标签的详细信息。支持的标签如下: IFD0. 或 IFD1. EXIF. GPS. EINT. 注意,有部分标签将会由摄像头系统自动设置,但是会被命令行执行的 EXIF 操作所覆盖。 如果设置为 –exif none,那么将不会向文件中插入 EXIF信息。文件的尺寸也会稍微变小。 –fullpreview, -fp 全预览模式 这将使预览窗口运行于全分辨率捕捉模式。该模式最大帧率为 15fps,并且预览将和捕捉拥有相同的可视区域。在不进行模式转换时,捕捉动作将进行的更迅速。该功能目前还在开发中。 –keypress, -k 按键模式 摄像头会运行(-t)参数指定的时间,并且每次按下回车键时进行一次捕捉。在超时设置到达前按 X 键然后按回车键将退出程序。如果超时时间设置为 0,摄像头将一直工作,直到按下 X 键和回车键。使用 verbose(-v)参数可以显示输入确认提示,否则不会有任何提示。 –signal, -s 信号模式 摄像头会运行(-t)参数指定的时间,并且每次向摄像进程发送 USR1 信号时进行一次捕捉。该操作可以通过发送 kill 命令进行终止。您可以使用“pgrep raspistill”命令找到摄像进程的 ID。 1 kill -USR1 raspistillyuv raspistillyuv 的许多选项与 raspistill 是相同的。本节将对不同的部分进行讲解。 不支持的选项: –exif, –encoding, –thumb, –raw, –quality 扩展选项: –rgb, -rgb 以 RGB888 形式保存未压缩数据 该选项强制图像保存为每个通道为 8 bits 的 RGB 格式,而不是 YUV420 格式。 注意,在 raspistillyuv 中所保存的图像在缓冲区中水平尺寸封装为可被 16 整除(所以可能会在每行的结尾都会出现无用的字节以使宽度可被 16 整除)。缓冲区也会将垂直方向封装为可被 16 整除,在 YUV 模式中,每个 Y、U、V 平面都会使用该方式进行封装。 raspivid –width, -w 设置图像宽度 视频的宽度。范围为 64 到 1920。 –height, -h 设置图像高度 视频的高度。范围为 64 到 1080。 –bitrate, -b 设置码率。 使用比特/秒为单位,所以 10Mbits/s 需要输入 -b 10000000。对于 H264 编码的 1080p30 高清视频,码率需要在 15Mbits/s 或以上。码率最大为 25Mbits/s(-b 25000000),但大于 17Mbits/s 时,在 1080p30 中并没有太大区别。 –output -o 输出文件名 指定输出的文件名。如果不指定,将不保存到文件。如果文件名为“-”,将输出发送至标准输出设备。 –verbose, -v 在运行过程中输出详细信息 在程序运行过程中,输出调试/详细信息。

  • New York Knicks
  • –timeout, -t 获取图片前的时间 程序将执行指定的时长,然后进行获取操作(前提是 output 已指定)。如果未指定,将设置为 5 秒。设置为 0 意味着程序将一直运行,直到按下 Ctrl-C 才会停止。 –demo, -d 运行演示模式 该参数将循环使用所有摄像头参数,并且不会捕捉。而且无论是否完成所有的循环,在超时周期到达时都会停止演示操作。循环之前的时间需要设置毫秒值。 –framerate, -fps 指定录制的视频每秒的画面数量 目前,最小的帧率为 2fps,最大为 30fps。似乎将来会有所改变。 –penc, -e 在编码完成后显示预览图像 开启该选项会在压缩完成后显示预览图像。 sklep new balance 966 meskie 显示在预览窗口中的图像会因为压缩的原因出现失真。正常情况下,预览将会显示摄像头输出的原始图像。该功能在未来的版本中可能不再可用。 –intra, -g 指定帧内刷新周期(关键帧率/画面组) 为录制的视频设置帧内刷新周期(画面组)率。H.264 视频在每个帧内刷新周期中都使用了 I-frame。该选项指定了每个 I-frame 之间帧的数量。 Troy Polamalu College Jerseys 数字越大,生成的视频尺寸越小,数字越小,视频流将越庞大,直至出错。

  • Adidas Ultra Boost Donna
  • –qp, -qp 设置量化参数 为视频流设置初始量化参数。 Nike Sneakers 范围从 10 到 40,并且对所录制视频的质量有极大的影响。值越大,质量越低,并且文件尺寸越小。码流设置为 0,并结合此参数一起使用,可用来设置一个完全动态码流的视频。 –profile, -pf 为录制的视频指定 H264 配置文件 为录制的视频指定 H264 配置文件。选项为:baseline、main、high。 –inline, -ih Insert PPS, SPS headers 插入 PPS,SPS 头 强制视频流的 I-frame 都包含 PPS 和 SPS 头信息。某些视频封装格式需要该信息。 Canotte Golden State Warriors 例如 Apple HLS。这些头信息体积很小,所以不会让文件的尺寸增加太多。 –timed, -td 设置定时切换捕捉和暂停 该选项可以使视频捕捉在特定的时间里暂停并重新开始记录。需要指定开启时间和关闭时间两个值。开启时间是视频的捕捉时长,关闭时间是暂停的时长。总录制时长是又超时选项进行定义的。注意,由于开启时间和关闭时间的设置原因,录制时长将略微比超时设置的时间要长。 例如 raspivid -o test.h264 -t 25000 -timed 2500,5000 将进行 25 秒的录制操作。录制操作包括若干个 2500 毫秒(2.5 秒)录制和 5000 毫秒(5秒)暂停的操作,并且重复时长超过 20 秒。所以该录制过程中实际只录制了 10 秒的内容。包括 4 段 2.5 秒的视频片断 = 被若干个 5 秒钟暂停操作分隔开的 10 秒钟视频。 2.5 秒录制 – 5 秒暂停 – 2.5 秒录制 – 5 秒暂停 -2.5 秒录制 – 5 秒暂停 – 2.5 秒录制 录制了 25 秒。但仅有 10 秒的记录 –keypress, -k 使用回车键在录制和暂停两种状态间进行切换 每次点击回车键将会暂停或重新开始录制进程。点击 X 键后点击回车键将停止录制并关闭程序。注意,超时设置值将影响录制结束时间,但仅在每次回车键点击后进行检查,所以如果系统正在等待按键操作,尽管超时设置已过期,录制进程退出前也会等待按键操作。 –signal, -s 使用 SIGUSR1 信号在录制和暂停两种状态间进行切换 向 Raspivid 进程发送 USR1 信号来切换录制和暂停。该操作可以通过使用 kill 命令来实现。您可以使用“pgrep raspivid” 命令找到 raspivid 的进程 ID。 kill -USR1 注意,超时设置值将影响录制结束时间,但仅在每次发送 SIGUSR1 信号后进行检查,所以如果系统正在等待信号,尽管超时设置已过期,录制进程退出前也会等待信号的发送操作。 new balance rouge et bleu marine –initial, -i 定义启动时的初始状态。 定义摄像头初始状态为暂停或立即开始录像。选项可以为“record”(录像)或“pause”(暂停)。注意,如果您设置的超时时长很短,而且初始状态设置为“暂停”,那么将不会录制任何输出的内容。 –segment, -sg 将视频流分段存储到多个文件 与存储在单个文件中不同,该参数将视频分段存储在以毫秒为单位所指定长度的数个文件中。为了将生成的文件命名为不同的名称,您需要在文件名中合适的位置添加 %04d 或类似的参数来让文件名中显示计数值。例如: –segment 3000 -o video%04d.h264 将分割成每段长度 3000 毫秒(3 秒)并且命名为 video0001.h264,video0002.h264 等。每个段落都是可无缝连接的(段落之间不会丢帧),但每个片段的长度将取决于帧内周期值,原因是每个分割的段落都需要起始于 I-frame 处。因此,每个段落都会等于或大于指定的时间长度。 –wrap, -wr 设置最大分段数 当输出分段视频时,该参数设置了最大分段数,并且达到最大值时,将返回到初始的第一个段落。该参数赋予了录制分段视频的功能,但是将覆盖之前生成的文件。所以,如果设置为 4,那么上面的例子中所生成的文件名为 video0001.h264,video0002.h264,video0003.h264,video0004.h264。而且,一旦 video0004.h264 文件录制完毕后,计数将回到 1,并且 video0001.h264 将被覆盖。 –start, -sn 设置初始段落数 当输出分段视频时,该参数为初始的段落数,它允许从指定的段落恢复之前的录制操作。默认值为 1。 示例 图像捕捉 默认情况下,传感器将以其支持的最高分辨率进行捕捉。可以在命令行中通过使用 -w 和 -h 参数进行更改。 # 两秒钟(时间单位为毫秒)延迟后拍摄一张照片,并保存为 image.jpg raspistill -t 2000 -o image.jpg # 拍摄一张自定义大小的照片。 raspistill -t 2000 -o image.jpg -w 640 -h 480 # 降低图像质量,减小文件尺寸 raspistill -t 2000 -o image.jpg -q 5 # 强制使预览窗口出现在坐标为 100,100 的位置,并且尺寸为宽 300 和高 200 像素。 raspistill -t 2000 -o image.jpg -p 100,100,300,200 # 禁用预览窗口 raspistill -t 2000 -o image.jpg -n # 将图像保存为 PNG 文件(无损压缩格式,但是要比 JPEG 速度慢)。注意,当选择图像编码时,文件扩展名将被忽略。 raspistill -t 2000 -o image.png –e png # 向 JPEG 文件中添加一些 EXIF 信息。该命令将会把作者名称标签设置为 Dreamcolor,GPS 海拔高度为 123.5米。 raspistill -t 2000 -o image.jpg -x IFD0.Artist=Dreamcolor -x GPS.GPSAltitude=1235/10 # 设置浮雕风格图像特效 raspistill -t 2000 -o image.jpg -ifx emboss # 设置 YUV 图像的 U 和 V 通道为指定的值(128:128 为黑白图像) raspistill -t 2000 -o image.jpg -cfx 128:128 # 仅显示两秒钟预览图像,而不对图像进行保存。 raspistill -t 2000 # 间隔获取图片,在 10 分钟(10 分钟 = 600000 毫秒)的时间里,每 10 秒获取一张,并且命名为 image_number_001_today.jpg,image_number_002_today.jpg… 的形式,并且最后一张照片将命名为 latest.jpg。 raspistill -t 600000 -tl 10000 -o image_num_%03d_today.jpg -l latest.jpg # 获取一张照片并发送至标准输出设备 raspistill -t 2000 -o - # 获取一张照片并保存为一个文件 raspistill -t 2000 -o - > my_file.jpg #摄像头一直工作,当按下回车键时获取一张照片。 raspistill -t 0 -k -o my_pics%02d.jpg 视频捕捉 图像尺寸和预览设置与图像捕捉相同。录制的视频默认尺寸为 1080p(1920×1080) # 使用默认设置录制一段 5 秒钟的视频片段(1080p30) raspivid -t 5000 -o video.h264 # 使用指定码率(3.5Mbits/s)录制一段 5 秒钟的视频片段 raspivid -t 5000 -o video.h264 -b 3500000 # 使用指定帧率(5fps)录制一段 5 秒钟的视频片段 raspivid -t 5000 -o video.h264 -f 5 # 发送到标准输出设备一段 5 秒钟经过编码的摄像头流图像 raspivid -t 5000 -o - # 保存到文件一段 5 秒钟经过编码的摄像头流图像 raspivid -t 5000 -o - > my_file.h264 Shell 错误代码 应用程序将返回完整的错误代码。可能出现的错误代码为: EX_OK 0 应用程序运行成功 EX_USAGE 64 错误的命令行参数 EX_SOFTWARE 70 软件或摄像头错误 130 由于按下 Ctrl-C,应用程序终止运行 扩展内容 MP4Box raspivid 通常会将录制的视频保存为 .h264 格式的文件。而我们使用的很多播放器可能无法正常播放该格式的视频文件。 asics gel lyte 5 mujer verdes 这就需要我们将生成的 .h264 格式的文件封装到播放器能够识别的视频容器格式中(比如封装为 mp4 格式)。有很多视频处理软件可以达到这个目的,您也可以直接在 Raspberry Pi 上直接进行封装。这里介绍的是“gpac”中的“MP4Box”。

    Posted in Linux, 操作系统 | Tagged , , , , , , , , , , , , | Leave a comment

    【转载】记一次 superblock 损坏导致服务器无法启动的故障修复

    前言

    前几天接到朋友联系,说他的服务器坏了,启动不起来了。这是一个RHEL 4的服务器,而且是那种盗版RHEL 4,也就是说没有售后服务的,联系我问问能不能帮帮忙。我也很久没有弄过Linux系统上的东西了。只好尝试一下,庆幸的是,修好了,并帮朋友维护了一段时间,在此记录一些修复和维护中碰到的问题。修复 superblock 本身并不复杂,我觉得值得记录的是修复过程中的思考过程,和修复所需要注意的问题。 Continue reading

    Posted in Linux, 网络存储, 计算机网络 | Tagged , , , , , , , , | 2 Comments

    Mike Gancarz:Linux/Unix 哲学的印证

    20年前,X Window System的开发者Mike Gancarz将Unix社区普遍认同的一些准则整理成Unix Philosophy,让GNU/Linux等后来者能站到巨人的肩膀上。10年前,这本书的第二版《Linux/Unix设计思想》得以出版。如今,基于Unix思想体系的Linux、iOS、Android等已经成为全球范围内的主流系统,Mike的远见卓识得到印证。图灵社区有幸邀请Mike Gancerz接受采访,谈谈《Linux/Unix设计思想》、操作系统的前世今生、开源运动的前景等。 Calvin Ridley Jerseys 图灵社区:首先,我想感谢您为我们创作了这样一部关于Linux和Unix哲学的大作。从您个人角度出发,是什么激励您写出了Unix Philosophy 与《Linux/Unix设计思想》这两部书呢? Mike:谢谢你的夸奖。我很高兴自己的书能带给读者一些启发。当然,我其实也很享受创作这两本书的过程。 当我还在DEC公司Ultrix(Ultrix是DEC的Unix产品)工程组工作时,人们早已就The Unix Philosophy的内在理念讨论了很多年。在享用午餐时,我们会孜孜不倦地相互强调小程序是多么好用,可移植性/便携性是如何至关重要,等等。

  • AJ McCarron Alabama Jersey
  • 此外,我们不只流于讨论,还在技术生活中贯彻实施了这些准则。 其实,直到我转去DEC在佐治亚州阿尔法利塔市的Ultrix电话客户支持中心工作之前,我并未真正意识到我是多么地迷恋Unix哲学,并遵循其准则来构建系统。在那里,似乎也没有任何人意识到Unix的做法与其他系统是大相径庭的。因此,我为大家做了一些幻灯片演示,概要阐述了Unix哲学,并将Unix系统作为一种教学工具使用,每年还会给组里的新人分发几次教程。

  • Air Jordan Pas cher
  • 后来,在一次“DEC用户协会(DECUS)”举办的研讨会上,当我做完演示后,有一位编辑提出我教授的这些知识可以作为一本书的创作素材。这便是The Unix Philosophy的缘起。 《Linux/Unix设计思想》的情况却有些不同。 fjällräven kånken Laptop 13 出版商和我都意识到,尽管哲学是永恒的,但The Unix Philosophy中的一些素材却有些过时了。于是,我们才有了出第二版的想法。 Madison Bumgarner Jersey 但问题是,作为一个操作系统,Unix的声望在不断下降,而Linux却迅速地得到了人们的普遍认可。在贯彻Unix哲学的同时,该系统并未像Unix那般商业化。经过与编辑的多次讨论后,我们终于决定将这本书的书名变更为《Linux/Unix设计思想》。 图灵社区:近年来,您为Linux(包括内核)开发和应用做了哪些新工作? Mike:虽然我对Linux内核开发者怀有无限敬意,但我本人的关注点却一直是用户空间的应用。其实,我在DEC最喜爱的项目之一便是将整个Unix指令集移植到64位DEC Alpha芯片。打个比方说,如果将Linux比作是一辆车,那我其实对它的发动机并不感兴趣。我更关心它可以带我去到何方,以及,我是否会享受这些旅程。 近年来,围绕Linux的开发活动呈爆发性态势,我们已经很难跟上所有项目的进展情况。比如说,就算你只想专注于Linux用户界面这一块,但该领域涵盖的内容多而广,你最多也只可能掌握其中的一部分技能。所以,目前我仅在系统编译及工程项目部署这两方面花了很多时间。在这两个领域里,脚本工具的使用依然很频繁。 All Black Jordan Shoes 虽然,现今的脚本工具都略有不同,但脚本仍然是一个很强大的工具。我很享受这种只编写一行代码,却能利用上别人撰写的数千行代码的喜悦感。

  • Nike Roshe Run Dames grijs
  • 图灵社区:您总结概括的这些准则都基于Unix的历史和文化、黑客精神、自由软件运动以及您与Unix / Linux社区人群普遍采用的做法。素材来源如此之多,再加上Unix哲学文化的博大精深,您是如何将这些精要准则提炼出来的呢?也就是怎么通过一个短语和句子来总结Unix哲学的精髓? Mike:通过在用户会议及其他论坛上的互动活动,我们大部分人开始体会到Unix有着一些核心理念。多年以来,Rob Pike、Kirk McKusick、Brad Cox、 Jon “maddog” Hall与其他人也都在谈论着小程序的重要性,即它们可以轻而易举地组合在一起去完成大规模的任务。我并未发明所谓的Unix准则,我只是把这些“大拿”们谈到过的理念如实记录了下来。 如何用一个短语或句子来总结Unix哲学呢?这确实是个难题,因为每一条准则单独存在时,根本就体现不出其优势。只有将它们视作一个整体,我们才会发现Unix哲学的博大精深之处。我想你们可能会认为,程序应该做且必须要做到的最重要的事情,就是与另一个程序交互。大多数Unix版本的开发都是基于这个思想,如果你能正确构建软件,它就永远能与其他软件进行交互,从而始终如一地遵循Unix哲学理念。 图灵社区:您提出了一个有趣的概念——“人类创造的三个系统”,您还指出Linux同时兼具第二个和第三个系统的特性。那么,目前Linux进化到了哪个阶段?它是否已经达到了“第三个系统”的标准呢? Mike:相比本书创作时,Linux现在要更为接近“第三个系统”的状态。事实上,我认为如果你忽略掉某些Linux发行版那繁琐的安装机制,其实大多数Linux已经算得上是“第三个系统”了。 Canotte Minnesota Timberwolves 当然,在Linux平台上,仍有一些子系统正处于演化进程中。 New Balance 997 męskie 例如,触摸用户界面与移动世界就是两大能说明Linux仍在不断发展的代表性领域。 图灵社区:您曾经预测,Unix将成为计算机世界的首选操作系统。 fjallraven kanken large 20 L 并且,Linux作为Unix的变种,最有可能实现这一预测。 New Balance 997.5 damskie 十年后,Linux在企业领域与桌面领域的发展各不相同。您如何看待此前这一预测? Mike:虽然我预测得没错,但是它并没有朝着我原本预期的方向发展。Unix确实是计算机世界的首选操作系统,今天,它已成为除Windows之外的所有主流操作系统的根源。 而Linux还牢牢雄踞企业级服务器系统的江山。另外,叫好又叫座的Android操作系统也是基于Linux内核开发的。更不用说iOS是从Mac OS X演变而来的,要知道Mac OS X可是Unix的衍生品。单纯以平台数量而论,除掉桌面领域,从Unix派生出的操作系统几乎可以说是无处不在。 其中,真正具有讽刺意味的是,虽然Linux因传说中用户界面的不好用而未能主宰桌面领域,但Linux与Unix都在移动环境下得到了蓬勃发展,这主要是因为开发人员重新为该环境定制了一些好用的用户界面。 nike air max pas cher 所以Android和iOS用户总数其实要远超Windows的用户数量。尽管大多数用户不知道Linux或操作系统到底是什么,可实际情况就是如此。 adidas zx 750 mujer 图灵社区:关于“可移植性/便携性”,您曾经说过“使用最频繁的那台机器才是最强大的计算机”。那参照这个标准,iPad与智能手机岂不就是最强大的计算机么?我们还想知道,目前的移动互联网热潮将会给Linux带来何种机遇与挑战?GNU/Linux在移动互联网的发展前景如何? Mike:是的,按这个标准来衡量,智能手机与平板电脑等移动设备早已赢得了这场战役。这是因为大多数人都是内容消费者,而不是内容生产者。还记得“内容为王,傻瓜!”这一章节吗?移动设备为用户提供了最高便利,使得他们可以随时随地获取他们喜爱的内容。 此外,用户是内容消费者而不是生产者这一倾向使得移动互联网占据了一定优势,但对Linux本身而言影响不大。 adidas neo hombre 目前,带宽不足这一普遍问题限制了移动互联网的发展,但我相信它最终还是会解决的。另一个棘手问题就是,很多网页的设计是基于让多数用户连接到同一Web服务器的理念。如果同时有一百万用户希望能在一小时内下载某个视频,网站就很难满足所有人的需求。已经有人在着手解决此问题,他们将迫使Linux网络领域的人们去重新思考,到底该如何处理海量信息的缓存与传输。 Linux在移动领域中的最大机会之一就是“云计算”。每个人都希望能在世界各地通过任何设备来获取数据。但与此同时,他们也希望系统能做好数据备份并保证其安全。

  • Air Max 90 Pas Cher
  • 作为计算基础设施的头号操作系统,Linux已在“云计算”领域立稳了脚跟。而且,它还会在可预见的未来继续增加市场占有率。这恰恰印证了我们在书中提到的一个观点,计算机应做的最重要事情之一就是与其他计算机交互。可靠的网络通信是“云计算”的一个基本要求。 未来,在移动世界Linux要面对一些安全性方面的重大挑战。这同样是具有讽刺意味的,因为此前Linux一直被视为比其他同类产品更为安全的产品。其中,也有诸如Android这样基于Linux的开放系统。 Air Jordan 2012 Shoes 目前,开放状态对它们来说可谓是喜忧参半。也许,人们可以只通过认证机构来下载应用程序。亚马逊已经在朝着这个方向努力,更不用说苹果早就采用了这一做法,即该公司旗下的在线应用商店(App Store)。 Nike SB Blazer 不过,目前为止我仍然没看到真正的解决策略,因为每个人都有自己的衡量标准,拥有绝对安全的自由度是一件很难的事情。你需要放弃一些东西,非此即彼。而且,人们都对所谓的安全界限有着不同看法。 图灵社区: 在这本书里,你用了很长的篇幅来抨击“强制性的用户界面(CUI)”,但今天CUI已成为计算机系统中的主导界面。你会如何解读此情况? Mike:在命令行shell接口中,CUI指的是那些强制性获取用户注意力,并防止他们执行其他程序的接口。除非他们先完成此前任务才能脱离CUI的控制。然而,在图形化环境中,CUI指的是模态(Modal)界面。例如,锁定用户的强制性对话框,此类对话框在用户给出响应之前是不会释放系统资源的。目前,大多数用户界面已经克服了这一壁垒,哪怕是在资源有限的移动环境也一样。 Asics Whizłer męskie 这说明,曾经的哲学理念现已成为常识。 图灵社区:有很多中国程序员渴望能投身到开源活动中,但他们不知道自己是否能依靠此类软件过活。您能够根据自己的经验给他们一些建议吗? Mike:虽然我不想假装自己能理解中国程序员所面临的软件市场环境,但我想说的是,正经加入一家公司并为其开发某些应用程序或系统更靠谱。如果公司允许你将代码贡献给开源社区的话,这会是一件好事情。也就是说,程序员的首要任务是生存,他们和芸芸众生一样,先得解决好温饱问题才会有闲情逸致去考虑其他。所以,在满足生存需求的前提条件下程序员还能做出一些无私贡献是最理想的状况。 那么,如何能在为他人提供免费软件之余,还能养活自己呢?开源社区的普遍做法是为该软件的用户和其他开发人员提供技术支持,这确实可行。当然,我也见证过很多尝试此运营模式,但最终还是失败了的公司。因此,我建议公司与个人都应该先专注于做好自己的本职工作。在项目成功之后,如果你想与大家分享自己的代码,并确实这么做了,那所有的人都会从中受益。 图灵社区:前两本书阐述了相同的哲学原理。如果您有机会就类似主题创作第三本书的话,您会对Linux/Unix Philosophy的九大基本准则及和十条小准则作修订与补充吗? Mike:哲学是永恒的。这些准则依然是真理,我顶多会修改一下其中的规范,让它们变得更为通用。比如,“使用脚本来提高软件杠杆效应”仍然是一个伟大的想法,但shell脚本正在被诸多新工具取代。 NIKE AIR PRESTO Flyknit Ultra 不考虑用户环境,“强制性的用户界面”其实本质上是“模态用户界面”。所以我可能会将该准则改为“避免模态用户界面。” 此外,苹果目前取得的成功恰恰可以证明“哲学是永恒的”。但凡在苹果充分实践了Unix/Linux哲学的领域,它都独占鳌头。想要“可移植性/便携性”吗?苹果将用户的整个音乐收藏库放进你的口袋、平板电脑及桌面机中。比起iTunes桌面界面,市场上有诸多高效的用户界面。然而,“可移植性/便携性”这一因素却屡获成功。那么,“只做好一件事”的小程序又是什么情况?听起来iPhone应用程序不正是在贯彻这条准则吗?什么是软件杠杆效应?苹果并没有亲自去撰写运行在其设备上的软件,它只是充分调动其他开发人员来为其编写应用。 当我兴起就类似主题而编写第三本书的念头时,我会问自己一个问题,“Linux/Unix哲学适用于现实生活的情况吗?”想想在非计算机世界中去“尽快建立一个原型”的适用性。 “让每一个程序都成为过滤器”在现实生活中可以转化为“从某处获取信息,整合成新资讯,然后发送给相应的消费者”。还有“寻求90%的解决方案”变成“不要为所有人建立一揽子解决方案,能处理大部分人的需求即可”。如果人们需要一本在总体生活层面上的Unix哲学书,我也许会沿袭这些思路去改写我的书。 图灵社区:在《Linux/Unix设计思想》的最后,您讨论了一些在当时(2003年)就已采用了Unix哲学的“新技术”。那么,现在您能否为我们介绍一下最近十年间还有哪些技术符合Unix哲学吗? Mike:好吧,我其实可以与大家讨论一些诸如近场计算(near field computing)与分析,以及整个社交网络热潮中的技术。但是,“授人鱼不如授人以渔”,我宁愿选择后者,让我们从以下这些层面来思考吧。 随着新技术与生活的联系越来越紧密,我们可以仔细观察它们都是如何贯彻Unix哲学的。

    Posted in Linux | Tagged , , , , , , , | Leave a comment