常见的图像大小定义方式
4k
4K displays are used in professional production and digital cinemas and feature 4,096 x 2,160 pixels. That’s a wider aspect ratio than 16:9, much like 2K.
1080p
1080i
The ‘p’ is for progressive can as opposed to 720i, where the ‘i’ stands for interlaced.
部分其他相关定义
VGA size (Video Graphics Array) is 640 pixels wide by 480 pixels tall.
显示分辨率 digital display resolution
- Standard Definition (640x480, 480p) with an aspect ratio of 4:3
- High Definition / HD (1280x720, 720p) with an aspect ratio of 16:9.
- Full HD (1920x1080, 1080p)
- qHD (960x540, 540p), a quarter of full HD, qHD stands for a quarter of full HD
- Quad HD (2560 x 1440, 1440p) QHD also has an aspect ratio of 16:9 which is considered wide. For this reason, some manufacturers like to put a W in front, marketing it as WQHD. The W is there to explicitly state a wide aspect ratio, although it is essentially the same thing as QHD.
- Ultra HD (3840 x 2160, 2160p) UHD, on the other hand, features a 16:9 aspect ratio and is four times the resolution of full HD.
DPI and PPI
Video Encoding - 视频编码
Video is encoded using the h.264 codec by default with a toggle to switch to h.265
H.264,H.265与VP8,VP9属于视频的编码格式,而平时所说的MP4, AVI, FLV, MOV属于封装格式,H264是一种帧间编码,只记录每一帧之间的变化,后期解码的时候只要在上一帧基础上算出变化就可以,不仅大幅度缩小体积,还能保持比较好的画质。each type [AVI or MP4] is a container for video files meaning each is an agreed apon set of standards on how to record and playback the contained video file, but as a container it doesn’t set the quality of the video
封装与编码格式列表
- 【MP4】H265、H264、MPEG4…
- 【AVI】MPEG2、AC1、H264、DIVX、XVID…
- 【MOV】MPEG2、H264、XVID…
- 【WMV】WMV、AC1…
- 【WebM】VP8、VP9…
- 【RM/RMVB】RV、RM…
- 【TS/PS】MPEG2、H264、MPEG4…
- 【MKV】所有视频编码格式
H264被MPEG组织称为AVC(Advanced Video Codec/先进视频编码),用来替代原有的MPEG4P2(DIVX、XVID),这些编码器也都是开源的。如果要转换的视频格式双方,都支持同一种编码器,那就可以直接把文件丢进FFmpeg、MediaCoder等软件中,一瞬间就可以转好。
H.265是ITU-TVCEG继H.264之后所制定的新的视频编码标准。H.265标准围绕着现有的视频编码标准H.264,保留原来的某些技术,同时对一些相关的技术加以改进。
新技术使用先进的技术用以改善码流、编码质量、延时和算法复杂度之间的关系,达到最优化设置。具体的研究内容包括:提高压缩效率、提高鲁棒性和错误恢复能力、减少实时的时延、减少信道获取时间和随机接入时延、降低复杂度等。H264由于算法优化,可以低于1Mbps的速度实现标清数字图像传送;H265则可以实现利用1~2Mbps的传输速度传送720P(分辨率1280*720)普通高清音视频传送。
H.265旨在在有限带宽下传输更高质量的网络视频,仅需原先的一半带宽即可播放相同质量的视频。这也意味着,我们的智能手机、平板机等移动设备将能够直接在线播放1080p的全高清视频。H.265标准也同时支持4K(4096×2160)和8K(8192×4320)超高清视频。可以说,H.265标准让网络视频跟上了显示屏“高分辨率化”的脚步。
H.265/HEVC的编码架构大致上和H.264/AVC的架构相似,也主要包含:帧内预测(intra prediction)、帧间预测(inter prediction)、转换(transform)、量化(quantization)、去区块滤波器(deblocking filter)、熵编码(entropy coding)等模块。但在HEVC编码架构中,整体被分为了三个基本单位,分別是:编码单位(coding unit,CU)、预测单位(predict unit,PU)和转换单位(transform unit,TU)。
- 降码率 比起H.264/AVC,H.265/HEVC提供了更多不同的工具来降低码率,以编码单位来说,H.264中每个宏块(macroblock/MB)大小都是固定的16x16像素,而H265使用了“块的四叉树划分结构”,H.265的编码单位可以选择从最小的8x8到最大的64x64,并加入了各种自适应预测、变换等编码技术,算法也经过优化,同码率下理论占用空间节省了50%足足一半,动态画面表现会更加清晰。
与H.264不同,VP8的裸流(即不包含封装格式的纯视频数据流)是不能播放的。换言之,VP8的裸流必须存放在容器中才可以播放。官方示例代码中存储VP8视频流的封装格式是IVF。
常见的视频编码器:libx264, libx265和libvpx
H.265的改变
H.265重新利用了H.264中定义的很多概念。两者都是基于块的视频编码技术,所以它们有着相同的根源,和相近的编码方式,包括:
- 以宏块来细分图片,并最终以块来细分。
- 使用帧内压缩技术减少空间冗余。
- 使用帧内压缩技术减少时间冗余(运动估计和补偿)。
- 使用转换和量化来进行残留数据压缩。
- 使用熵编码减少残留和运动矢量传输和信号发送中的最后冗余。
事实上,视频编解码从MPEG-1诞生至今都没有根本性改进,H.265也只是H.264在一些关键性能上的更强进化以及简单化。
使用FFmpeg进行视频编码解码
FFmpeg (Fast Forward Moving Picture Experts Group - MPEG 动态影像专家小组) 由多个组件组成:
- ffmpeg is a command line toolbox to manipulate, convert and stream multimedia content.
- ffplay is a minimalistic multimedia player.
- ffprobe is a simple analysis tool to inspect multimedia content.
- 安装
Linux下使用
sudo apt-get install ffmpeg - 常用参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
-i 设定输入流,可以为一组图像集,用于视频编码,或者其中一个视频格式,用于解码或者转码 -f 设定输出格式 -ss 开始时间 -t 持续时长 -to 截止时间 # 视频参数 -b 设定视频流量(码率),默认为200Kbit/s -r 设定帧速率,默认为25 -s 设定画面的宽与高 -aspect 设定画面的比例 -vn 不处理视频 -vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器 # 音频参数 -ar 设定采样率 -ab 指定音频比特率 -ac 设定声音的Channel数 -acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器 -an 不处理音频 # 指定参数 :v 表示指定视频 - video :a 表示指定音频 - audio -b:v & -b:a 视频与音频的比特率 - 同Video下的-b及Audio下的-ab -c:v & -b:a 视频与音频的编码解码格式 - 同Video下的-vcodec及Audio下的-acodec # 视频压缩 - crf compression level (0 - lossless, 16-18 - visually lossless, <=25 - fine quality, 51 - worst quality - smallest) - 转码
1 2 3 4 5
ffmpeg -i out.ogv -vcodec h264 out.mp4 ffmpeg -i out.ogv -vcodec mpeg4 out.mp4 ffmpeg -i out.ogv -vcodec libxvid out.mp4 ffmpeg -i out.mp4 -vcodec wmv1 out.wmv ffmpeg -i out.mp4 -vcodec wmv2 out.wmv
-i 后面是输入文件名。-vcodec 后面是编码格式,h264 最佳,但 Windows 系统默认不安装。-r 指定帧率,-s 指定分辨率,-b 指定比特率;于此同时可以对声道进行转码,-acodec 指定音频编码,-ab 指定音频比特率,-ac 指定声道数,例如
1
ffmpeg -i out.ogv -s 640x480 -b 500k -vcodec h264 -r 30 -acodec libfaac -ab 48k -ac 2 out.mp4
通用的编码转码方式:
1 2 3 4
#pix_fmt required - otherwise outuput may be 10 bit. yuvj420p for full swing range [0-255], yuv420p for studio range [16-239] ffmpeg -i Input.MXF -vcodec libx264 -s 4096x2160 -pix_fmt yuvj420p Output.mp4 ffmpeg -i Input.MXF -vf "thumbnail" -frames:v 1 "$file.png" //提取视频中的第一帧作为视频快照
参数 pix_fmt:用于定义每帧图像的格式,可设置最终转码视频的输出格式为yuv420p,用于图像封装
-
视频编码
x264,x265,vpx目前最常见的编码器,他们分别基于H.264, H.265及VP8的编码规范构建的编码器。x264现在占据着H.264视频编码器的半壁江山;x265则是目前实现H.265标准最好的开源视频编码器,并且在未来可能接替x264;而vpx则是Google推出的开源视频编码器,它提出的VP9编码标准的性能也不错。(HEVC(H.265)- 高效率视频编码 High Effective Video Coding 与AVC(H.264)- 高级视频编码 Advanced Video Coding)1 2
ffmpeg -framerate 30 -pattern_type glob -i "/mnt/Public/Hao/VSR/Downsampled/Noise/x0.50/SHGINF_S003_S001_T001/*.jpg" -c:v libx264 -pix_fmt yuv420p -crf 16 "Noise_video.mp4" //需要与下面相比,确定好每个参数的作用及意义 ffmpeg -i /frame_%04d.jpg -framerate 25 -vcodec libx264 Input_2k_INTER_LINEAR_video.mp4 //此方法固定是25帧,不能定义其他帧数?
-
码率控制
码率是
bitrate = file size / duration,比如一个文件20.8M,时长1分钟,那么,码率就是:biterate = 20.8M Bytes/60s = 20.8*1024*1024*8 bit/60s= 2831Kbps,一般音频的码率只有固定几种,比如是128Kbps,那么,video的就是video biterate = 2831Kbps -128Kbps = 2703Kbps。FFmpeg控制码率有3种选择,
-minrate,-b:v,-maxrate.- 设置b:v时,同时加上
-bufsize用于设置码率控制缓冲器的大小,设置的好处是,让整体的码率更趋近于希望的值,减少波动。1
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4
-minrate和-maxrate用于设置最大的码率波动阈值1
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4
- 设置b:v时,同时加上
-
视频解码
将视频中的所有内容提取为图像帧的形式:
1 2 3 4
ffmpeg -i Input.mp4 frame_%04d.png ffmpeg -i Input.mp4 frame_%04d.jpg //frame_0000.jpg to frame_9999.jpg // 将视频解码成多帧yuv格式: -segment_time需设置为小于1/fps的数; 通过设定 -frames来指定提取的帧数 ffmpeg -i Input.mp4 -f segment -segment_time 0.01 -frames 2 -pix_fmt yuv420p ./frames_%4d.yuv
- 实例
- 将视频中的音频清除,提取为纯视频:
ffmpeg -i input.mp4 -vcodec copy -an output.mp4 - 只提取音频:
ffmpeg -i Tedtalk.mp4 -acodec copy -vn output.aac - 视频剪切:
ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4 - 为视频加logo:
ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4 - 提取视频的ES(原始流):
ffmpeg –i input.mp4 –vcodec copy –an –f m4v output.h264 - 视频抓帧:
ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg,其中-r表示每秒的帧数,-q:v表示JPEG质量,其中2表示高质量 - 提取全视频的yuv数据:
ffmpeg -i input.mp4 output.yuv - 将图片由jpg转为yuv格式:
ffmpeg -i pic-001.jpeg -s 1440x1440 -pix_fmt yuv420p xxx3.yuv - 视频旋转:
ffmpeg -i 3.mp4 -vf transpose=1 rotate8.mp4
- 将视频中的音频清除,提取为纯视频:
其余的关于.MXF格式的视频转码
MXF is short for “Material eXchange Format”, which is one video container format for SMPTE standard professional video and audio content. It supports full timecode and metadata, which is designed to streamline workflows between different platforms. Many professional camcorder brands and models take advantage of this format to store video, audio and other data. It is not compatible with lots of editors, players and devices. It has become one standard of all digital video formats. MXF is mainly applied in media production, editing, distribution and storage in the film and TV industry.
通过VLC media player中的Convert功能来实现视频转换。视频转码占用内存较高,当视频转码失败时,意味着需要清理当前的内存使用。
Reference
FFmpeg Examples 使用FFmepg进行视频转码、视频格式转换、图片提取等! ffmpeg转码视频真的好用!(ffmpeg的简单使用方法) Droidviews gsmarena