FFmpeg是一个优秀的音视频处理开源工具,ffmpeg可以用来转封装、转编码格式、压缩、解压缩等等。
命令行格式
ffmpeg <global-options> <input-options> -i <input> <output-options> <output>
global-options
全局参数
input-options
输入参数
output-options
输出参数
转编码及转封装格式
将编码格式转为H264
ffmpeg -i <input> -c:v libx264 output.mp4
转封装格式
ffmpeg -i input.mp4 -c copy output.mkv
参数说明:
-c
设置编码器
-c copy
保留输入文件的编码格式
-c:v
设置视频编码格式
-c:a
设置音频编码格式
-an
/-vn
禁用音频/视频
时移/剪切
从<start>
开始获取<duration>
时长(秒)的音视频片段
ffmpeg -ss <start> -i <input> -t <duration> -c copy <output>
截取<start>
到<end>
之间的音视频片段
ffmpeg -ss <start> -i <input> -to <end> -c copy <output>
Example:
ffmpeg -ss 00:01:50 -i <input> -t 10.5 -c copy <output>
ffmpeg -ss 2.5 -i <input> -to 10 -c copy <output>
视频质量
-b:v
/-b:a
设置比特率
e.g.:
-b:v 1000K, -b:v 8M
-q:v
/-q:a
设置固定质量参数
e.g:
-q:a 2
Example:
ffmpeg -i <input> -b:v 4M <output>
改变帧率
ffmpeg -i <input> -r 24 <output>
流映射
每个音视频文件以及文件中的流都拥有独一无二的ID,起始ID为0
例子:
0:0
表示第一个文件中的第一路流
0:1
表示第一个文件中的第二路流
2:a:0
表示第三个文件中的第一个音频流
Example:
将第一个文件中的第一个视频流和第二个文件中的第一个音频流组合输出成一个文件
ffmpeg -i input.mp4 -i input.m4a -c copy -map 0:v:0 -map 1:a:0 output.mp4
缩放
设置分辨率为320*340
ffmpeg -i <input> -vf "scale=w=320:h=240" <output>
调试宏块及运动矢量
调试运动矢量
ffmpeg -flags2 +export_mvs -i input.mp4 -vf codecview=mv=pf+bf+bb output.mp4
pf
p帧向前预测运动矢量
bf
b帧向前预测运动矢量
bb
b帧向后预测运动矢量
调试宏块
ffmpeg -debug vis_mb_type -i input.mp4 output.mp4
很实用的命令
给视频加上当前时间水印
ffmpeg -re -i sample.flv -vf "drawtext=fontsize=100:fontcolor=white:text='%{localtime}'" -c:v libx264 -c:a copy -f flv "rtmp://127.0.0.1/live/test"
循环推流
ffmpeg -re -stream_loop -1 -i sample.flv -c copy -f flv "rtmp://127.0.0.1/live/test"
解析音视频数据
打印帧信息
ffprobe -show_frames -of csv=nk=0 "rtmp://127.0.0.1/live/test"
打印数据包信息
ffprobe -show_packets -of csv=nk=0 "rtmp://127.0.0.1/live/test"
打印详细日志
ffprobe -show_frames -of csv=nk=0 -show_log 48 video.mp4