FFMPEG完美入门资料---002---FFmpeg 支持能力说明

FFMPEG入门资料---001---介绍和参数说明_音视频开发老马的博客-CSDN博客

接着上文写:

2.3.1 FFmpeg 对编码解码器的支持 ffmpeg 支持的编解码器种类共有 280 多种, 涵盖了几乎所有常见音视频编码格式, 能解码几乎所有的音视频, 每种音视频编解码器的实现都在 libavcodec 目录下有具体的 C 语言实现。

  • 注:编码器和解码器的名称不是完全匹配的,因此有些编码器没有对应相同名称的解码器,反之, 解码器也一样。即使编码和解码都支持也不一定是完全对应的,例如 h263 解码器对应有 h263p 和 h263 编码器。

2.3.2 FFmpeg 对容器格式的支持 ffmpeg 支持对绝大多数的容器格式的读写操作,共计 190 多种, 涵盖了互联网上各 种常见媒体格式及日常生活中及专业应用中的各种媒体格式。 2.3.3 FFmpeg 对过滤器的支持

Filters说明
aformatConvert the input audio to one of the specified formats.
anullPass the source unchanged to the output.
aresampleResample audio data.
ashowinfoShow textual information for each audio frame.
abufferBuffer audio frames, and make them accessible to the filterchain.
anullsrcNull audio source, never return audio frames.
abuffersinkBuffer audio frames, and make them available to the end of the filter graph.
anullsinkDo absolutely nothing with the input audio.
copyCopy the input video unchanged to the output.
cropCrop the input video to width:height❌y.
drawboxDraw a colored box on the input video.
fadeFade in/out input video
fieldorderSet the field order.
fifoBuffer input images and send them when they are requested.
formatConvert the input video to one of the specified pixel formats.
gradfunDebands video quickly using gradients.
hflipHorizontally flip the input video.
lutCompute and apply a lookup table to the RGB/YUV input video.
lutrgbCompute and apply a lookup table to the RGB input video.
lutyuvCompute and apply a lookup table to the YUV input video.
negateNegate input video.
noformatForce libavfilter not to use any of the specified pixel formats for the input to the next filter.
nullPass the source unchanged to the output.
overlayOverlay a video source on top of the input.
padPad input image to width:height[❌y[:color]] (default x and y: 0, default color: black).
pixdesctestTest pixel format definitions.
scaleScale the input video to width:height size and/or convert the image format.
selectSelect frames to pass in output.
setdarSet the frame display aspect ratio.
setptsSet PTS for the output video frame.
setsarSet the pixel sample aspect ratio.
settbSet timebase for the output link.
showinfoShow textual information for each video frame.
slicifyPass the images of input video on to next video filter as multiple slices.
splitPass on the input to two outputs.
transposeTranspose input video.
unsharpSharpen or blur the input video.
vflipFlip the input video vertically.
bufferBuffer video frames, and make them accessible to the filterchain.
colorProvide an uniformly colored input, syntax is: [color[:size[:rate]]]
movieRead from a movie source.
nullsrcNull video source, never return images.
rgbtestsrcGenerate RGB test pattern.
testsrcGenerate test pattern.
buffersinkBuffer video frames, and make them available to the end of the filter graph.
nullsinkDo absolutely nothing with the input video.

2.3.4 FFmpeg 对图像颜色空间的支持 ffmpeg 支持常见的图像颜色空间,并且在 libavswcale 中定义了颜色空间转换的相关 函数实现各种颜色模式的互转。 2.4 FFmpeg 功能及使用说明 2.4.1 ffplay 对多媒体的支持能力验证

一、视频 3gp 177X144 支持播放, 在 windows 下播放正常, 但是在 linux 下面偶有 BUG 如果 发现画面无法显示而声音可以播放的情况下 可以试着切换全屏或者切换分辨率。

AVI208X176支持
320X240支持
720X400支持
720X576支持
DAT352X288支持
DiVX720X576支持
MKV320X240支持
352X288支持
704X304支持
720X576支持
MP4320X240支持
352X288支持
720X400支持
MPG320X240支持
352X288支持
480X576支持
720X576支持
720X480支持
VOB352X288支持
XVID720X576支持
MOV支持
RMVB支持

二、音频

