1.安装FFmpeg
运行以下命令安装FFmpeg:
sudo apt-get update
sudo apt-get install ffmpeg
查看FFmpeg安装成功:sudo ffmpeg -version
2.FFmpeg基本语法
2.1 基本格式
ffmpeg [全局参数] {[输入文件参数] -i 输入文件} ... {[输出文件参数] 输出文件} ...
- 全局参数:日志输出,文件覆盖等全局选项.
- 输入文件参数:读取文件的输入选项
- 输入文件:绝对地址
- 输出文件参数:转换(编解码器,质量等)或过滤或流映射
- 输出文件
- 参数太多的时候,为了便于查看,ffmpeg 命令可以写成多行。
2.2 高频命令行参数
-c
: 指定编码器- -
c copy
: 直接复制,不经过重新编码(这样比较快) - -
c:v
:指定视频编码器 - -
c:a
:指定音频编码器 -i
:指定输入文件-an
:去除音频流-vn
: 去除视频流-preset
:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。-y
:不经过确认,输出时直接覆盖同名文件-b:v
:指定视频比特率-b:a
:指定音频比特率-r
:指定帧率
2.3 转换视频格式
将 input.mp4 转换为 output.avi:
ffmpeg -i input.mp4 output.avi
2.4 转换视频并指定编码
将 input.mp4 转换为 output.flv 并指定视频编码为 libx264,音频编码为 aac:
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.flv
2.5 指定比特率
转换视频并指定视频比特率为 500kbps,音频比特率为 128kbps:
ffmpeg -i input.mp4 -b:v 500k -b:a 128k output.mp4
2.6 指定帧率
转换视频并指定帧率为 24 fps:
ffmpeg -i input.mp4 -r 24 output.mp4
2.7 裁剪视频
从 input.mp4 中裁剪出从第 10 秒开始,持续 15 秒的视频:
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:15 -c copy output.mp4
2.8 视频缩放
将视频尺寸缩放到 320x240:
ffmpeg -i input.mp4 -vf "scale=320:240" output.mp4
2.9 提取音频
从视频文件中提取音频:
ffmpeg -i input.mp4 -q:a 0 -map a output.aac
2.10 添加水印
在视频上添加图片水印:
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
3.实现画中画视频
sudo ffmpeg \
-i /home/starry/Downloads/video.mp4 \ #主视频路径
-i /home/starry/Downloads/small_video.mp4 \ #小视频路径
-filter_complex \
"[1:v]scale=320:240[small]; \
[0:v][small]overlay=10:10" \
output1.mp4
-filter_complex
参数是用来指定复杂的滤镜操作[1:v]
是一个标签,这里的标签遵循以下格式:[index:stream_type]
index 是输入文件的索引,从0开始。在命令中,第一个 -i 指定的文件索引为0,第二个 -i 指定的文 件索引为1,以此类推。
stream_type 表示流的类型,v 代表视频流(video),a 代表音频流(audio)。[1:v]scale=320:240[small]
:这部分定义了一个滤镜链,它从第二个输入视频(/home/starry/Downloads/video.mp4)中选择视频流([1:v]),将其缩放为320x240的大小,并将缩放后的视频流命名为 [small]。[0:v][small]overlay=10:10[out]
:这部分继续滤镜链的定义,它将前面缩放好的小视频流([small])覆盖到第一个输入视频(/home/starry/Downloads/video.mp4)的视频流([0:v])上。overlay=10:10
指定了小视频在主视频上的位置,即左上角的坐标是(10, 10)。
4.效果展示
- 扩展
Overlay 画中画(十分重要!!!)
Overlay\[=x:y\[\[:rgb={0, 1}\]\]
- 参数说明:
- x 从左上角的水平坐标,默认值为 0
- y 从左上角的垂直坐标,默认值为 0
- rgb 值为 0 表示输入颜色空间不改变,默认为 0;
- 值为 1 表示将输入的颜色空间设置为 RGB ;
- 变量说明:如下变量可用在 x 和 y 的表达式中
- main_w 或 W 主输入(背景窗口)宽度
- main_h 或 H 主输入(背景窗口)高度
- overlay_w 或 w overlay 输入(前景窗口)宽度
- overlay_h 或 h overlay 输入(前景窗口)高度
- 基本格式:
ffmpeg -i 主视频路径 -i 小视频路径 -filter_complex overlay=x:y
- 将小视频放在右下角:
sudo ffmpeg \
-i /home/starry/Downloads/video.mp4 \
-i /home/starry/Downloads/small_video.mp4 \
-filter_complex "\
[1:v]scale=320:240[small], \
[0:v][small]overlay=main_w-overlay_w-10:main_h-overlay_h-10" \
output2.mp4
- 将小视频放在右上角:
sudo ffmpeg \
-i /home/starry/Downloads/video.mp4 \
-i /home/starry/Downloads/small_video.mp4 \
-filter_complex "\
[1:v]scale=320:240[small], \
[0:v][small]overlay=main_w-overlay_w-10:10" \
output2.mp4
- 将视频放在左下角
sudo ffmpeg \
-i /home/starry/Downloads/video.mp4 \
-i /home/starry/Downloads/small_video.mp4 \
-filter_complex "\
[1:v]scale=320:240[small], \
[0:v][small]overlay=10:main_h-overlay_h-10" \
output2.mp4