ffmpeg 解协议,解封装,解码及选项说明

FFmpeg 是一个非常优秀的视频处理开源工具,有时候不想使用格式工厂之类的话可以试试这个.

影音视频主要包括以下:
视音频技术主要包含以下几点:封装技术,视频压缩编码技术以及音频压缩编码技术。

  • 视频播放器播放视频文件,需要经过以下几个步骤:
    解协议,解封装,解码视音频,视音频同步。

  • 如果播放本地文件则以下几个步骤:解封装,解码视音频,视音频同步。他们的过程如图所示。

解协议

就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。

解封装

就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。

解码

就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含AAC,MP3,AC-3等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1等等。解码是整个系统中最重要也是最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。

基本选项:

  • -formats 输出所有可用格式
    -f fmt 指定格式(音频或视频格式)
    -i filename 指定输入文件名,在linux下当然也能指定:0.0(屏幕录制)或摄像头
    -y 覆盖已有文件
    -t duration 记录时长为t
    -fs limit_size 设置文件大小上限
    -ss time_off 从指定的时间(s)开始, [-]hh:mm:ss[.xxx]的格式也支持

    -itsoffset time_off 设置时间偏移(s),该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳,定义一个正偏移意味着相应的流被延迟了 offset秒。
    [-]hh:mm:ss[.xxx]的格式也支持
    -title string 标题
    -timestamp time 时间戳
    -author string 作者
    -copyright string 版权信息
    -comment string 评论
    -album string album名
    -v verbose 与log相关的
    -target type 设置目标文件类型(“vcd”, “svcd”, “dvd”, “dv”, “dv50”, “pal-vcd”, “ntsc-svcd”, …)
    -dframes number 设置要记录的帧数

视频选项

  • -b 指定比特率(bits/s),似乎FFmpeg是自动VBR的,指定了就大概是平均比特率
    -bitexact 使用标准比特率
    -vb 指定视频比特率(bits/s)
    -vframes number 设置转换多少桢(frame)的视频
    -r rate 帧速率(fps) (可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97)
    -s size 指定分辨率 (320×240)
    -aspect aspect 设置视频长宽比(4:3, 16:9 or 1.3333, 1.7777)
    -croptop size 设置顶部切除尺寸(in pixels)
    -cropbottom size 设置底部切除尺寸(in pixels)
    -cropleft size 设置左切除尺寸 (in pixels)
    -cropright size 设置右切除尺寸 (in pixels)
    -padtop size 设置顶部补齐尺寸(in pixels)
    -padbottom size 底补齐(in pixels)
    -padleft size 左补齐(in pixels)
    -padright size 右补齐(in pixels)
    -padcolor color 补齐带颜色(000000-FFFFFF)
    -vn 取消视频
    -vcodec codec 强制使用codec编解码方式(‘copy’ to copy stream)
    -sameq 使用同样视频质量作为源(VBR)
    -pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率
    -passlogfile file 选择两遍的纪录文件名为 file
    -newvideo 在现在的视频流后面加入新的视频流

要得到一个高画质音质低容量的MP4的话,首先画面最好不要用固定比特率,而用VBR参数让程序自己去判断,而音质参数可以在原来的基础上提升一点,听起来要舒服很多,也不会太大

你可能感兴趣的:(ffmpeg 解协议,解封装,解码及选项说明)