AC348KHZ支持
APE11KHZ支持
22KHZ支持
44KHZ支持
48KHZ支持
MP332KHZ64Kbps支持
32KHZ128KbpS支持
32KHZ160Kbps支持
32KHZ192Kbps支持
32KHZ320Kbps支持
44KHZ64Kbps支持
44KHZ128Kbps支持
44KHZ160Kbps支持
44KHZ192Kbps支持
44KHZ320Kbps支持
48KHZ64Kbps支持
48KHZ128Kbps支持
48KHZ160Kbps支持
48KHZ192Kbps支持
48KHZ320Kbps支持
OGG32KHZ128Kbps支持
32KHZ192Kbps支持
44KHZ64Kbps支持
44KHZ128Kbps支持
44KHZ192Kbps支持
48KHZ64Kbps支持
44KHZ128Kbps支持
44KHZ192Kbps支持
WAV11KHZ支持
22KHZ16Kbps支持
44KHZ16Kbps支持
48KHZ16Kbps支持
WMA8KHZ16Kbps支持
11KHZ16Kbps支持
16KHZ16Kbps支持
22KHZ16Kbps支持
44KHZ16Kbps支持
48KHZ16Kbps支持

三、图像

PNG支持
JPG支持
JPEG支持
GIF支持
BMP支持

★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

2.4.2 FFmpeg 格式转换

第一步:准备媒体

前面已经讲的很清楚了, ffmpeg 如何安装不在赘述。 准备好相应的文件, 如图 2-1 所示。

第二步:启动 ffmpeg 由于做的是格式转换,在 ffserver 上不能直观的看见结果,故我是在 linux 下进行的。 打开终端,值得一提的是格式转换需要超级用户才能进行,故在命令行输入:su,<回车>, 输入密码进入超级用户, 本例中, 以 FFmpeg 将 test.avi 转换为 test.mpg。 在命令行中输 入:./ffmpeg –i test.avi –r 25 –s 720x400 test.mpg<回车>。 其中原格式分辨率为 320x240, 将转为 720x400, -r 前面已经解释其含义, 表示设置帧频为 25。 转换成功后如图 2-2 所 示,前后两种格式播放效果如图 2-3 所示。相应的,转换为其他格式做相应的变化即可。

同时还可以在转换格式时进行强制的音视频转换, 如–vcodec + 格式, 将会强制将 视频按指定格式编码, -acodec +格式, 将会强制按指定格式编码音频信息。 在转换中有 很多其他参数可以指定,如码率、分辨率、帧率等,具体按照 ffmpeg 的参数说明指定参 数即可。 但有一条转低不转高的原则需要注意, 即品质差的音视频转换不建议转换到品 质好的音视频。

再说说如何在转换视频的时候将音频合成到视频中, 且覆盖其原来的音频。 这个现 在摸索出两种方法。 方法一:需要两条命令实现, 先在命令行中输入:

./ffmpeg –i test.avi -an –r 25 test.mpg <回车>

此时将生成一个没有声音的 test.mpg 视频, 再在命令行中输入:

./ffmpeg –i test.mpg –i test.mp3 –r 25 test1.mpg<回车>

此时将会生成一个名为 test1.mpg 的视频。 该视频播放时视频为 test.avi 的视频, 但音频 变为了 test.mp3 的音频了。 方法二:只要一条指令即可实现。 在命令行中输入:

./ffmpeg –i test.avi –i test.mp3 –vcodec copy –acodec copy –r 25 test2.mpg<回车>

此时将会生成一个名为 test2.mpg 的视频, 播放时其视频为 test.avi 的视频, 音频为 test.mp3。 –vcodec copy 为 force video codec(‘copy’ to copy stream)。 有一点需要注意, 文件命名不能有空格, 否则会导致编译时不能通过。 另外, -an 为不能使音频记录。 第三步:播放媒体 播放我们转换的媒体, 看看是否满足我们当初的愿望, 不出什么差错的话, 是完全 能够满足我们的要求的。 2.4.3 FFmpeg 视频截图 截取一张 300x200 尺寸大小的格式为 jpg 的一张图片:

./ffmpeg –i test.avi –y –f image2 –t 0.001 –s 300x200 test.jpg

要截取指定时间的图片, 如 5 秒之后的:

./ffmpeg –i test.avi –y –f image2 –ss 5 –t 0.001 –s 300x200 test.jpg

其中, -ss 后的单位为秒, 也可写成:-ss 00:00:05。 把视频的前 30 帧转换为一个动态的 gif 图。 需要说明的是, 转换成功之后, 如果用 ffplay 播放是看不出效果的, 建议换成其他图片播放器播放。 其转换命令为:

 ./ffmpeg –i test.avi –vframes 30 –pix_fmt rgb24–y –f gif test.gif

也可以从视频中的第 10 秒开始截取后面的 5 秒内容转换为一个无限重播的动态 gif 图。 其命令为:

./ffmpeg –i test.avi –pix_fmt rgb24 –ss 10 –t 5 –y –f gif test.gif

上面两种动态 gif 都是只播一次, 想让其一直播, 可再加一个参数:-loop_output 0。

2.4.4 FFmpeg 屏幕录制

屏幕录制其命令为:

./ffmpeg -f x11grab -r 25 -s wxga -i :0.0 /tmp/outputFile.mpg

