一、下载安装配置环境
windows:下载地址 ->
二、linux下安装(ubuntu)
apt update
apt-get install ffmpeg
仅需两行命令,所有相关文件自动下载,推荐使用windows子系统体验ffmpeg。
三、下载安装包后,解压至自定义目录,配置环境变量指向ffmpeg的bin目录就可以在任意目录命令行使用了。bin目录下总共包含三个命令行工具:
- ffmpeg:对视频进行各种处理(转码、缩放等)。
ffmpeg -i input.mp4 -s 100x100 output.mp4 // -i 输入文件 -s 缩放,后接尺寸参数
- ffplay:播放器。
ffplay -i input.mp4
- ffprobe:查看多媒体文件的信息。
ffprobe -i input.mp4
四、ffmpeg基本功能介绍
1、转换文件格式
例如将MP4格式的视频文件转码成mov或者avi格式,平常修改后缀的操作对文件格式没有任何影响。
实例命令ffmpeg -i input.mp4 out.mov
2、改变文件编码(转码)
使用命令ffmpeg -codecs
可查看ffmpeg支持的编码格式
常用方案,MP4编码:H264视频编码+AAC音频编码,成熟稳定易拓展。
google-youtube视频网站方案,VP8视频编码+Vorbis音频编码,不易拓展,不推荐。
以上支持1080p及以下分辨率。
视频压缩转码(经测试大概是压缩至原视频的40%):
ffmpeg -i in.mp4 -s 1280x720 -pix_fmt yuv420p -vcodec libx264 -preset medium -profile:v high -level:v 4.1 -crf 23 -acodec aac -ar 44100 -ac 2 -b:a 128k out.mp4
相关知识:
-vcodec 视频编码器 一般是libx264
-acodec 音频编码器 一般是aac
-pix_fmt 颜色域值 通常都是yuv420p
-preset 编码器预设 veryfast medium veryslow等等,影响编码器效率
-profile:v 压缩比 超清视频 hign 实时通信 baseline 流媒体 main
-level:v 编码器配置具体规范限制,1-5.2,1080p视频 4.1
-crf 码率控制模式,阅读下面详解
-r 帧率,每秒多少帧
-ar 音频采样率 44100/48000 常用
-ac 声道数 1单声道 2双声道
-b:a/-ab 音频比特率 128/198为常用
码率控制模式:
-qp
// 恒定量化器模式 参数值(画质级别) 0...20...40...51 越小质量越高使用该模式每一帧都按照预设值进行编码达到预设画质。
优点:画质好,缺点:文件大
-crf (18~28)
// 恒定速率因子模式,按照人眼特点,根据不同帧的视觉敏感程度设置码率,敏感度低的码率低一点,敏感度高的码率高一点。
文件大小适中画质适中。
-b
// 固定目标码率模式 每一帧固定的码率,可以得到固定的文件画质和大小,适用于对文件有严格要求的场景。
2、音视频分离、合并
提取视频
ffmpeg -i input.mp4 -vcodec copy -an out.mp4
提取音频
ffmpeg -i input.mp4 -vn -acodec copy out.m4a
合并音视频
ffmpeg -i out.m4a -i out.mp4 -c copy out_2.mp4
输出文件格式后缀以原视频编码格式为准,ffprobe input.mp4
命令可以查看。
截取音视频
ffmpeg -i input.mp3 -ss 00:01:00 -to 00:01:10 -acodec copy out.mp3
ffmpeg -i input.mp3 -ss 00:01:00 -t 10 -acodec copy out.mp3
// 两段命令等效
// -ss:指定截取开始时间 -to:指定截取结束时间 -t:指定截取长度
ffmpeg -ss 00:01:00 -i input.mp3 -to 00:01:10 -acodec copy -copyts out.mp3
"-ss"放"-i"前面启用关键帧技术,操作速度更快,"-copyts"保证开始时间和结束时间准确(保留时间戳)如果不使用,生成的音频时间不准确。
// -sseof: 从末尾开始截取,配合"-t"使用,截取末尾n秒音频
合并多个视频(各项参数一致,尺寸、码率、编码等等)
ffmpeg -i "concat:1.mp4|2.mp4|3.mp4" -c copy out.mp4
截图
ffmpeg -i input.mp4 -ss 5 -vframes 1 out.jpg
// 截取视频第五秒第一帧图片
添加水印
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=20:20"
// -filter_complex 添加滤镜
// overlay水印位置,20:20=左:上(离左边,离顶部xx像素)
提取视频所有帧图
ffmpeg -i input.mp4 out_%d.jpg
// %d 以数字递增填充文件名,输出图片,经过测试素材库25s的视频10s全部提取