谁是编程界的六边形战士

<html> <head></head> <body> <div class="content ql-editor"> <p>如果问世界上最伟大的程序员是谁,大概很多人会回答图灵。</p> <p>但如果问世界上仍在世的最伟大的程序员是谁,这个答案就会有分歧得多,可能有人会说《计算机程序设计艺术》的作者高德纳,或者Linux的作者林纳斯,其中可能还会参杂着一个有些陌生的名字: <strong>贝拉</strong>。</p> <p>Fabrice Bellard (法布里斯·贝拉) 1972年生于法国格勒诺布尔,这可能是你第一次听说过的法国程序员。</p> <p>实际上他大学就读于巴黎高等综合理工学院,听起来名字平平无奇,也就是出过三位诺贝尔奖获得者,一名菲亚特奖得主以及三位法国总统。</p> <p>当然,他的天才在上大学之前就已经展现出来了。</p> <p>从9岁开始,他就在计算器上练习编码技术,11岁开始学习BASIC。17岁的时候写了一个压缩器LZEXE,在DOS环境中非常流行。25岁发现了一种新的,更快的公式来计算二进制表示中的pi的单位数,在2009年,他用一台家用电脑打破了由超级计算机创造的圆周率世界纪录。</p> <p>在计算机科学三大浪漫方面。编译器领域,2000年他写了个4KB大小的C语言编译器子集 OTCC ,赢得了国际混淆C代码大赛(IOCCC)的冠军,这个项目后来发展为TinyCC,一个完整的包括C语言预处理器,C语言编译器,C语言汇编器和C语言的连接器在内的TCC可执行程序,而只有100KB左右大小。图形学领域他也有作品TinyGL。操作系统领域,他用JavaScript写了一个PC虚拟机Jslinux。</p> <p>最近几年Fabrice的主要精力放在LTE软基站系统上,我对这个领域完全不熟悉,没法通俗易懂的形容他的能力和成就,你只要知道他是这个领域的绝对大牛就可以。</p> <p>而今天我们要聊的,则是除了上述之外,另一个吊打全领域的项目:FFmpeg。</p> <p>FFmpeg有多强呢?可以说,它能够解决你的一切和音视频相关的问题,诸如暴风影音,QQ影音还有 很多人用过的格式工厂,都使用了FFmpeg的源码。不过这个使用的并不光彩,因为FFmpeg是基于LGPL开源的,而这些项目违反了开源协议。关于开源和开源协议的部分,下次有机会再讲。</p> <p>可能说到这里,你对FFmpeg还没有一个直观的感受,它是什么,它能做什么?不如直接安装一个上手试用看看吧。</p> <p>首先你最好在FFmpeg的<a href="http://ffmpeg.org/" target="_blank">官网</a>找到下载链接,下载安装一下,在命令行输入ffmpeg可以看到这个图片</p> <p> 就说明安装成功了。</p> <p>我们先来一个最简单的:</p> <div class="ql-code-block-container"> <div class="ql-code-block"> ffmpeg -i video.mp4 audio.mp3 </div> </div> <p>直接可以提取视频中的音频内容。</p> <div class="ql-code-block-container"> <div class="ql-code-block"> ffmpeg -i video.flv video.mp4 </div> </div> <p>如果你从网上下载的视频是flv,无法播放,那直接也可以转成其他的格式。</p> <div class="ql-code-block-container"> <div class="ql-code-block"> ffmpeg -i input.mp4 -s 640x480 -c:a copy output.mp4 </div> </div> <p>这个是我非常常用的一个指令。每次做完视频,我会把小样发在群里预览,为了加快传输速度,也是为了防止意外流出,我会把视频做一个压缩。如果想要更安全的话,可能就需要给视频加水印了。</p> <p>当然,加水印也可以用FFmpeg处理:</p> <div class="ql-code-block-container"> <div class="ql-code-block"> ffmpeg -hide_banner -i big_buck_bunny.mp4 -i doggie2.png -filter_complex "overlay=x=0:y=0" out.mp4 -y </div> </div> <p>FFmpeg还能做什么呢?比如视频转gif?</p> <div class="ql-code-block-container"> <div class="ql-code-block"> ffmpeg -ss 00:00:20 -i sample.mp4 -to 10 -r 10 -vf scale=200:-1 cutekid_cry.gif # -ss : indicates the starting point of GIF # -i : input file # sample.mp4 : My video file name # -to : End position of the GIF file # -r : frame rate. You can increase the value to get more quality GIF file # -vf : filter graph. To scale the GIF image in the desired size. </div> </div> <p>我还用FFmpeg做过一个有趣的事情</p> <div class="ql-code-block-container"> <div class="ql-code-block"> ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg </div> </div> <p>这个脚本可以把视频切成图片,在看一些教学视频的时候,等于快速把视频变成了PPT,可以大大提高效率。</p> <p>上面提到的这些功能大概也就是发挥了FFmpeg 1%的能力吧,这东西的恐怖之处就在于,你但凡遇到新的音视频方面的问题,就很发现,FFmpeg能解决。它好像总是刚刚好够用,总是够用。</p> <p>有很多同学困惑说,什么项目才是足够大的,足够复杂的项目。其实真正的复杂是被包含在内部的,看起来功能繁多的系统,可能反而很简单,而做一个“可以把任何视频转换成任何格式”,一句话就能说清楚的软件,是非常复杂的。</p> #开源项目推荐# </div> </body> </html>

下载 APP