通用参数
- -f fmt:指定格式(音频或者视频格式)
- -i filename:指定输入文件名,在Linux下当然也能制定:屏幕录制或者摄像头
- -y:覆盖已有文件
- -t duration:指定时长
- -fs limit_size:设置文件大小
- -ss time_off: 从指定的时间(单位:S)开始,也支持hh:mm:ss[.xxx]的格式
- -re:按照帧率发送,作为推流工具的时候一定要加入该参数,否则ffmpeg会按照最高速率向流媒体服务器不停发送数据。
- -map:输出文件的流映射关系。
视频参数
- -b:指定比特率(bit/s),ffmpeg是自动使用VBR的,若指定了该参数则使用平均比特率。
- -bitexact:使用标准比特率。
- -vb:指定视频比特率(bits/s)
- -r rate:帧速率(fps)
- -s size:指定分辨率
- -aspect aspect:设置视频长宽比
- -croptop size:设置顶部切除尺寸
- -cropbottom size:设置底部切除尺寸
- -cropleft size:设置左切除尺寸
- -cropright size:设置右切除尺寸
- -padtop size:设置顶部补齐尺寸
- -padbottom size: 设置底部补齐尺寸
- -padleft size:设置左部补齐
- -padright size:设置右部补齐
- -padcolor color:补齐使用的颜色
- -vn:取消视频的输出
- -vcodec codec:强制使用codec编码方式('copy' 代表不进行重新编码)
音频参数
- -ab:设置比特率,对于MP3若要听高品质声音建议设置为单声道80Kbit/s,双声道160Kbit/s
- -aq quality: 设置音频采样率(Hz)
- -ac channel:声道数,1单声道,2立体声。
- -an:取消音频轨
- -acodec codec:指定音频编码('copy' 代表不进行重新编码)
- -vol volume: 设置录制音量大小
实践
ffmpeg -formats
# 表示将文件input.mp4从第50s开始剪切20s的时间,输出到文件 output.mp4中
ffmpeg -i input.mp4 -ss 00:00:50.0 -codec copy -t 20 output.mp4
ffmpeg -i input.mp4 -t 00:00:50 -c copy small-1.mp4 --ss 00:00:50 -codec copy small-2.mp4
ffmpeg -i input.mp4 -vn -acodec copy output.m4a
ffmpeg -i input.mp4 -an -vcodec copy output.mp4
# 视频数据使用mp4toannexb
ffmpeg -i input.mp4 -an -vcodec copy -bsf:v h264_mp4toannexb output.h264
ffmpeg -i input.aac -i input.h264 -acodec copy -bsf:a aac_adtstoasc -vcodex copy -f mp4 output.mp4
ffmpeg -i input.wav -acodec libfdk_aac output.aac
ffmpeg -i input.wav -acodec pcm_s16le -f s16le output.pcm
- 重新编码视频文件,复制音频流,同时封装到MP4格式的文件中
ffmpeg -i input.flv -vcodec libx264 -acodec copy output.mp4
# 按照分辨比例不动宽度改为100(使用VideoFilter的 scaleFilter),帧率改为10(-r),只处理前5秒钟(-t)的视频,生成gif
ffmpeg -i input.mp4 -vf scale=100:-1 -t 5 -r 10 output.gif
# 每4秒钟截取一帧视频画面生成一张图片,生成的图片从 frames_0001.png开始一直递增下去
ffmpeg -i input.mp4 -r 0.25 frames_%04d.png
ffmpeg -i frames_%04d.png -r 5 output.gif
# 将input.wav中的声音减小一半
ffmpeg -i input.wav -af 'volume=0.5' output.wav
# 将input.wav文件中的前5s做一个淡入效果
ffmpeg -i input.wav -filter_complex afade=t=in:ss=0:d=5 output.wav
# 将input.wav文件从200s开始,做5s的淡出效果
ffmpeg -i input.wav -filter_complex afade=t=out:st=200:d=5 output.wav
# 将input.wav和accompany.wav两个文件进行mix,按照时间长度较短的音频文件的时间长度作为最终输出的output.wav的时间长度。
ffmpeg -i input.wav -i accompany.wav -filter_complex amix=inputs=2:duration=shortest output.wav
# 将input.wav按照0.5倍的速度进行处理生成output.wav
ffmpeg -i input.wav -filter_complex atempo=0.5 output.wav
# main_w代表主视频宽度,overlay_w 代表水印宽度,main_h代表主视频高度,overlay_h代表水印高度
ffmpeg -i input.mp4 -i input.png -filter_complex '[0:v][1:v]overlay=main_w-overlay_w-10:10:1[out]' -map '[out]' output.mp4
# 提亮参数是brightness,取值范围是从-1.0到1.0,默认值是0
ffmpeg -i input.flv -c:v libx264 -b:v 800k -c:a libfdk_aac -vf eq=brightness=0.25
-f mp4 output.mp4
# 比度参数是contrast,取值范围是从-2.0到2.0,默认值是1.0
ffmpeg -i input.flv -c:v libx264 -b:v 800k -c:a libfdk_aac -vf eq=contrast=1.5 -f mp4 output.mp4
ffmpeg -i input.mp4 -vf "transpose=1" -b:v 600k output.mp4
ffmpeg -i input.mp4 -an -vf "crop=240:480:120:0" -vcodec libx264 -b:v 600k output.mp4
- 将一张RGBA格式表示的数据转换为JPEG格式的图片
ffmpeg -f rawvideo -pix_fmt rgba -s 480*480 -i input.rgb -f image2 -vcodec mjpeg
output.jpg
- 将一个YUV格式表示的数据转换为JPEG格式的图片
ffmpeg -f rawvideo -pix_fmt yuv420p -s 480*480 -i input.yuv -f image2 -vcodec mjpeg output.jpg
ffmpeg -re -i input.mp4 -acodec copy -vcodec copy -f flv rtmp://xxx
ffmpeg -i http://xxx/xxx.flv -acodec copy -vcodec copy -f flv output.flv
ffmpeg -i 131.mp3 -i 134.mp3 -map 0:a -c:a:0 libfdk_aac -b:a:0 96k -map 1:a -c:a:1 libfdk_aac -b:a:1 64k -vn -f mp4 output.m4a