概念
视频文件本身其实是一个容器(container),里面包括了视频和音频,也可能有字幕等其他内容
查看 FFmpeg 支持的容器.
1 | ffmpeg -formats |
编码格式
1 | H.262 |
查看 FFmpeg 支持的编码格式,视频编码和音频编码都在内
1 | ffmpeg -codecs |
FFmpeg 内置的视频编码器。
1 | libx264:最流行的开源 H.264 编码器 |
音频编码器
1 | libfdk-aac |
查看 FFmpeg 已安装的编码器
1 | ffmpeg -encoders |
FFmpeg 的使用格式
1 | ffmpeg \ |
eg
1 | ffmpeg \ |
上面的命令将 mp4 文件转成 webm 文件,这两个都是容器格式。输入的 mp4 文件的音频编码格式是 aac,视频编码格式是 H.264;输出的 webm 文件的视频编码格式是 VP9,音频格式是 Vorbis。
如果不指明编码格式,FFmpeg 会自己判断输入文件的编码。因此,上面的命令可以简单写成下面的样子。
1 | ffmpeg -i input.avi output.mp4 |
常用命令行参数
FFmpeg 常用的命令行参数如下
1 | -c:指定编码器 |
常见用法
查看文件信息
查看视频文件的元信息,比如编码格式和比特率,可以只使用-i参数
1 | ffmpeg -i /Users/cuishiying/Movies/dhxy.mp4 |
上面命令会输出很多冗余信息,加上-hide_banner参数,可以只显示元信息。
1 | ffmpeg -i /Users/cuishiying/Movies/dhxy.mp4 -hide_banner |
把本地音视频推到流服务器
1 | ffmpeg -re -i /Users/cuishiying/Movies/dhxy.mp4 -f flv rtmp://127.0.0.1:1935/live/123 |
查看当前本本支持的摄像头设备情况
1 | -f 指定使用 avfoundation 采集数据 |
本地摄像头推流
1 | ffmpeg -f avfoundation -framerate 30 -video_size 640x480 -i "0" -vcodec libx264 -preset ultrafast -acodec libfaac -f flv rtmp://127.0.0.1:1935/live/123 |