ffmpeg是个音视频转换软件。比如你有个good_movie.avi文件,你可以用ffmpeg.exe把里面的音轨抽出来保存为.mp3, .m4a等文件。你还可以把分辨率从1920x1080(1080p)变成720p、提高压缩比,最终减少文件的大小(以图像变模糊为代价)。ffmpeg调用一大堆库(.dll或.so),你还可以在自己的程序里调用它。许多影音播放软件都用了ffmpeg。

AVS, AVS2, AVS3, H.265, H.264, MPEG等等是视频压缩标准,AAC, MP3等等是音频压缩标准。AVI、MKV, MP4等是文件格式。一个文件里可以有一个视频流,多个音频和字幕流。MP4也是个视频压缩标准。AVS是我国具备自主知识产权的第二代信源编码标准。"超高清视频多态基元编解码关键技术"荣获2020年度国家技术发明奖一等奖。

如何压缩视频?首先,连续的各帧变化不大,相减后会出现许多0。不用传送0000000...,而是传送1000, 0这两个数就可以。如果视频中的人挥一下手,编码器能找到运动向量,依然产生很多0。其次,人眼对亮度比对颜色敏感,把RGB(红绿蓝)变成YUV/YCbCr表示,2个或4个像素共享颜色信息,也可以进行压缩。In YCbCr, the Y is the brightness (luma), Cb is blue minus luma (B-Y) and Cr is red minus luma (R-Y).

codec [ˈkəʊdek] a device or program that compresses data to enable faster transmission and decompresses received data

纯软件编码很费时。但软件可以"调用"硬件来编码。显卡和手机上的SoC(System on chip,n合1)都有这个功能,但不是所有的格式都支持。

如何显示YCbCr格式的图像?OpenGL, Direct3D, DirectX等都有利用硬件进行加速的功能。我们看到的屏幕,可以想象成是若干层叠起来的。层叫surface或其它。层有显示的,也有隐藏的。可以先"在背后"画好YUV格式的,缩放和与其它层显示交给硬件。

CPU也有特殊的指令(SIMD, 单指令多数据),如一条指令把16个8位二进制数加起来,可以使编解码变快。

waveOut和DirectSound可以播放声音。

libsdl, Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware via OpenGL and Direct3D. It is used by video playback software, emulators, and popular games including Valve 's award winning catalog and many Humble Bundle games.

VLC 是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。自己编译ffmpeg比编译vlc简单。

posted on 2021-12-04 19:17  华容道专家  阅读(373)  评论(0)    收藏  举报