前言
ffmpeg是一个源于Linux的工具软件,是FLV视频转换器,可以轻易地实现FLV向其它格式avi、asf、 mpeg的转换或者将其它格式转换为flv。
ffmpeg设备相关的操作取决于操作系统,MAC和WIN是不统一的。
相关地址
注意
本文使用最新的FFmpeg6.0进行测试,早期版本录制桌面有BUG,如果电脑缩放不是100%,就会录制不全,建议使用新版本。
参数获取
查看音频和视频设备列表
Win
1 | ffmpeg -f dshow -list_devices true -i dummpy |
Mac
1 | ffmpeg -f avfoundation -list_devices true -i dummpy |
查看Dshow/Avfoundation库支持参数
WIN :
1 | ffmpeg -h demuxer=dshow |
MAC :
1 | ffmpeg -h demuxer=avfoundation |
查看 avfoundation 的可支持的具体命令,比如avfoundation 就不支持dshow的 list_options
命令
视频源
获取视频源支持的分辨率
1 | ffmpeg -f dshow -list_options true -i video="screen-capture-recorder" |
音频源
1 | ffmpeg -f dshow -list_options true -i audio="麦克风 (Realtek(R) Audio)" |
音视频处理
视频处理
缩放
设置目标分辨率
1 | ffmpeg -rtbufsize 1000M -thread_queue_size 1024 -f dshow -video_size 1920x1080 -i video="screen-capture-recorder" -an -c:v libx264 -r 30 -pix_fmt yuv420p -preset:v ultrafast -vf scale=1280:720 -y D:\mp4\test04.mp4 |
高度等比缩放
为了让FFmpeg按比例设置高度自适应,可以在scale
滤镜表达式中指定带有-1
的参数。
1 | ffmpeg -rtbufsize 1000M -thread_queue_size 1024 -f dshow -video_size 1920x1080 -i video="screen-capture-recorder" -an -c:v libx264 -r 30 -pix_fmt yuv420p -preset:v ultrafast -vf scale=1280:-1 -y D:\mp4\test04.mp4 |
其中
-video_size 1920x1080
是设置的源分辨率(不是缩放后的分辨率),跟采集的源有关,不能随意设置。
-vf scale=1280:720
是设置目标分辨率,可以随意设置。
裁剪
1 | ffmpeg -rtbufsize 1000M -thread_queue_size 1024 -f dshow -video_size 1920x1080 -i video="screen-capture-recorder" -an -c:v libx264 -r 30 -pix_fmt yuv420p -preset:v ultrafast -filter:v "crop=1280:360:0:0" -y D:\mp4\test04.mp4 |
配置项
-filter:v "crop=<width>:<height>:<x>:<y>"
其中<width>
和<height>
是需要裁剪的宽度和高度,<x>
和<y>
是裁剪左上角的坐标。
裁剪后缩放
1 | ffmpeg -rtbufsize 1000M -thread_queue_size 1024 -f dshow -video_size 1920x1080 -i video="screen-capture-recorder" -an -c:v libx264 -r 30 -pix_fmt yuv420p -preset:v ultrafast -filter:v "crop=1280:720:0:0,scale=800:-1" -y D:\mp4\test04.mp4 |
裁剪和缩放操作和我们配置项的先后有关系。
缩放后裁剪
1 | ffmpeg -rtbufsize 1000M -thread_queue_size 1024 -f dshow -video_size 1920x1080 -i video="screen-capture-recorder" -an -c:v libx264 -r 30 -pix_fmt yuv420p -preset:v ultrafast -filter:v "scale=1280:-1,crop=1280:360:0:0" -y D:\mp4\test04.mp4 |
音频混音
1 | -filter_complex amix=inputs=2:duration=longest:dropout_transition=0:weights="1 0.25":normalize=0 |
捕获Electron界面
这是因为 Electron 使用了 GPU 加速的界面渲染,ffmpeg 的 gdigrab 无法捕获这样的界面。
有几种解决方法:
- 在 Electron 中禁用 GPU 加速,使其使用 CPU 渲染界面。可以在 app.disableGpu 属性中设置:
1 | const app = require('electron').app |
这样 gdigrab 就可以捕获界面了,但是会对 Electron 的性能有些影响。
- 不使用 gdigrab,而使用 Electron 提供的屏幕截图 API。可以这样实现:
1 | const electron = require('electron') |
- 使用第三方屏幕录制工具,比如 OBS Studio,它可以捕获 Electron 的界面。
- 如果是为了录制屏幕视频,可以使 Electron 窗口一直处于最顶层,然后使用 OBS 或 ffmpeg 对整个屏幕进行录制,这样就捕获到了 Electron 窗口的视频。
所以总的来说,要捕获 Electron 的界面,最好的方法是使用 Electron 自己提供的 APIs,而不是依赖 ffmpeg 的 gdigrab。
WIN音视频操作
获取设备名称
1 | ffmpeg -list_devices true -f dshow -i dummy |
我们可以在设备管理器中查看设备的名称
旧版本获取的设备名称中文是乱码的,新版本已经没有这个问题
麦克风录制
测试设备
1 | ffplay -f dshow -i audio="麦克风 (Realtek(R) Audio)" |
录制
1 | ffmpeg -f dshow -i audio="麦克风 (Realtek(R) Audio)" -acodec libmp3lame -ac 1 -ar 44100 -vn D://mp4/maikefeng.mp3 |
扬声器录制
首先需要安装一个软件:screen capture recorder
编译好的下载地址是:
http://sourceforge.net/projects/screencapturer/files/
安装完了之后,在命令行执行:
1 | ffmpeg -list_devices true -f dshow -i dummy |
就会看到多了两个设备
screen-capture-recorder 这个就是桌面捕获设备
virtual-audio-capturer 这个是音频捕获设备(这个录制的不是麦克风的声音,是系统输出的声音)
注册audio_sniffer.dll
和audio_sniffer-x64.dll
打开CMD窗口,执行以下命令:
1 | regsvr32 "D:\Tools\ffmpeg\dll\virtual-audio\audio_sniffer.dll" |
测试设备
1 | ffplay -f dshow -i audio="virtual-audio-capturer" |
录制
1 | ffmpeg -f dshow -i audio="virtual-audio-capturer" -acodec libmp3lame -ac 1 -ar 44100 -vn D://mp4/test01.mp3 |
取消注册
1 | regsvr32 /u "D:\Tools\ffmpeg\dll\virtual-audio\audio_sniffer.dll" |
摄像头录制
查看摄像头视频
1 | ffplay -f dshow -i video="Integrated Webcam" |
保存文件
1 | ffmpeg -f dshow -i video="Integrated Webcam" -vcodec libx264 -preset:v ultrafast -pix_fmt yuv420p D:\mp4\test01.mp4 |
服务器推流
1 | ffmpeg -f dshow -i video="Integrated Webcam" -vcodec libx264 -b:v 512k -preset:v ultrafast -f flv rtmp://39.104.23.195:1935/live/xiaoming |
桌面录制
使用gdigrab
查看
1 | ffplay -f gdigrab -i desktop |
录制屏幕
多屏时会出现录制不全的情况新版本下没有出现
示例
1 | ffmpeg -f gdigrab -i desktop -pix_fmt yuv420p -framerate 30 -vcodec libx264 -preset ultrafast -y D:\mp4\test01.mp4 |
只录制主屏
1 | ffmpeg -f gdigrab -framerate 30 -offset_x 0 -offset_y 0 -video_size 1920x1080 -i desktop -c:v libx264 -preset ultrafast -pix_fmt yuv420p -y D:\mp4\zhuping.mp4 |
服务器推流
1 | ffmpeg -f gdigrab -i desktop -framerate 30 -vcodec libx264 -b:v 512k -preset ultrafast -pix_fmt yuv422p -f flv rtmp://39.104.23.195:1935/live/xiaoming |
窗口
1 | ffplay -f gdigrab -i title="码客-AI助理 v 1.1" |
获取窗口Title
要使用CMD获取当前激活窗口的标题,可以按照以下步骤:
打开命令提示符(CMD):按下Win+R,输入”cmd”后按回车键即可打开CMD窗口。
输入以下命令并按回车键:
1 | wmic path Win32_Process get Caption,ProcessId |
在CMD窗口中,最后启动的应用程序将具有最高的ProcessID。请记下进程ID(PID)。
输入以下命令并按回车键,替换PID为上一步得到的PID:
1 | tasklist /v /fi "pid eq PID" /fo list | findstr /i "窗口标题" |
- 此命令将输出正在运行的进程的详细信息,包括窗口标题。
注意:此方法仅适用于Windows操作系统。
使用screen-capture-recorder
这种方式的优点是
- 只录制主屏
- 不会出现鼠标闪烁
步骤
注册screen-capture-recorder.dll
和screen-capture-recorder-x64.dll
注意
必须用管理员身份注册。
打开CMD窗口,执行以下命令:
1 | regsvr32 "D:\Tools\ffmpeg\dll\screen-capture-recorder\screen-capture-recorder.dll" |
解决光标录制时闪烁
1 | ffmpeg -f dshow -video_size 1920x1080 -i video="screen-capture-recorder" -an -c:v libx264 -r 30 -pix_fmt yuv420p -preset:v ultrafast -y D:\mp4\test04.mp4 |
注意
-video_size 1920x1080
这个参数必须设置,并且尺寸必须要和屏幕的实际分辨率完全一样,否则会报错。
取消注册
1 | regsvr32 /u "D:\Tools\ffmpeg\dll\screen-capture-recorder\screen-capture-recorder.dll" |
摄像头+麦克风
保存文件
1 | ffmpeg -f dshow -i video="Integrated Webcam":audio="麦克风 (Realtek(R) Audio)" -vcodec libx264 -acodec copy -preset:v ultrafast -f flv test3.flv |
推流
1 | ffmpeg -f dshow -i video="Integrated Webcam":audio="麦克风 (Realtek(R) Audio)" -vcodec libx264 -b:v 512k -b:a 16k -r 25 -acodec copy -preset ultrafast -f flv rtmp://39.104.23.195:1935/live/xiaoming |
桌面+麦克风
保存文件
1 | ffmpeg -f gdigrab -i desktop -f dshow -i audio="麦克风 (Realtek(R) Audio)" -vcodec libx264 -acodec copy -preset:v ultrafast -f flv test4.flv |
推流
1 | ffmpeg -f gdigrab -i desktop -f dshow -i audio="麦克风 (Realtek(R) Audio)" -vcodec libx264 -preset ultrafast -b:v 800k -b:a 100k -acodec libmp3lame -pix_fmt yuv422p -f flv rtmp://39.104.23.195:1935/live/xiaoming |
桌面+扬声器
首先需要安装一个软件:screen capture recorder
编译好的下载地址是:
http://sourceforge.net/projects/screencapturer/files/
安装完了之后,在命令行执行:
1 | ffmpeg -list_devices true -f dshow -i dummy |
就会看到多了两个设备
screen-capture-recorder 这个就是桌面捕获设备
virtual-audio-capturer 这个是音频捕获设备(这个录制的不是麦克风的声音,是系统输出的声音)
保存文件
1 | ffmpeg -rtbufsize 1000M -thread_queue_size 1024 -f dshow -i audio="virtual-audio-capturer" -f dshow -video_size 1920x1080 -i video="screen-capture-recorder" -an -c:v libx264 -r 30 -pix_fmt yuv420p -preset:v ultrafast -y test5.mp4 |
推流
1 | ffmpeg -f dshow -i video="screen-capture-recorder" -f dshow -i audio="virtual-audio-capturer" -vcodec libx264 -preset:v ultrafast -pix_fmt yuv422p -f flv rtmp://39.104.23.195:1935/live/xiaoming |
其中
-rtbufsize
指定了输入/输出对象的缓冲区大小,单位为字节。如果输入文件过大或者输出文件需要压缩,设置缓冲区大小可以提高转换的效率和稳定性。-thread_queue_size
指定输入线程队列的最大大小,单位为包的数量。如果输入流的速率不匹配处理速率,设置较大的队列可以减少由于输入流速率过快而导致的帧丢失,提高转换质量。
桌面+扬声器+麦克风
使用gdigrab
1 | ffmpeg -f dshow -i audio="virtual-audio-capturer" -f dshow -i audio="麦克风 (Realtek(R) Audio)" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f gdigrab -framerate 25 -offset_x 0 -offset_y 0 -video_size 1920x1080 -i desktop -pix_fmt yuv420p -vf scale=trunc(iw/2)*2:trunc(ih/2)*2 -vcodec libx264 -preset:v ultrafast -acodec aac D:/mp4/1.mp4 |
trunc(expr)
表达式
对expr的值向0取整。例如trunc(-1.5) = -1.0
使用screen-capture-recorder
打开CMD窗口,执行以下命令:
1 | ffmpeg -rtbufsize 1000M -thread_queue_size 1024 -f dshow -i audio="麦克风 (Realtek(R) Audio)" -rtbufsize 1000M -thread_queue_size 1024 -f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -rtbufsize 1000M -thread_queue_size 1024 -f dshow -video_size 1920x1080 -i video="screen-capture-recorder" -an -c:v libx264 -r 30 -pix_fmt yuv420p -preset:v ultrafast -y D:\mp4\luping.mp4 |
结束录制:
在CMD窗口中输入q
混音处理
1 | ffmpeg -i INPUT1 -i INPUT2 -filter_complex amix=inputs=2:duration=first:dropout_transition=2 OUTPUT |
amix参数:
inputs 输入的数量,如果没有指明,默认为2.
duration 决定了流的长度
longest 最长输入的持续时间
shortest 最短输入的持续时间
first 第一个输入的持续时间
dropout_transition 输入流结束时用于体积重整的转换时间(以秒为单位)。 默认值为2秒。
桌面+摄像头+麦克风
用户头像在右下角
1 | ffmpeg -f gdigrab -i desktop -f dshow -i video="Integrated Webcam" -f dshow -i audio="麦克风 (Realtek(R) Audio)" -c:v libx264 -preset ultrafast -filter_complex overlay=W-w:H-h -acodec libmp3lame -ar 44100 -ac 1 -f flv mytest.flv |
头像在右上角并缩放
1 | ffmpeg -y -f gdigrab -i desktop -f dshow -i video="Integrated Webcam" -f dshow -i audio="麦克风 (Realtek(R) Audio)" -c:v libx264 -preset ultrafast -filter_complex "[1:v]scale=w=200:h=300:force_original_aspect_ratio=decrease[ckout];[0:v][ckout]overlay=x=W-w:y=0" -acodec libmp3lame -ar 44100 -ac 1 -f flv mytest.flv |
左上角
1 | -filter_complex overlay=0:0 |
右上角
1 | -filter_complex overlay=W-w:0 |
左下角
1 | -filter_complex overlay=0:H-h |
右下角
1 | -filter_complex overlay=W-w:H-h |
推RTSP流
1 | ffmpeg -f dshow -i video="Integrated Webcam":audio="麦克风 (Realtek(R) Audio)" -vcodec libx264 -acodec libvo_aacenc -preset:v ultrafast -f rtsp rtsp://127.0.0.1/abcd.sdp |
设置帧率
1 | ffmpeg -f dshow -i video="USB2.0 Camera":audio="麦克风 (USB2.0 Camera)" -vcodec libx264 -acodec libvo_aacenc -b 1080k -r 20 -preset:v ultrafast -f rtsp rtsp://127.0.0.1/abcd.sdp |
MAC音视频操作
MAC上录制摄像头和麦克风都需要申请权限,直接在命令行中获取摄像头和麦克风都会报错,不能推流。
这个折腾了我好长时间才找到原因,网上也没说这种情况的原因,希望看到这个博客的同学别再踩这个坑。
安装
1 | brew install ffmpeg |
查看设备
1 | ffmpeg -f avfoundation -list_devices true -i "" |
摄像头录制
需要获取录制权限
1 | ffmpeg -y -framerate 30 -f avfoundation -r 30 -i 0 out.mp4 |
-framerate 限制视频的采集帧率。这个必须要根据提示要求进行设置,如果不设置就会报错。
-f:指定使用使用 avfoundation库(mac系统下) 来录制
-i:指定输入设备 1:设备索引值,1代表屏幕,0代表摄像头,等等
-r:指定帧率为30
flv
1 | ffmpeg -y -framerate 30 -f avfoundation -r 30 -i 0 -f flv test01.flv |
播放命令:
1 | ffplay out.mp4 |
桌面录制
1 | ffmpeg -y -f avfoundation -i "1" -framerate 30 -video_size 640x480 -vcodec libx264 -preset ultrafast -f flv test2.flv |
-t 录制时间,单位miao
推流
1 | ffmpeg -f avfoundation -i "1" -vcodec libx264 -preset ultrafast -f flv rtmp://119.3.212.205:1935/live/xiaoming |
桌面+麦克风录制
1 | ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv mytest.flv |
或者
1 | ffmpeg -f avfoundation -i "1:0" -r 29.97 -c:v libx264 -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k out.flv |
-i 1:0 冒号前面的 “1” 代表的屏幕索引号。冒号后面的”0”代表的声音索相号。
-c:v 与参数 -vcodec 一样,表示视频编码器。c 是 codec 的缩写,v 是video的缩写。
-crf 是 x264 的参数。 0 表式无损压缩。
-c:a 与参数 -acodec 一样,表示音频编码器。
-profile 是 fdk_aac 的参数。 aac_he_v2 表式使用 AAC_HE v2 压缩数据。
-b:a 指定音频码率。 b 是 bitrate的缩写, a是 audio的缩写。
推流
1 | ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://119.3.212.205:1935/live/xiaoming |
桌面+麦克风+摄像头录制
1 | ffmpeg -f avfoundation -framerate 30 -i "1:0" \ |
推流
1 | ffmpeg -f avfoundation -framerate 30 -i "1:0" \ |
音频录制
1 | ffmpeg -f avfoundation -i :0 out.wav |
- -f 指定使用 avfoundation 采集数据。
- -i 指定从哪儿采集数据,它是一个文件索引号。
- :冒号前面的是视频采集索引号,冒号后面是音频采集索引号
播放声音的命令:
1 | ffplay out.wav |
录制音频裸数据
1 | ffmpeg -f avfoundation -i :0 -ar 44100 -f s16le out.pcm |
C#注册DLL
在C#中,可以使用System.Runtime.InteropServices.RegistrationServices类的RegisterAssembly方法来注册DLL。
使用此方法需要注意以下几点:
确保你的DLL是COM可调用的。
确保你的C#程序有管理员权限,以便进行注册。
以下是一个示例代码:
1 | using System.Runtime.InteropServices; |
在这个例子中,我们首先从MyDLL.dll文件中加载了DLL,然后通过RegistrationServices类的RegisterAssembly方法注册了该DLL。如果注册成功,将输出“Registration succeeded”;否则将输出“Registration failed”。
参数
常用参数
参数 | 示例 | 适用 | 作用 |
---|---|---|---|
-vcodec -c:v |
-vcodec libx264 -acodec copy |
视频 | 视频编码 -acodec copy 表示适用文件原有编码 录制时无效 用在文件转码时 |
-acodec -c:a |
-acodec libmp3lame | 音频 | 音频编码 |
-preset | -preset ultrafast | 视频 | 压缩的预设,决定视频的质量 |
-b:v | -b:v 800k | 视频 | 视频比特率 很重要 影响清晰度 |
-b:a | -b:a 100k | 音频 | 音频比特率 很重要 影响清晰度 |
-pix_fmt | -pix_fmt yuv422p | 视频 | 视频颜色空间 不设置在网页上可能黑屏 |
-r | -r 30 | 视频 | 视频 设置帧频 缺省25 |
-f fmt | -f flv | 通用 | |
-s size | -s 640x320 -s 640x? |
视频 | 设置视频输出尺寸 |
通用参数
- -L license
- -h 帮助
- -fromats 显示可用的格式,编解码的,协议的。。。
- -f fmt 强迫采用格式fmt
- -I filename 输入文件
- -y 覆盖输出文件
- -t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持
- -ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持
- -title string 设置标题
- -author string 设置作者
- -copyright string 设置版权
- -comment string 设置评论
- -target type 设置目标文件类型(vcd,svcd,dvd) 所有的格式选项(比特率,编解码以及缓冲区大小)自动设置 ,只需要输入如下的就可以了:
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg - -hq 激活高质量设置
- -itsoffset offset 设置以秒为基准的时间偏移,该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳,定义一个正偏移意味着相应的流被延迟了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持
视频参数
- -b:v bitrate 设置比特率 如:512k
- -r fps 设置帧频 缺省25
- -s size 设置帧大小 格式为WXH 缺省160X128.下面的简写也可以直接使用:
Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576 - -aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777
- -croptop size 设置顶部切除带大小 像素单位
- -cropbottom size –cropleft size –cropright size
- -padtop size 设置顶部补齐的大小 像素单位
- -padbottom size –padleft size –padright size –padcolor color 设置补齐条颜色(hex,6个16进制的数,红:绿:兰排列,比如 000000代表黑色)
- -vn 不做视频记录
- -bt tolerance 设置视频码率容忍度kbit/s
- -maxrate bitrate设置最大视频码率容忍度
- -minrate bitreate 设置最小视频码率容忍度
- -bufsize size 设置码率控制缓冲区大小
- -vcodec codec 强制使用codec编解码方式。
如果用copy表示原始编解码数据必须被拷贝。 - -sameq 使用同样视频质量作为源(VBR)
- -pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率
- -passlogfile file 选择两遍的纪录文件名为file
音频参数
- -ab bitrate 设置音频码率
- -ar freq 设置音频采样率
- -ac channels 设置通道 缺省为1
- -an 不使能音频纪录
- -acodec codec 使用codec编解码
通用命令
压缩视频
1 | ffmpeg -i pingcap-intro-converted.mp4 -b:v 64k -r 20 -c:v libx264 -s 640x320 -strict -2 pingcap.mp4 |
获取封面
1 | ffmpeg -ss 00:00:10 -i test1.flv -f image2 -y test1.jpg |
视频文件推流
1 | ffmpeg -re -i eguid.flv -vcodec copy -acodec copy -f flv -y rtmp://110.3.212.110:1935/live/xiaoming |
当然有解决办法
1 | ffmpeg -re -stream_loop -1 -i eguid.flv -vcodec copy -acodec copy -f flv -y rtmp://110.3.212.110:1935/live/xiaoming |
加了一个-stream_loop -1
-1为无限循环
拉流保存文件
1 | ffmpeg -i rtmp://119.3.212.205:1935/live/xiaoming -vcodec h264 -f flv -acodec aac -ac 2 eguid.flv |
转流(rtsp转rtmp)
1 | ffmpeg -i rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov -rtsp_transport tcp -vcodec h264 -acodec aac -f flv rtmp://119.3.212.205:1935/live/xiaoming |
抽取音频流
1 | ffmpeg -i input.mp4 -acodec copy -vn out.aac |
acodec: 指定音频编码器,copy 指明只拷贝,不做编解码。
vn: v 代表视频,n 代表 no 也就是无视频的意思。
抽取视频流
1 | ffmpeg -i input.mp4 -vcodec copy -an out.h264 |
vcodec: 指定视频编码器,copy 指明只拷贝,不做编解码。
an: a 代表视频,n 代表 no 也就是无音频的意思。
转格式
1 | ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv |
上面的命令表式的是音频、视频都直接 copy,只是将 mp4 的封装格式转成了flv。
音视频合并
1 | ffmpeg -i out.h264 -i out.aac -vcodec copy -acodec copy out.mp4 |
添加水印
1 | ffmpeg -y -i test.mp4 -i logo.png -filter_complex "[1]scale=w=480:h=280[s];[0][s]overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10[ov]" -map "[ov]" output.mp4 |