其他相关参数可自行添加。 需要说明的是, 各个版本的 ffmpeg 对屏幕录制的命令不一。 如果你只想录制一个应用程序窗口或者桌面上的一个固定区域, 那么可以指定偏移位置 和区域大小。 使用 xwininfo -frame 命令可以完成查找上述参数。 注:ffmpeg 的屏幕录制功能只能在 Linux 环境下有效。 并且在配置时需要添加 –enable-x11grub 指令, 默认关闭。 2.4.5 FFmpeg 音视频采集 把摄像头的实时视频录制下来, 存储为文件

./ffmpeg -f video4linux -s 320x240 -r 10 -i /dev/video0 test.asf

录音, 其命令为:

./ffmpeg –i /dev/dsp -f oss test.mp3

2.5 FFmpeg 应用实例 2.5.1 用 FFserver 从文件生成流媒体 一、安装 ffmpeg 在 ubuntu 下, 运行 sudo apt-get ffmpeg 安装 ffmpeg, 在其他 linux 操作系统下, 见 ffmpeg 的编译过程(编译完成后可执行自动安装)。 二、准备预播放的媒体文件 如 test.Mp3,在本文档中,默认放入用户文件夹下得 Music 文件夹内.(直接从设备采 集不在本文档叙述范围之内) 三、修改 ffserver 配置信息 ffserver 配置文件为: /etc/ffserver.conf 打开, 填写配置信息.配置信息包括三方面:

  • 1.端口绑定等基本信息,在/etc/ffserver.conf 中有详细注释,在此不再重复,最终配 置信息为:

Port 8090
BindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000

2.媒体文件配置信息.本信息根据具体的媒体文件类型直接在配置文件中取消注释 掉相应文件类型的配置信息, 然后填写文件路径即可:

# MP3 audio
<Stream test.mp3> 
File "/home/xiaoma/Music/test.mp3"
Format mp2
NoVideo
</Stream>

四、启动 ffserver

在终端中运行如下代码来启动ffserver

sudo ffserver -f /etc/ffserver.conf

五、播放流媒体 在浏览器中输入http://127.0.0.1:8090/test.mp3即可播放音乐. 在终端中输入 ffplay http://localhost:8090/test.mp3 可播放流媒体. 2.5.2 用 FFserver 从设备生成实时流 一、准备媒体 按照上节步骤安装 ffmpeg,保证摄像头和声卡可用, 将从摄像头和声卡获取音视频 信息。 二、修改 ffserver 配置信息 ffserver 配置文件为: /etc/ffserver.conf 打开, 填写配置信息.配置信息包括三方面:

  • 1.端口绑定等基本信息,在/etc/ffserver.conf 中有详细注释,在此不再重复,最终配 置信息为:

Port 8090
BindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000

2.fend(传冲信息),在文件播放中,基本不用动本配置信息,只需要根据具体情况分 配缓冲文件.最终配置信息如下:

 <Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 2M
ACL allow 127.0.0.1
</Feed>

(中间会有很多很多配置信息,都是关于音视频的,有些配置还不懂,慢慢摸索吧)

<Stream test1.mpg> 
Feed feed1.ffm
 Format mpeg
 AudioBitRate 32
 AudioChannels 1
 AudioSampleRate 44100
VideoBitRate 64
 VideoBufferSize 40
 VideoFrameRate 3
 VideoSize 160x128 
 VideoGopSize 12
 </Stream>
 # Flash
 <Stream test.swf>
 Feed feed1.ffm
 Format swf
 VideoFrameRate 2 
VideoIntraOnly
NoAudio
 </Stream>

三、启动 FFserver

在终端中运行如下代码来启动 ffserver.

sudo ffserver -f /etc/ffserver.conf

四、启动 ffmpeg 本例中, 以 ffmpeg 作为实时摄像头采集输入.在命令行中输入:

./ffmpeg -f video4linux2 -r 25 -i /dev/video0 /tmp/feed1.ffm 

如果有音频设备, 则采集音频的命令如下:

./ffmpeg -f oss -i /dev/dsp -f video4linux2 -r 25 -i /dev/video0 /tmp/feed1.ffm 

(音频格式参数自己配置) 五、播放流媒体 在浏览器中输入 http://127.0.0.1:8090/test1.mpg 即可播放音乐. 在终端中输入 ffplay http://localhost:8090/test.swf 可播放流媒体.

作者:张芳涛 

 

★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如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数据。 视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。 接下来的几节我们将会列出主要的流媒体协议,封装格式,以及视音频编码标准。更详细的比较可以参考: 视频参数(流媒体系统,封装格式,视频编码,音频编码,播放器)对比 有关本文中涉及到的协议数据、封装格式数据、视频编码数据、音频编码数据、视频像素数据、音频采样数据的分析可以参考下面系列文章:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值