走近视频
一、什么叫视频
静止的画面叫图像,当连续的图像变化每秒超过24帧画面以上时,根据视觉暂留原理,人眼无法辨别每幅单独的静态画面,看上去是平滑连续的视觉效果,这样连续的画面叫做视频。
(帧是什么?帧是视频的基本组成单元, 就是一张图片,有可能是没压缩的, 也有可能是被压缩过的。帧分为I帧、P帧、B帧)
二、视频的主要组成部分
视频一般包含视频信息、音频信息、字幕。
视频信息
1. 分辨率
屏幕上显示的像素个数,一般是以(水平像素数×垂直像素数)表示。分辨率越高,像素的数目越多,感应到的图像越精密。而在屏幕尺寸一样的情况下,分辨率越高,显示效果就越精细和细腻。
常见的分辨率:
分辨率代号 | 所属标准 | 水平像素 | 垂直像素 | 备注 |
CIF | 标准化图像格式 | 352 | 288 | VCD |
480P | 数字电视系统标准 | 720 | 480 | DVD/标清 |
720P | 高清晰度电视标准 | 1280 | 720 | 高清 |
1080P | 高清晰度电视标准 | 1920 | 1080 | 蓝光/全高清 |
2K | 数字电影系统标准 | 2048 | 1080 | 全高清 |
4K | 数字电影系统标准 | 4096 | 2160 | 超高清 |
2. 帧率
每秒播放的图片张数。
一般来说30fps是可接受的,当提升至60fps则可以明显提升交互感和逼真感,但是一般来说超过75fps就不容易察觉到有明显的流畅度提升了。
3. 码率
视频码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。
视频文件码率=视频码率+音频码率,分为平均码率和实时码率,视频文件平均码率=文件大小*8/时长,实时码率会根据码率控制模式的不同而呈现不同的变化。
码率和质量成正比,但是文件体积也和码率成正比,所以在流媒体传输过程中出现了码率控制模式:cbr(固定码率)、vbr(可变码率)、ABR(恒定平均目标码率)。
4. 编码格式
由于连续的帧之间相似性极高,为便于储存传输,我们需要对原始的视频进行编码压缩,以去除空间、时间维度的冗余,应不同需求出现了不同的编码格式。
版本 | 用途 |
MPEG - 1 | VCD |
MPEG - 2/H.262 | DVD、数字有线电视信号(h.262与MPEG共同制定,与MPEG-2完全一致) |
MPEG - 4(第二部分) | 视频电话、网络传输、广播和媒体存储 |
H.261 | 老的视频会议和视频电话产品 |
H.263 | 视频会议、视频电话和网络视频 |
H.264(与MPEG-4第十部分完全一致) | 高精度视频的录制、压缩和发布格式,当前主流, 用途最广 |
H.265 | H.264的两倍之压缩率,可支持4K分辨率甚至到超高画质电视,最高分辨率可达到8192×4320(8K分辨率) |
vp8 | VP8目前是WebRTC视频会话的默认视频编解码器,webm视频文件的编码格式 |
vp9 | vp8的升级版,多用在网络浏览器中,webm视频文件的编码格式 |
vc-1 | 微软平台 |
5. 封装格式
封装格式(也叫容器),就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中,也就是说仅仅是一个外壳,或者大家把它当成一个放视频轨和音频轨的文件夹也可以。
格式 | 全名 | 开发商 | 初版年限 | 特点 |
MP4 | MP4 | Moving Picture Experts Group,即 MPEG(动态图像专家组) | 1998 | 常用有损压缩格式,通用性强 |
AVI | Audio Video Interleaved(音频视频交错格式) | 微软 | 1992 | 体积大算法简单 |
MOV | QuickTime 影片格式 | Apple | 1991 | 苹果专属格式对很多其他的播放器支持不是很友好 |
WMV | Windows Media Video | 微软 | 2003 | 微软的专业视频格式,兼容性并不是很好 |
FLV | Adobe Flash 网络流媒体格式 | Adobe | 2002 | 它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能 |
MKV | Matroska 多媒体容器 | Matroska.org | 2002 | 最有包容性的视频格式,能容纳无限量、多种不同类型编码的视频、音频及字幕流 |
WebM | WebM | 2010 | 谷歌推出的 HTML5 标准的网络视频标准,以MKV容器格式为基础开发,Only VP8 or VP9 video and Vorbis or Opus audio and WebVTT subtitles are supported for WebM. | |
RMVB | RMVB | Real Networks | 1997 | 根据不同的网络传输速率,而制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放,具有体积小,画质不错的优点。已过时。 |
音频信息
1. 码率
类似视频的码率,但要比视频码率小很多很多。
2. 采样率
即取样频率, 指每秒钟取得声音样本的次数。采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多。由于人耳的分辨率很有限(20HZ~20kHz) ,太高的频率并不能分辨出来,所以不同场景会出现不同的采样率设置。
采样率的值 | 备注 |
8000Hz | 电话所用的采样率,对于人的说话已经足够 |
11025Hz | 调幅(中波)无线电广播所用的采样率 |
22050Hz | 调频(短波)无线电广播所用的采样率 |
32,000 Hz | miniDV 数码视频 camcorder、DAT (LP mode)所用采样率 |
44100Hz | 音频CD、也常用于 MPEG-1 音频(VCD, SVCD, MP3)所用采样率 |
47,250 Hz | 商用 PCM 录音机所用采样率 |
48000Hz | DVD、数字电视、电影、专业音频所用的采样率 |
50,000 Hz | 商用数字录音机所用采样率 |
96,000 或者 192,000 Hz | DVD-Audio、一些 LPCM DVD 音轨、BD-ROM(蓝光盘)音轨、和 HD-DVD (高清晰度 DVD)音轨所用所用采样率 |
2.8224 MHz | Direct Stream Digital 的 1 位 sigma-delta modulation 过程所用采样率。 |
3. 采样位数
即采样值,它是用来衡量声音波动变化的一个参数,也可以说是声卡的分辨率,数值越大所发出声音的能力越强。
- 1 字节(也就是8bit) 只能记录 256 个数, 也就是只能将振幅划分成 256 个等级;
- 2 字节(也就是16bit) 可以细到 65536 个数, 这已是 CD 标准了;
- 4 字节(也就是32bit) 能把振幅细分到 4294967296 个等级, 实在是没必要了
4. 通道数
声音的通道的数目,常见的有单声道和双通道。
5. 编码格式
常见音频编码格式:
音频编码格式 | 介绍 |
AAC | Advanced Audio Coding, 出现于1997年,由Fraunhofer IIS、杜比实验室、AT&T、Sony、Nokia等公司共同开发。AAC压缩比通常为18:1。相比MP3,采用更高效的编码算法,音质更佳,文件更小。 |
MP3 | MP3是一种音频压缩技术,其全称是动态影像专家压缩标准音频层面3,简称为MP3。压缩比4:1~10:1之间。 |
Opus | Opus格式是一个开放格式,使用上没有任何专利或限制,比MP3、AAC、HE-AAC等常见格式,有更低的延迟和更好的声音压缩率。2012年7月2日,Opus被IETF批准用于标准化。 |
WMA | 微软公司推出,压缩比和音质方面都超过了MP3,即使在较低的采样频率下也能产生较好的音质。 |
PCM | pcm是经过话筒录音后直接得到的未经压缩的数据流,音质好体积大,我们常见的Audio CD就采用了PCM编码,无损 |
RA | RA就是RealAudio格式,大部分音乐网站的在线试听都是采用了RealAudio |
字幕
分为硬字幕 、软字幕、外挂字幕
硬字幕:是将字幕覆盖叠加在视频画面上。
软字幕:是指通过某种方式将外挂字幕与视频打包在一起。
外挂字幕:将字幕单独做成一个文件,常见有srt、ass格式。
三、如何查看视频信息
工具的使用
1.通过MediaInfo查看视频属性信息:
安装MediaInfo后,选中视频文件右键选择MediaInfo后可查看音视频信息
2.通过ffprobe查看视频属性信息:
ffprobe -i file
四、视频的播放
推荐的视频播放器:VLC meida player
播放器工作原理
四、用ffmpeg对视频进行常规的操作
不涉及转码的
1. 视频抽帧
每1秒抽取1张图片:
ffmpeg -i real.mp4 -r 1 image%d.jpg
每1秒抽取3张图片:
ffmpeg -i real.mp4 -r 3 image%d.jpg
抽取视频某一时刻为图片:
ffmpeg -i real.mp4 -ss 5 -t 0.001 -s 500x300 pic3.png
2. 视频切片
从视频第5s开始截,截取3s的视频片段:
ffmpeg -i real.mp4 -ss 5 -t 3 -codec copy cut1.mp4
每隔10s截取一个视频(切的时间不完全吻合):
ffmpeg -re -i test_25s.flv -codec copy -f segment -segment_time 10 -segment_format_options movflags=+faststart -reset_timestamps 1 out%03d.mp4
(带-reset_timestamps 1设置每一个切片的时间戳都从0开始,不带时间戳累加)
3. 合并视频
音视频的合并:
合并video1.flv的音频和video2.flv的视频:
ffmpeg -i video1.mp4 -i video2.mp4 -map 0:a -vcodec copy -map 1:v -acodec copy compose.mp4
合并格式相同的视频:
根据2中切片后的视频片(具有相同的编码格式及metadata信息等),可从中取几个片进行合并:
filelist.txt中内容:
file out000.mp4
file out002.mp4
Ffmpeg -f concat -i filelist.txt -c copy output_compose.mp4
合并不同格式的视频(涉及转码了):
直接用ffmpeg我试了几个都不成功,之前是这样操作的:
把视频文件1和视频文件2先后推流到同一个直播地址上,保存这个地址的流,得到的就是合并后的视频文件
4. 去音频
变成单视频:ffmpeg -i video1.mp4 -codec copy -an video1_noaudio.mp4
5. 图片到视频
ffmpeg -f image2 -i image%2d.jpg tt.mp4
(上面命令可把图片们连成一段视频,但是为了达到好的效果最好设置帧率并重新编码)
6. 视频的裁剪
ffmpeg -i intput.avi -vf crop=iw/2:ih/2:0:10 output.avi
ffmpeg -i intput.avi -vf crop=320:240:0:0 output.avi
(crop视频滤镜可以把视频从指定的x、y位置裁剪成指定的w、h)
涉及转码的
1. 转分辨率: -s 1280*720
2. 转码率 : -vb 1500k
3. 转帧率 : -r 25
4. 转编码格式 : -vcodec libx264
5. 转封装格式: 直接写带封装格式扩展名的转码后的文件(与编码格式有关)
6. 转压缩格式: -crf 23 (是保质量的和码率设置会有冲突)
例子:
ffmpeg -i p_fake.flv -vcodec libx264 -acodec copy -s 1920*1080 -vb 1500k -r 30 264.mp4
ffmpeg -i p_fake.flv -vcodec libx265 -acodec copy -s 1920*1080 -vb 1500k -r 30 h265.mp4
ffmpeg -i noface.mp4 -vcodec libvpx -acodec libopus test.webm
ffmpeg -i noface.mp4 -vcodec libvpx-vp9 -acodec libvorbis test2.webm
参考文档:
https://blog.csdn.net/leixiaohua1020/article/details/18893769
http://blog.chinaunix.net/uid-30199261-id-5768203.html
https://blog.csdn.net/weixin_41422027/article/details/108094786
https://blog.csdn.net/leixiaohua1020/article/details/15811977