一、编译的系统环境和FFmpeg的版本
系统:MacOS 15.1
FFmpeg 版本:7.1.1
使用的视频文件:ikun_video1.mp4 ,需要的自行去下载或者自己下载其他视频进行学习
使用的视频文件:ikun_video2.mp4,需要的自行去下载或者自己下载其他视频进行学习(视频合并的命令用到)
下载地址:
你干嘛哎哟
哇真的是你啊
二、FFmpeg高级命令 ----- 视频处理
1. 使用 FFmpeg 处理视频和图片的互转
1-1. 使用 FFmpeg 从视频中截取一张图片
先使用 FFmpeg 获取媒体文件的信息的命令
# -hide_banner 用于隐藏启动时的版权信息和编译详情,让输出更干净,之前的查询命令和下面的命令也可以这样子处理。
ffmpeg -i ikun_video1.mp4 -hide_banner
显示媒体文件的信息等如下图:
用Duration: 00:00:08.17 我们看出,视频的时长是 8.17 秒
参数选择:
-ss 00:00:02: 从 2 秒处开始截取(可以换成任意时间)
-vframes 1 : 表示只输出 1 帧视频画面
输出图片的格式:可以是jpg,png,bmp 等,这里我用png来进行演示
使用的命令:
ffmpeg -i ikun_video1.mp4 -ss 00:00:02 -vframes 1 screenmatch.png -hide_banner
1-2. 使用 FFmpeg 把视频转为图片
从上面的参数看出,Duration: 00:00:08.17 视频的时长是 8.17 秒
A. 基本命令:将整个视频转为一帧一张图片
例如:是一个 30FPS、10 秒的视频,那就会输出大约
30(帧/秒) × 10(秒) = 300 张图片
参数选择:
-f image2: 强制使用 image2 格式(图片序列输出格式,标准做法),可选
output-%3d.png输出文件名格式,例如: output-001.png, output-002.png(自行定义)
ffmpeg -i ikun_video1.mp4 -f image2 output-%3d.png -hide_banner
B. 限制帧率(如每秒提取 1 帧)
参数选择:
-r 1: 每秒提取 1 帧(帧率为 1 FPS)也就是每秒提取 1 张图片
-f image2: 强制使用 image2 格式(图片序列输出格式,标准做法)
output-%3d.png输出文件名格式,例如: output-001.png, output-002.png(自行定义)
可选参数:
-s 800x600 :设置输出图片的分辨率为800x600
-t 5 :只处理前 5 秒
ffmpeg -i ikun_video1.mp4 -r 1 -f image2 output-%3d.png -hide_banner
C. 指定开始时间和帧数(提取部分帧)
参数选择:
-ss 00:00:03:从第 3 秒开始
-vframes 10:提取 10 帧,从当前开始点,输出前 10 帧视频画面
output-%3d.png输出文件名格式,例如: output-001.png, output-002.png(自行定义)
可选参数:
-s 800x600 :设置输出图片的分辨率为800x600
ffmpeg -i ikun_video1.mp4 -ss 00:00:03 -vframes 10 output-%3d.png -hide_banner
最后验证图片文件是否生成并且正常即可。
1-3. 使用 FFmpeg 把图片转为视频
通过上面的命令
ffmpeg -i ikun_video1.mp4 -r 25 -f image2 output-%3d.png -hide_banner
我们得到一系列的图片在文件夹里面。 然后我们可以通过下面的命令进行把图片转为视频:
A. 使用图片重新合成视频,没有音频
参数选择:
-framerate 25:读取图片序列为每秒 25 张
-f image2: 强制使用 image2 格式(图片序列输出格式,标准做法)
输出格式:FFmpeg 自动根据 .mp4 使用 H.264 编码器
ffmpeg -framerate 25 -f image2 -i output-%03d.png new_video.mp4 -hide_banner
B. 使用图片重新合成视频,并且添加音频
参数选择:
-i ikun_video1.mp3 : 根据自己的需要来添加音乐
-c:v libx264:使用 H.264 视频编码器
-pix_fmt yuv420p:确保视频兼容大多数播放器(很重要)
ffmpeg -framerate 25 -i output-%3d.png -i ikun_video1.mp3 -c:v libx264 -pix_fmt yuv420p new_video.mp4 -hide_banner
最后验证视频文件是否生成并且正常播放即可,这里是mp4文件,如果是其他视频的格式可以根据自己的选择进行。 然后通过下面的命令来对的生成的视频参数日志进行检查:
ffmpeg -i new_video.mp4
1-4. 使用 FFmpeg 把视频转为GIF图片
A. 把整个视频转位gif,适合几秒的视频,这个方式生成的 GIF 文件通常很大,且颜色不够优化。
ffmpeg -i ikun_video1.mp4 ikun_video1.gif -hide_banner
B. 只截取一段视频转 GIF
参数选择:
-ss 00:00:03:从第 3 秒开始
-t 3: 时长 3 秒
可选参数:
fps=10:控制帧率(1 秒 10 帧,降低文件大小)
scale=320:-1:将宽度压缩为 320px,高度等比缩放
ffmpeg -i ikun_video1.mp4 -ss 00:00:03 -t 3 -vf "fps=10,scale=320:-1" ikun_video1.gif -hide_banner
C. 色彩优化的高质量GIF
第一步,生成调色板(提升颜色质量)(视频 → 调色板,从视频帧中提取颜色分布)
参数选择:
fps=10:控制帧率(1 秒 10 帧,降低文件大小)
scale=320:-1:将宽度压缩为 320px,高度等比缩放
flags=lanczos:使用高质量的缩放算法(Lanczos),缩放更清晰,边缘更平滑
palettegen:生成色彩调色板
ffmpeg -i ikun_video1.mp4 -vf "fps=10,scale=320:-1:flags=lanczos,palettegen" palette.png -hide_banner
第二步,利用上面生成的调色板生成gif (视频 + 调色板 → GIF,结合调色板生成高质量 GIF)
参数选择:
-filter_complex "fps=10,scale=320: -1:flags=lanczos[x];[x][1:v]paletteuse"
fps=10: 每秒 10 帧
scale=320: -1:缩放视频宽度为 320px,高度等比自适应
flags=lanczos 使用 Lanczos 缩放算法,输出更清晰
[x]:中间标签名,表示处理后的视频帧流
[x][1:v]paletteuse:将[x]视频帧 和 palette 图片进行颜色映射
paletteuse: 应用调色板,生成高质量 GIF
ffmpeg -i ikun_video1.mp4 -i palette.png -filter_complex "fps=10,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse" ikun.gif -hide_banner
最后验证gif文件是否生成并且正常即可。
1-5. 使用 FFmpeg 把GIF图片转为视频
A. 基本命令,这里以mp4为例, 其他视频类型根据自己的需要自己转换
输出格式:FFmpeg 自动根据 .mp4 使用 H.264 编码器
ffmpeg -i ikun.gif new_video.mp4 -hide_banner
可能出现的问题:
- 播放器兼容性差:直接转换出来的视频有时会使用不兼容的像素格式(如 yuv444p),导致在某些播放器或网页上无法正常播放。
- 帧率不可控, 可能导致播放卡顿或过快。
B. 根据帧率来进行控制,没有音频
参数选择:
-c:v libx264:使用 H.264 视频编码器
-pix_fmt yuv420p:确保视频兼容大多数播放器(很重要)
-vf "fps=25,scale=320: -1:flags=lanczos"
fps=10: 每秒 25 帧
scale=320: -1:缩放视频宽度为 320px,高度等比自适应
flags=lanczos 使用 Lanczos 缩放算法,输出更清晰
可选参数:
-movflags faststart:优化 MP4 文件的播放体验(适合网页使用)。
命令如下:
ffmpeg -i ikun.gif -movflags faststart -pix_fmt yuv420p -vf "fps=25,scale=320:-1:flags=lanczos" new_video.mp4 -hide_banner
C. GIF转成视频后,添加背景音乐
在上面命令的基础上,在 ikun.gif 后面加上 ikun_video1.mp3 即可,根据自己的需要修改命令或者音频文件
可以根据自己的需要在上面命令的基础上添加即可
ffmpeg -i ikun.gif -i ikun_video1.mp3 new_video.mp4 -hide_banner
或者: 参数根据自己的需要进行修改
ffmpeg -i ikun.gif -i ikun_video1.mp3 -movflags faststart -pix_fmt yuv420p -vf "fps=25,scale=320:-1:flags=lanczos" new_video.mp4 -hide_banner
最后验证视频文件是否生成并且正常播放即可,这里是合成mp4文件,如果是其他视频的格式可以根据自己的选择进行。然后通过下面的命令来对视频的参数日志进行检查:
ffmpeg -i new_video.mp4
2. 使用 FFmpeg 修改视频的分辨率和长宽比
2-1. 使用 FFmpeg 修改视频的分辨率
使用的参数:-vf scale=宽:高 参数
scale=宽:高 参数说明:
scale=1280:720: 修改为固定的分辨率
scale=320: -1: 视频的宽度缩放为320像素,高度自动按原始比例等比调整
scale=-1:320: 视频的高度缩放为320像素,宽度自动按原始比例等比调整
scale=iw/2:ih/2: 宽高都缩小一半(iw/ih 是原宽高)
scale=trunc(iw/2)*2:trunc(ih/2)*2: 强制输出为偶数宽高,防止某些编码器报错
上面的参数可以根据自己的需要自行选择或者增添修改 进行的命令:
ffmpeg -i ikun_video1.mp4 -vf "scale=1280:720" ikun_video_1280x720.mp4 -hide_banner
最后验证视频文件是否生成并且正常播放即可,这里是mp4文件,如果是其他视频的格式可以根据自己的选择进行。 然后通过下面的命令来对的生成的视频参数日志进行检查:
ffmpeg -i ikun_video_1280x720.mp4
2-2. 使用 FFmpeg 修改视频的长宽比 注意:改变显示比例 不改变实际分辨率 参数说明: -aspect 4:3:设置显示比例为4:3, 根据自己的需要进行修改
进行的命令:
ffmpeg -i ikun_video1.mp4 -aspect 4:3 new_video.mp4 -hide_banner
最后验证视频文件是否生成并且正常播放即可,这里是mp4文件,如果是其他视频的格式可以根据自己的选择进行。 然后通过下面的命令来对的生成的视频参数日志进行检查:
ffmpeg -i new_video.mp4
3. 使用 FFmpeg 把多个视频合并为一个视频
根据配置文件合并, 同样这里以转为mp4为例, 其他视频类型根据自己的需要自己转换
- 在视频的目录下,创建一个filelist.txt文件,命令:
touch filelist.txt
- 然后往filelist.txt 文件里面写入下面的视频, 可以对txt文件进行编辑
vim filelist.txt
然后按 i 键进行输入
file 'ikun_video2.mp4'
file 'ikun_video1.mp4'
然后按照 esc 和 输入:wq 进行保存退出 使用如下的命令来进行检查,如果输出的日志跟上面输入的内容一样即可
cat filelist.txt
- 最后根据下面参数进行视频合并的命令:
参数选择:
•-f concat:使用 concat 模式
•-c copy:不重新编码,直接拼接(要求编码一致)上面两个视频都是mp4的格式,视频编码的格式是H.264, 音频编码的格式是AAC
ffmpeg -f concat -i filelist.txt -c copy new_video.mp4 -hide_banner
最后验证视频文件是否生成并且正常播放即可,这里是mp4文件,如果是其他视频的格式可以根据自己的选择进行。 然后通过下面的命令来对的生成的视频参数日志进行检查:
ffmpeg -i new_video.mp4
4. 使用 FFmpeg 为视频添加封面
4-1. 为 MP4 格式的视频添加封面
参数说明:
-i cover.jpg:封面图片
-map 0 -map 1:保留原视频音视频流,并加入图片流
-c copy:不重新编码,快速合成
-disposition:1 attached_pic:设置封面为附加图片
ffmpeg -i ikun_video1.mp4 -i ikun_cover.jpg -map 0 -map 1 -c copy -disposition:v:1 attached_pic new_video.mp4 -hide_banner
4-2. 为 MKV 格式的视频添加封面
可选择参数:
-metadata:s:t title="Cover": 添加封面图的标题元数据
-metadata:s:t comment="Cover Image":添加注释元数据
ffmpeg -i ikun_video1.mkv -i ikun_cover.jpg -map 0 -map 1 -c copy -metadata:s:t title="Cover" -metadata:s:t comment="Cover Image" new_video.mkv -hide_banner
最后验证视频文件是否生成并且正常播放即可
然后通过下面的命令来对视频的参数日志进行检查:
ffmpeg -i new_video.mp4
或
ffmpeg -i new_video.mkv
5. 使用 FFmpeg 实现视频的倒放
A. 对视频进行倒放,把音频去掉,避免音频不同步
参数说明:
-vf reverse:对视频帧进行反转
-an:去除音频,如果不加上这个参数的话,音频不会进行倒放,音频不同步
ffmpeg -i ikun_video1.mp4 -vf reverse -an new_video.mp4 -hide_banner
B. 对视频和音频一起同时进行倒放
注意:视频和音频必须分别倒放再合成
音频倒放的命令:
参数说明:
-af areverse
ffmpeg -i ikun_video1.mp4 -vn -af areverse reversed_audio.aac -hide_banner
最后使用如下的命令一起对音频和视频进行合并倒放:
ffmpeg -i reversed_video.mp4 -i reversed_audio.aac -c:v copy -c:a aac reversed_new_video.mp4 -hide_banner
最后验证视频文件是否生成并且正常播放即可,这里是mp4文件,如果是其他视频的格式可以根据自己的选择进行。 然后通过下面的命令来对的生成的视频参数日志进行检查:
ffmpeg -i reversed_new_video.mp4
6. 使用 FFmpeg 实现对视频进行剪裁
先使用 FFmpeg 获取媒体文件的信息的命令
# -hide_banner 用于隐藏启动时的版权信息和编译详情,让输出更干净,之前的查询命令和下面的命令也可以这样子处理。
ffmpeg -i ikun_video1.mp4 -hide_banner
显示媒体文件的信息等如下图:
从 Stream #0:00x1: Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 852x480, 833 kb/s, 30 fps, 30 tbr, 16k tbn (default)
看出视频的分辨率是 852 x 480,表示坐标范围是 x: 0-852 , y: 0-480,左上角为原点 (0,0)。
剪裁的参数: -vf "crop=out_w:out_h: x:y"
参数说明:
in_w, iw : 输入的宽度
in_h, ih : 输入的高度
out_w,ow:裁剪后画面的宽度
out_h,oh:裁剪后画面的高度
x:从原视频的哪个 x 坐标开始裁剪(从左到右)
y:从原视频的哪个 y 坐标开始裁剪(从上到下)
可选参数:
-c:a copy:音频直接复制,不重新编码(可选)
6-1. 裁剪左上角 600x400 区域
从上面看出,原视频的分辨率是852 x 480, 如果剪裁 裁剪左上角 600x400 区域, 命令如下:
ffmpeg -i ikun_video1.mp4 -vf "crop=600:400:0:0" -c:a copy new_crop_video.mp4 -hide_banner
或
ffmpeg -i ikun_video1.mp4 -vf "crop=w=600:h=400:x=0:y=0" -c:a copy new_crop_video.mp4 -hide_banner
6-2. 裁剪偏移左上角 100 像素
ffmpeg -i ikun_video1.mp4 -vf "crop=in_w-100:in_h-100:100:100" -c:a copy new_crop_video.mp4 -hide_banner
6-3. 裁剪右下角 600x400 区域
从上面看出,原视频的分辨率是852 x 480, 如果剪裁 裁剪右下角 600x400 区域, x=852-300=252, y=480-400=80 , 命令如下:
ffmpeg -i ikun_video1.mp4 -vf "crop=600:400:252:80" -c:a copy new_crop_video.mp4 -hide_banner
或
ffmpeg -i ikun_video1.mp4 -vf "crop=w=600:h=400:x=252:y=80" -c:a copy new_crop_video.mp4 -hide_banner
或者
ffmpeg -i ikun_video1.mp4 -vf "crop=w=600:h=400:x=in_w-600:y=in_h-400" -c:a copy new_crop_video.mp4 -hide_banner
6-4. 裁剪中心区域450 x 240
ffmpeg -i ikun_video1.mp4 -vf "crop=450:240" -c:a copy new_crop_video.mp4 -hide_banner
或
ffmpeg -i ikun_video1.mp4 -vf "crop=w=450:h=240" -c:a copy new_crop_video.mp4 -hide_banner
6-5. 裁剪中心区域,大小为输入视频的 2/3
ffmpeg -i ikun_video1.mp4 -vf "crop=2/3*in_w:2/3*in_h" -c:a copy new_crop_video.mp4 -hide_banner
或
ffmpeg -i ikun_video1.mp4 -vf "crop=2/3*iw:2/3*ih" -c:a copy new_crop_video.mp4 -hide_banner
最后验证视频文件是否生成并且正常播放即可,需要更多的剪裁要求需要可以自行查询文档,这里是合成mp4文件,如果是其他视频的格式可以根据自己的选择进行。 然后通过下面的命令来对视频的参数日志进行检查:
ffmpeg -i new_crop_video.mp4
7. 使用 FFmpeg 实现对视频进行旋转
7-1. 使用 transpose 滤镜进行旋转
transpose 的 参数值:
0: 顺时针旋转 90 度 + 垂直翻转
1: 顺时针旋转 90 度
2: 逆时针旋转 90 度
3: 逆时针旋转 90 度 + 垂直翻转
根据自己的选择进行旋转,这里选择顺时针旋转 90 度,命令如下:
ffmpeg -i ikun_video1.mp4 -vf "transpose=1" new_transpose_video.mp4 -hide_banner
7-2. 使用 rotate 滤镜任意角度旋转
rotate 的 参数值:
rotate=angle:角度(弧度制),例 45*PI/180
ow/oh:输出尺寸自动适配
可选参数:
c=black:空白区域填充黑色
根据自己的选择进行旋转,这里选择顺时针旋转 45 度,命令如下:
ffmpeg -i ikun_video1.mp4 -vf "rotate=45*PI/180:ow=rotw(45*PI/180):oh=roth(45*PI/180):c=black" new_rotate_video.mp4 -hide_banner
对应角度和弧度对照表:
对应角度 | 弧度 |
---|---|
0° | rotate=0 |
30° | rotate=30*PI/180 |
45° | rotate=45*PI/180 |
90° | rotate=PI/2 |
180° | rotate=PI |
270° | rotate=3*PI/2 |
顺时针90° | rotate=-PI/2 |
最后验证视频文件是否生成并且正常播放即可,需要更多的旋转要求需要可以自行查询文档,这里是合成mp4文件,如果是其他视频的格式可以根据自己的选择进行。 然后通过下面的命令来对视频的参数日志进行检查:
ffmpeg -i new_transpose_video.mp4
ffmpeg -i new_rotate_video.mp4
8. 使用 FFmpeg 实现修改视频的播放速度
A. 只修改视频速度(不含音频) 视频倍速参考:
倍速 | 参数 |
---|---|
4x | 0.25*PTS |
2× | 0.5*PTS |
1.5x | 2/3*PTS |
0.5x | 2.0*PTS |
0.25x | 4.0*PTS |
参数说明:
-vf setpts=0.5PTS:视频播放 2.0 倍速 (1/0.5)
-vf setpts=2.0PTS:视频播放 0.5 倍速 (1/2.0)
-an:去掉音频轨,防止音频和视频不同步
可以根据自己的需要进行处理,例如这里实现0.5倍速播放视频,去掉音频, 命令如下:
ffmpeg -i ikun_video1.mp4 -vf "setpts=2.0*PTS" -an new_2.0_pts_video.mp4 -hide_banner
B. 视频和音频同时进行:
音频倍速参考:
倍速 | 参数 |
---|---|
2x | 2.0 |
1.5× | 1.5 |
0.5x | 0.5 |
0.25x | 0.5,0.5 |
4x | 2.0,2.0 |
参数选择:
-filter:a "atempo=0.5" :音频播放 0.5倍速
-filter:a "atempo=2.0" :音频播放 2.0倍速
可以根据自己的需要进行处理,例如这里实现0.5倍速播放视频和音频, 命令如下:
ffmpeg -i ikun_video1.mp4 -vf "setpts=2.0*PTS" -filter:a "atempo=0.5" new_2.0_pts_video.mp4 -hide_banner
最后验证视频文件是否生成并且正常播放即可,需要更多的倍速播放要求需要可以自行查询文档,这里是合成mp4文件,如果是其他视频的格式可以根据自己的选择进行。
然后通过下面的命令来对视频的参数日志进行检查:
ffmpeg -i new_2.0_pts_video.mp4
9. 使用 FFmpeg 实现对屏幕进行录制
这里:Mac和Windows和Linux的录制命令不一样,这里用Mac的作为参考,如果需要Windows和Linux的,请去参考 Windows和Linux的屏幕录制命令
先查看可用的设备的命令:
ffmpeg -f avfoundation -list_devices true -i "" -hide_banner
从上面的日志可以看出,录制屏幕的外设有Macbook pro相机和主屏幕和外接屏幕,我们这里使用Capture Screen 0 或者Capture Screen 1
A. 录制整个屏幕(仅视频,无音频):
使用的命令:
ffmpeg -f avfoundation -framerate 30 -i "2" -pix_fmt yuv420p new_record_video.mp4 -hide_banner
使用的参数:
-f avfoundation:指定输入为 mac 的视频源
-framerate 30:帧率
"2":表示屏幕设备,用上面的命令查询得到,这里使用外接屏幕
-pix_fmt yuv420p:保证视频兼容性
-video_size:设置分辨率(可选)
使用ctrl + c 中断录制
B. 录制整个屏幕(视频和音频):
从上面的日志可以看出,录制音频设备有外置麦克风和Macbook Pro 麦克风。
在上面的基础上, 添加参数-i "1:0" , 命令如下:
ffmpeg -f avfoundation -framerate 30 -i "1:0" -pix_fmt yuv420p new_record_video.mp4 -hide_banner
使用ctrl + c 中断录制
最后验证视频文件是否生成并且正常播放即可,这里是mp4文件,如果是其他视频的格式可以根据自己的选择进行。
然后通过下面的命令来对的生成的视频参数日志进行检查:
ffmpeg -i new_record_video.mp4
10. 使用 FFmpeg 实现对电脑摄像头进行录制
这里:Mac和Windows和Linux的录制命令不一样,这里用Mac的作为参考,如果需要Windows和Linux的,请去参考 Windows和Linux的屏幕录制命令
先查看可用的设备的命令:
ffmpeg -f avfoundation -list_devices true -i "" -hide_banner
从上面的日志可以看出,录制屏幕的外设有Macbook pro相机和主屏幕和外接屏幕,我们这里用Macbook Pro相机
使用的参数:
-f avfoundation:指定输入为 mac 的视频源
-framerate 30:帧率
"0":表示屏幕设备,用上面的命令查询得到,这里使用Macbook Pro 相机
-pix_fmt yuv420p:保证视频兼容性
-video_size:设置分辨率(可选)
ffmpeg -f avfoundation -framerate 30 -video_size 1280x720 -i "0" output.mp4 -hide_banner
最后验证视频文件是否生成并且正常播放即可,这里是mp4文件,如果是其他视频的格式可以根据自己的选择进行。 然后通过下面的命令来对的生成的视频参数日志进行检查:
ffmpeg -i new_record_video.mp4
三、FFmpeg高级命令 ----- 音频处理
1. 使用 FFmpeg 去除视频中的音频
这里以mp4为例, 其他视频类型根据自己的需要自己转换
参数选择:
-an:禁用音频输出,也就是去除音频;
-c:v copy:复制视频流,不重新编码,加快处理速度(可选)
ffmpeg -i ikun_video1.mp4 -an -c:v copy new_video.mp4 -hide_banner
最后验证视频文件是否生成并且正常播放即可,这里是mp4文件,如果是其他视频的格式可以根据自己的选择进行。 然后通过下面的命令来对的生成的视频参数日志进行检查:
ffmpeg -i new_video.mp4
2. 使用 FFmpeg 实现对音频进行压缩
这里以mp3为例, 其他音频类型根据自己的需要自己转换
常见音频压缩方式:
更换编码格式(如从 WAV → MP3、AAC)
降低音频码率(如从 320k → 128k)
更改采样率(如从 48kHz → 44.1kHz)
调整声道数(如从双声道变成单声道)
这里使用降低音频码率,更改采样率和调整声道数作为实例
A. 降低音频的码率, 使用的命令: 一些常用的比特率有: 96k, 112k, 128k, 160k, 192k, 256k, 320k.值越大,文件所需要的体积就越大。
通过上面的命令,我们可以看出,音频的比特率是192k:
ffmpeg -i ikun_video1.mp3 -hide_banner
Duration: 00:00:08.20, start: 0.025057, bitrate: 192 kb/s
通过降低音频的比特率到128k,命令如下:
ffmpeg -i ikun_video1.mp3 -b:a 128k ikun_video1_128k.mp3 -hide_banner
或者
ffmpeg -i ikun_video1.mp3 -ab 128k ikun_video1_128k.mp3 -hide_banner
B. 压缩并转为单声道 + 更低采样率
-ac 1:变为单声道
-ar 22050:采样率从 44100Hz 降为 22050Hz
ffmpeg -i ikun_video1.mp3 -ac 1 -ar 22050 ikun_video1_ac_1_ar_22050.mp3 -hide_banner
最后验证音频文件是否生成并且正常播放即可,这里是mp3文件,如果是其他音频的格式可以根据自己的选择进行。 然后通过下面的命令来对的生成的音频参数日志进行检查:
ffmpeg -i ikun_video1_128k.mp3
ffmpeg -i ikun_video1_ac_1_ar_22050.mp3
3. 使用 FFmpeg 实现音频倒放的命令
这里以转为mp3为例, 其他音频类型根据自己的需要自己转换
音频倒放的命令:
参数说明: -af areverse
ffmpeg -i ikun_video1.mp3 -af areverse reversed_audio.mp3 -hide_banner
最后验证音频文件是否生成并且正常播放即可,这里是mp3文件,如果是其他音频的格式可以根据自己的选择进行。
然后通过下面的命令来对的生成的音频参数日志进行检查:
ffmpeg -i reversed_audio.mp3
4. 使用 FFmpeg 实现音频的音量的修改
这里以mp3为例, 其他音频类型根据自己的需要自己转换
参数说明:
-af "volume=1.5": 将音量提升 1.5 倍
-af "volume=0.5": 将音量减半
-af "volume=-5dB": 将音量减少 5 dB
-af "volume=5dB": 将音量增加 5 dB
以上的参数可以根据自己的需要进行选择,这里用音量提升 1.5 倍的实力作为参考,命令如下:
ffmpeg -i ikun_video1.mp3 -af "volume=1.5" ikun_video_1.5volume.mp3 -hide_banner
最后验证音频文件是否生成并且正常播放即可,这里是mp3文件,如果是其他音频的格式可以根据自己的选择进行。
然后通过下面的命令来对的生成的音频参数日志进行检查:
ffmpeg -i ikun_video_1.5volume.mp3
5. 使用 FFmpeg 实现音频的播放速度的修改
音频倍速参考:
倍速 | 参数 |
---|---|
2x | 2.0 |
1.5× | 1.5 |
0.5x | 0.5 |
0.25x | 0.5,0.5 |
4x | 2.0,2.0 |
参数选择:
-filter:a "atempo=0.5" :音频播放 0.5倍速
-filter:a "atempo=2.0" :音频播放 2.0倍速
可以根据自己的需要进行处理,例如这里实现0.5倍速播放视频和音频, 命令如下:
ffmpeg -i ikun_video1.mp3 -filter:a "atempo=0.5" ikun_video_0.5atempo.mp3 -hide_banner
最后验证音频文件是否生成并且正常播放即可,这里是mp3文件,如果是其他音频的格式可以根据自己的选择进行。 然后通过下面的命令来对的生成的音频参数日志进行检查:
ffmpeg -i ikun_video_0.5atempo.mp3
6. 使用 FFmpeg 为音频添加封面 / 去除封面
这里以mp3为例, 其他音频类型根据自己的需要自己转换
6-1. 使用 FFmpeg 为音频添加封面
参数选择:
-i ikun_cover.jpg:封面图片(支持 JPEG/PNG) 名称和格式自行定义
-map 0:a:使用第一个输入(音频)的音轨
-map 1:v:使用第二个输入(图片)的图像轨
-id3v2_version 3:写入 ID3v2.3 标签(通用兼容)
可选参数:
-c:a copy:音频不重新编码
ffmpeg -i ikun_video1.mp3 -i ikun_cover.jpg -map 0:0 -map 1:0 -c:a copy -id3v2_version 3 audio_add_cover.mp3 -hide_banner
最后验证音频文件是否生成并且正常播放即可,这里是mp3文件,如果是其他音频的格式可以根据自己的选择进行。 然后通过下面的命令来对的生成的音频参数日志进行检查:
ffmpeg -i audio_add_cover.mp3
6-2. 使用 FFmpeg 为音频去除封面
在上面生成的新的封面基础上进行处理,使用的命令如下:
ffmpeg -i audio_add_cover.mp3 -map 0:0 -c copy audio_remove_cover.mp3 -hide_banner
最后验证音频文件是否生成并且正常播放即可,这里是mp3文件,如果是其他音频的格式可以根据自己的选择进行。 然后通过下面的命令来对的生成的音频参数日志进行检查:
ffmpeg -i audio_remove_cover.mp3
四、FFmpeg高级命令 ----- 图片处理
1. 使用 FFmpeg 进行对图片格式的转换
这里以jpg为例, 其他图片类型根据自己的需要自己转换
可选参数:
-vf scale: 根据自己的需要修改图片的分辨率
直接转换命令, 将jpg 图片格式转为 png
ffmpeg -i ikun_cover.jpg ikun_cover.png -hide_banner
直接转换命令, 将jpg 图片格式转为 bmp
ffmpeg -i ikun_cover.jpg ikun_cover.bmp -hide_banner
最后验证图片文件是否生成并且正常打开即可 然后通过下面的命令来对图片的参数日志进行检查:
ffmpeg -i ikun_cover.png
ffmpeg -i ikun_cover.bmp
2. 使用 FFmpeg 修改图片大小
这里以jpg为例, 原图片的分辨率是500x500,其他图片类型根据自己的需要自己转换
使用的参数:-vf scale=宽:高 参数
scale=宽:高 参数说明:
scale=500:500: 修改为固定的分辨率
scale=300: -1: 图片的宽度缩放为300像素,高度自动按原始比例等比调整
scale=-1:300: 图片的高度缩放为300像素,宽度自动按原始比例等比调整
scale=iw/2:ih/2: 宽高都缩小一半(iw/ih 是原宽高)
上面的参数可以根据自己的需要自行选择或者增添修改
例如修改图片的分辨率是300x300, 进行的命令:
ffmpeg -i ikun_cover.jpg -vf scale=300:300 ikun_cover_300x300.jpg -hide_banner
或者
ffmpeg -i ikun_cover.jpg -vf scale=300:-1 ikun_cover_300x300.jpg -hide_banner
或者
ffmpeg -i ikun_cover.jpg -vf scale=-1:300 ikun_cover_300x300.jpg -hide_banner
最后验证图片文件是否生成并且正常打开即可, 然后通过下面的命令来对图片的参数日志进行检查:
ffmpeg -i ikun_cover_300x300.jpg
3. 使用 FFmpeg 对图片进行剪裁
这里以jpg为例, 原图片的分辨率是500x500,其他图片类型根据自己的需要自己转换
剪裁的参数:
-vf "crop=width:height: x:y"
参数说明:
width : 裁剪宽度(像素)
height : 裁剪高度(像素)
x : 从左往右的偏移量
y : 从上往下的偏移量
3-1. 裁剪左上角 300x300 区域
ffmpeg -i ikun_cover.jpg -vf "crop=300:300:0:0" new_crop_cover.jpg -hide_banner
或者
ffmpeg -i ikun_cover.jpg -vf "crop=w=300:h=300:x=0:y=0" new_crop_cover.jpg -hide_banner
3-2. 裁剪右下角 300x300 区域
从上面看出,原视频的分辨率是500 x 500, 如果剪裁 裁剪右下角 300 x 300 区域,
x=500-300=200, y=500-300=200 , 命令如下:
ffmpeg -i ikun_cover.jpg -vf "crop=300:300:200:200" new_crop_cover.jpg -hide_banner
或者
ffmpeg -i ikun_cover.jpg -vf "crop=w=300:h=300:x=200:y=200" new_crop_cover.jpg -hide_banner
或者
ffmpeg -i ikun_cover.jpg -vf "crop=w=300:h=300:x=in_w-300:y=in_h-300" new_crop_cover.jpg -hide_banner
3-3. 从中心裁剪 300×300 区域
ffmpeg -i ikun_cover.jpg -vf "crop=300:300" new_crop_cover.jpg -hide_banner
或者
ffmpeg -i ikun_cover.jpg -vf "crop=w=300:h=300" new_crop_cover.jpg -hide_banner
3-4. 裁剪中心区域,大小为原图片分辨率的 1/2
ffmpeg -i ikun_cover.jpg -vf "crop=in_w/2:in_h/2" new_crop_cover.jpg -hide_banner
或者
ffmpeg -i ikun_cover.jpg -vf "crop=iw/2:ih/2" new_crop_cover.jpg -hide_banner
最后验证图片文件是否生成并且正常打开即可, 然后通过下面的命令来对图片的参数日志进行检查:
ffmpeg -i new_crop_cover.jpg
4. 使用 FFmpeg 对图片添加水印
4-1. 对图片添加文字水印
相关的参数:
text='xxxx': 设置水印文字内容
x=10:y=10: 水印位置坐标,根据自己的需求进行放置
fontcolor=white: 文字的颜色
fontsize=24: 文字的大小
fontfile=‘/System/Library/Fonts/Supplemental/Arial.ttf’ : 指定字体文件, 可以根据自己的需要进行,不过这边编译的时候会出现乱码,加上后正常
ffmpeg -i ikun_cover.jpg -vf "drawtext=fontfile='/System/Library/Fonts/Supplemental/Arial.ttf':text='KeyFafa':x=10:y=10:fontsize=24:fontcolor=white" ikun_cover_drawtext.jpg -hide_banner
4-2. 对图片添加图像水印
相关的参数:
-i watermark.png : 水印的图片,可以根据自己的需要自行替换
-filter_complex "overlay=10:10" 水印放置在距离左上角 (10, 10) 的位置
ffmpeg -i ikun_cover.jpg -i watermark.png -filter_complex "overlay=10:10" ikun_cover_watermark.jpg -hide_banner
最后验证图片文件是否生成并且正常打开即可, 然后通过下面的命令来对图片的参数日志进行检查:
ffmpeg -i ikun_cover_drawtext.jpg
ffmpeg -i ikun_cover_watermark.jpg
5. 使用 FFmpeg 对图片进行压缩
这里以jpg和png为例,对图片进行压缩
5-1. 对jpg格式的图片进行压缩
参数说明:
-q:v 控制图片质量,范围2-31
•2:高质量(几乎无损)
•10:中等质量
•20-30:明显压缩、较小体积
推荐值:2-5 保证视觉质量较好
可选参数:
-vf scale=宽:高 参数
scale=宽:高 参数说明
ffmpeg -i ikun_cover.jpg -q:v 5 ikun_cover_compressed.jpg -hide_banner
5-2. 对png格式的图片进行压缩
参数说明:
-compression_level:越高压缩越强,体积越小,但速度变慢
•默认值是 -compression_level 6
ffmpeg -i watermark.png -compression_level 9 watermark_compressed.png -hide_banner
五、更多FFmpeg查询命令链接地址
上面部分命令的参数可以按照自己的需求去进行添加或者修改。 上面知识列举了部分的命令,如果没有合适的话,可以根据自己的需求到该网址进行查询并使用。 FFmpeg文档地址