FFmpeg实现画中画视频(Ubuntu)

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.效果展示
    在这里插入图片描述
  1. 扩展
    Overlay 画中画(十分重要!!!)
Overlay\[=x:y\[\[:rgb={0, 1}\]\]
  1. 参数说明:
  • x 从左上角的水平坐标,默认值为 0
  • y 从左上角的垂直坐标,默认值为 0
  • rgb 值为 0 表示输入颜色空间不改变,默认为 0;
  • 值为 1 表示将输入的颜色空间设置为 RGB ;
  1. 变量说明:如下变量可用在 x 和 y 的表达式中
  • main_w 或 W 主输入(背景窗口)宽度
  • main_h 或 H 主输入(背景窗口)高度
  • overlay_w 或 w overlay 输入(前景窗口)宽度
  • overlay_h 或 h overlay 输入(前景窗口)高度
  1. 基本格式:ffmpeg -i 主视频路径 -i 小视频路径 -filter_complex overlay=x:y
  2. 将小视频放在右下角:
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

在这里插入图片描述

  1. 将小视频放在右上角:
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

在这里插入图片描述

  1. 将视频放在左下角
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值