ffmpeg 编译 使用 问题集
FFmpeg官网:http://ffmpeg.org/doxygen/trunk/examples.html
1 ffmpeg 库多个版本 libavformat.so.57 libavformat.so.2 等编译的时候可以通过 软连接指定自己想要的名字
创建软连接:
ln -s libavformat.so.57 libavformat.so
指定库的寻找路径:
-rpath=$(SDK)/lib -lavformat
常用命令1 :
0)视屏截取
按照时间: ffmpeg -i ./input.mp4 -vcodec copy -acodec copy -ss 00:00:00 -to 00:00:10 ./output.mp4 -y
按照帧数: ffmpeg -i ./input.mp4 -vf "select=between(n\,10\,100)" -y -acodec copy ./output.mp4
1) 30帧转60帧
ffmpeg -i test.mp4 -r 60 -f mpegts test1.ts
2) 将mp4格式转为h265编码的视频:
ffmpeg -i input.mp4 -vcodec libx265 -preset slow -b:v 2000k -crf 21 -strict -2 out.mp4
ffmpeg -y -i input.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb -b:v 6M -b:a 128k output.ts
关于-vbsf:
ffmpeg中mp4转h264、h264_mp4toannexb、bsf使用说明及注意事项
h264有两种封装,一种是annexb模式,传统模式,有startcode(0x000001或0x0000001)分割NALU,在mpegts流媒体中使用,vlc里打开编码器信息中显示h264;
一种是AVCC模式,一般用mp4、mkv、flv容器封装,以长度信息分割NALU, vlc里打开编码器信息中显示avc1。
很多场景需要进行这两种格式之间的转换,FFmpeg提供了名称为h264_mp4toannexb的Bitstream Filter(bsf)来实现这个功能
参考:https://www.cnblogs.com/zhibei/p/12551810.html
3) 推流
ffmpeg -re -i test.mp4 -vcodec copy -f h264 udp://234.0.0.1:12001
注1:-re一定要加,代表按照帧率发送,否则ffmpeg会一股脑地按最高的效率发送数据。
注2:-vcodec copy要加,否则ffmpeg会重新编码输入的H.264裸流。
参考:https://blog.csdn.net/leixiaohua1020/article/details/38283297
FFmpeg的推流命令:ffmpeg -re -i test.264 -vcodec copy -f mpegts udp://127.0.0.1:12001
ffplay的接收命令:ffplay -protocol_whitelist "file,udp,rtp" -i udp://127.0.0.1:12001
5) 收流 保存
ffmpeg -i udp://@234.0.0.3:12003?multicast=1 -f h264 test.111
6) 例子:先截取部分视频,在转码成 H265 aac 固定码率 60帧 30帧 8bit
ffmpeg -i in.webm -vcodec copy -acodec copy -ss 00:00:08 -to 00:00:18 out.webm -y
ffmpeg -i out.webm -vcodec libx265 -acodec aac -r 60 -f mpegts out_h265_aac.ts
ffmpeg -i out_h265_aac_fps60_8bit.ts -vcodec copy -acodec copy -r 30 out_h265_aac_fps30_8bit.ts
常用命令2:
参考:https://blog.csdn.net/sinat_14826983/article/details/83044762
-y 覆盖视频
-n 不覆盖视频
-i 输入
-t 时间
-vf 音频滤镜
-af 视频滤镜
-r 指定帧率(帧速率是编码成视频文件的每秒帧数)
-f 指定格式
1.视频格式转换
ffmpeg -i video.flv video.mp4
指定编码器转换格式
ffmpeg -i video.flv -c:v libx264 -c:a libfaac video.mp4
2.音视频的提取和合并
从视频中提取aac
ffmpeg -i video.mp4 -vn -acodec copy output.aac
从视频中提取h264
ffmpeg -i video.mp4 -vcodec copy -an output.h264
提取视频
ffmpeg -i test.mp4 -vcodec copy -an test2.mp4(使用流拷贝速度很快)
ffmpeg -i test.mp4 -an test2.mp4(效果同上,但是需要编码解码速度比较慢)
-an 禁用音频
-vcodec copy 拷贝视频流
提取音频为mp3
ffmpeg -i test.mp4 -vn -acodec copy testaac
ffmpeg -i test.mp4 -vn test.mp3
-vn 禁用视频流
关掉视频原声与mp3音乐合成新的视频
ffmpeg -i scenery.mp4 -i music.mp3 -map 0:v -vcodec copy -map 1:a -acodec copy video_music.mp4
3.截取视频
截取视频的 5-25秒 -ss 开始时间 -t截取时间
ffmpeg -i test.mp4 -ss 5 -t 20 t.mp4
4.视频分片
把视频切为每10秒一段
ffmpeg -i test.mp4 -c copy -map 0 -f segment -segment_time 10 video/part-%d.mp4
5.调整视频分辨率
1.通过 –s改变视频宽高
ffmpeg -i video3.mp4 -s 320*240 s.mp4
2.通过scale滤镜进行缩放
ffmpeg -i video3.mp4 -vf scale=320:240 scale.mp4
6.视频裁剪
Crop = w:h:x:y 宽度:高度:x:y(x,y如果不写则从中心裁剪)
ffmpeg -i video.mp4 -vf crop=iw/2:ih:0:0 crop.mp4
7.视频填充
填充视频意味着向视频帧添加额外的区域以包含额外的内容。当输入应在具有不同宽高比的显示器上播放时, 通常需要填充视频
ffmpeg -i test.jpg -vf pad=2*iw:2*ih:30:30 framed_photo.jpg
8.视频与图片的转换
视频转为图片
img2为图片的存储目录,img-%3d.jpg命名规则
-r帧率 -f格式
ffmpeg -i scenery.mp4 -r 2 -f image2 img2/img-%3d.jpg
将图片转换为视频
ffmpeg -f image2 -i img/img2%4d.jpg -r 25 video_img.mp4
视频生成GIFffmpeg -i video.mp4 -pix_fmt rgb24 video.gif
定时截图
ffmpeg -i video.mp4 -ss 00:00:7.43 -vframes 1 out.png
每秒生成一个张图片
ffmpeg -i scenery.mp4 -vf fps=1 out%03d.png
每分钟生成一张图片
ffmpeg -i scenery.mp4 -vf fps=1/60 out%03d.png
每个I帧生成一张图片
ffmpeg -i scenery.mp4 -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr thumb%04d.png
9.水印处理 添加水印一般使用 overlay
文字水印
x:离左上角的横坐标
y: 离左上角的纵坐标
x=0:y=0 左上角
x=0:y=h-th 左下角
x=w-tw:y=0 右上角
x=w-tw:y=h-th 右下角
生成滚动文字例子
ffmpeg -y -i video.mp4 -vf drawtext=“fontfile=fonts/Medium.ttf:text=‘hello’:x=90+t*20:y=55:fontcolor=#ffffff:fontsize=25” drawtext.mp4
横向滚动 x+t*n 从左往右滚动,n越大滚动越快
x-t*n 从右边到左边滚动
垂直滚动 y+t*n
在视频右上角添加一个gif图片
http://ffmpeg.org/ffmpeg-all.html#toc-gif-1
//-ignore_loop 0 使gif循环播放
//=shortest=1使视频结束播放
ffmpeg -i tc.mp4 -ignore_loop 0 -i cat.gif -filter_complex "overlay=x=W-w:y=0:shortest=1” test.mp4
跑马灯效果
分析:如果時間大於0,那麼就開始從子內容的寬度的x-w位置開始,然後每一幀n計數,幀數n除以(背景W+子內容背景w)求餘數+1設置為x坐標,即可循環
ffmpeg -i video2.mp4 -i logo.png -filter_complex "[1:v]scale=50*50[logo];[0:v]scale=200*200[bg];[bg][logo]overlay=x='if(gte(t,0),-w+(mod(n,W+w))+5,NAN)':y=0” output.mp4
//问题,调节不了水印移动速度
添加弹幕效果
在视频中同时加入多个文字和多个图片,使用到多个滤镜就需要使用滤镜链,而指定输入输出标签就形成滤镜链图
ffmpeg -i video.mp4 -i logo.png -i logo1.png -filter_complex "[1:v]scale=30:30[img1];[2:v]scale=30:30[img2];[0:v][img1]overlay=(main_w-overlay_w)/2+t*100:(main_h-overlay_h)/2[bkg];[bkg][img2]overlay=0:0",drawtext="fontfile=fonts/Medium.ttf:text='hello':fontcolor=white:fontsize=50:x='if(between(t,2,10),150,NAN)':y=120" -y output.mp4
解析:
1.[0:v]指定流 ,0表示第0个文件,v表示操作对象里的视频信息。
2.[img1]是对scale滤镜的处理结果命名标记标签,[0:v][img1]表示将scale缩略处理后的图片覆盖到第0个文件即视频上,类似这个包含链接输入输出标记如[img1]的就组成滤镜链图filtergraphs
3.由于使用overlay添加图片水印,使用drawtext添加文字水印,这个两个滤镜间使用逗号,分割开来,组成一个滤镜链
4.overlay中t*100,表示从x轴以100的速度移动
5.x='if(between(t,2,10),150,NAN)’表示在2,10秒的区间显示字幕。if(条件,条件为true时的值,条件为false时的值)
11.视频图片的旋转
把图片旋转45度放到视频中心
ffmpeg -i scenery.mp4 -i logo.png -filter_complex "[1:v]rotate='45*PI/180:ow=hypot(iw,ih):oh=ow:c=none'[rotate];[0:v][rotate]overlay=(W-w)/2:(H-h)/2" rotate.mp4 -y
解析
c=none这样就不会出现黑色背景
ow=hypot(iw,ih):hypot(x, y) 计算斜边(直角三角形最长边)等效于sqrt(xx + yy),如果不设置ow,oh则旋转之后溢出边框部分之间被裁剪掉了
在旋转角度中加入t参数即可实现随着时间而旋转 rotate='2*PI*t
ffmpeg -i scenery.mp4 -filter_complex "rotate='2*PI*t:ow=min(iw,ih)/sqrt(2):oh=ow:c=none’” test.mp4
-----------
参考:https://www.hack520.com/668.html
FFmpeg 使用命令整理 – 提取音频或视频、提取图片、格式转换等
前天阿丹找我,让我帮忙提取一段在线视频里面的钢琴曲音乐。以前有过类似的操作从一段视频中提取出单独的音频,但是否每个视频都适合这样的处理,并不清楚。不管怎么样,首先下载这段视频,在线视频的下载不是本文重点,如果不会可以搜索参考本站相关文章。
提取声音的软件网上搜索有不少,不过最有名最专业的似乎是一个命令行工具:ffmpeg。这个工具功能十分丰富且强大,我所需要的从视频中提取 mp3 的功能只是其中包含的一个。感觉使用起来很复杂因为是命令行的,但其实通过学习后发现很轻松很好用,一起学习下!
FFmpeg 简介
FFmpeg 是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec—这是一个用于多个项目中音频和视频的解码器库,以及libavformat—个音频与视频格式转换库。
“FFmpeg”这个单词中的“FF”指的是“Fast Forward(快速前进)”。有些新手写信给“FFmpeg”的项目负责人,询问FF是不是代表“Fast Free”或者“Fast Fourier”等意思,“FFmpeg”的项目负责人回信说:“Just for the record, the original meaning of “FF” in FFmpeg is “Fast Forward”…”
组件组成
ffmpeg——一个命令行工具,用来对视频文档转换格式,也支持对电视卡即时编码
ffserver——一个HTTP多媒体即时广播流服务器,支持时光平移
ffplay——一个简单的播放器,基于SDL与FFmpeg库
libavcodec——包含全部FFmpeg音频/视频编解码库
libavformat——包含demuxers和muxer库
libavutil——包含一些工具库
libpostproc——对于视频做前处理的库
libswscale——对于影像作缩放的库
命令参数
FFmpeg可使用众多参数,参数内容会根据ffmpeg版本而有差异,使用前建议先参考参数及编解码器的叙述。此外,参数明细可用ffmpeg -h显示;编解码器名称等明细可用ffmpeg -formats显示。
下列为较常使用的参数:
主要参数
-i——设置输入文件名。
-f——设置输出格式。
-y——若输出文件已存在时则覆盖文件。
-fs——超过指定的文件大小时则结束转换。
-t——指定输出文件的持续时间,以秒为单位。
-ss——从指定时间开始转换,以秒为单位。
-t从-ss时间开始转换(如-ss 00:00:01.00 -t 00:00:10.00即从00:00:01.00开始到00:00:11.00)。
-title——设置标题。
-timestamp——设置时间戳。
-vsync——增减Frame使影音同步。
-c——指定输出文件的编码。
-metadata——更改输出文件的元数据。
-help——查看帮助信息。
影像参数
-b:v——设置影像流量,默认为200Kbit/秒。(单位请引用下方注意事项)
-r——设置帧率值,默认为25。
-s——设置画面的宽与高。
-aspect——设置画面的比例。
-vn——不处理影像,于仅针对声音做处理时使用。
-vcodec( -c:v )——设置影像影像编解码器,未设置时则使用与输入文件相同之编解码器。
声音参数
-b:a——设置每Channel(最近的SVN版为所有Channel的总合)的流量。(单位请引用下方注意事项)
-ar——设置采样率。
-ac——设置声音的Channel数。
-acodec ( -c:a ) ——设置声音编解码器,未设置时与影像相同,使用与输入文件相同之编解码器。
-an——不处理声音,于仅针对影像做处理时使用。
-vol——设置音量大小,256为标准音量。(要设置成两倍音量时则输入512,依此类推。)
注意事项
以-b:v及-b:a参数设置流量时,根据使用的ffmpeg版本,须注意单位会有kbits/sec与bits/sec的不同。(可用ffmpeg -h显示说明来确认单位。)
例如,单位为bits/sec的情况时,欲指定流量64kbps时需输入 -b:a 64k;单位为kbits/sec的情况时则需输入 -b:a 64。
以-acodec及-vcodec所指定的编解码器名称,会根据使用的ffmpeg版本而有所不同。例如使用AAC编解码器时,会有输入aac与libfaac的情况。此外,编解码器有分为仅供解码时使用与仅供编码时使用,因此一定要利用ffmpeg -formats确认输入的编解码器是否能运作。
实战使用
一、格式转换 (将file.avi 转换成output.flv):
ffmpeg -i file.avi output.flv
-i 表示输入文件
二、合并视频
现在有个视频video.avi,有个音频audio.mp3,将其合并成output.avi。两个命令(video2.avi是中间文件 ,用完可删):
ffmpeg -i video.avi -vcodec copy -an video2.avi
ffmpeg -i video2.avi -i audio.mp3 -vcodec copy -acodec copy output.avi
-i 表示输入文件这个上面提过了。
-vcodec copy 表示 force video codec (‘copy’ to copy stream) 这个不知怎么译 ,估计是直接copy。
-acodec copy 这个说的应该是音频了,跟上面一样。
-an 表示 disable audio 估计是audio no之类的缩写,表示去掉video.avi原有的音频。
还有方法2好像可以直接指定两个输入文件:
ffmpeg -i /tmp/a.wav -i /tmp/a.avi /tmp/a.avi
两个文件的顺序很重要。
三、从视频里提取声音(声音与视频的分离)
从flv文件中提取声音并保存为mp3格式:
ffmpeg -i 人生若只如初见.flv -vn r.mp3
-vn 表示忽略视频,估计是 video no 之类的缩写。
只留视频不留声音:
ffmpeg -i 人生若只如初见.flv -an r.flv
-an 表示忽略声音估计是 audio no 之类的缩写。
四、从视频里提取图片
ffmpeg -i test.avi -y -f p_w_picpath2 -ss 8 -t 0.001 -s 350×240 test.jpg
-ss 第8秒处截一图
五、压缩 mp3 文件
如果你觉得mp3文件有点大,想变小一点那么可以通过-ab 选项改变音频的比特率(bitrate)
ffmpeg -i input.mp3 -ab 128 output.mp3 //这里将比特率设为128
你可以用file命令查看一下源文件的信息:
z.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 192 kbps, 44.1 kHz, Stereo
其中的 192 kbps 就是比特率。
mp3中比特率的含义是:在压缩音频文件至mp3时,由压缩软件所确定数码文件在播放时每秒传送给播放器大小,其单位是:千位/秒;英文的含义是:kbps – = kilobits per second。现在mp3文件的最高数位率是320 kbps。这样的文件体积很大,每分钟的音乐超过两兆字节。如果采用可变比特率(VBR)编码来生成mp3文件,获得与320 kbps相当音质,文件的体积会缩小25~50%。请注意:播放时间相同,而歌曲不同,所获的压缩mp3文件的一般不相同,这是因为VBR编码所生成的mp3文件的大小不仅仅取决于播放时间的长度,还取决于源音频文件的其它因素。
六、视频文件的连接
视频文件的连接,如两个flv文件连接成一个。好像必须先将文件 转成mpg ,dv 等格式的文件后才能进行连接。连接复数的AVI影片档之范例(在此范例中须一度暂时将AVI档转换成MPEG-1档(MPEG-1, MPEG-2 PS, DV格式亦可连接)
ffmpeg -i input1.avi -sameq inputfile_01.mpg -r 20
ffmpeg -i input2.avi -sameq inputfile_02.mpg -r 20
cat inputfile_01.mpg inputfile_02.mpg > inputfile_all.mpg
ffmpeg -i inputfile_all.mpg -sameq outputfile.avi
上面将 input1.avi 和 input2.avi 合并成outputfile.avi
-sameq 表示相同的质量(可能指的是画面,不太清楚)
-r 指频率
七、mp3 截取
ffmpeg -ss 00:00:10 -t 00:01:22 -i 五月天-突然好想你.mp3 output.mp3
从第10秒开始截取,共截取1:22时长的内容。
八、录音(要有可用的麦克风,并且如果用alsa 的话,好像得安alsa-oss,重启)
ffmpeg -f oss -i /dev/dsp out.avi (should hava oss or alsa-oss)
ffmpeg -f alsa -ac 2 -i hw:0,0 out.avi (should )
ffmpeg -f alsa -ac 2 -i pulse (should hava PulseAudio)
oss 是linux下的声音相关的东西,与alsa一样,不过oss 是商业的,而/dev/dsp 是 oss 用到的麦克的设备吧,可以这样理解。
九、屏幕录像
ffmpeg -f x11grab -s xga -r 10 -i :0.0+0+0 wheer.avi
ffmpeg -f x11grab -s 320×240 -r 10 -i :0.0+100+200 wheer.avi
:0:0 表示屏幕(个人理解,因为系统变量$DISPLAY值就是:0.0) 而100,表示距左端100象素,200表示距上端200
-s 设置窗口大小
-r 10 好像是设置频率,不懂
ffmpeg -f x11grab -s xga-qscale 5 -r 10 -i :0.0+0+0 wheer.avi
-qscale 8 设定画面质量,值越小越好
十、屏幕录像,同时录音
ffmpeg -f oss -i /dev/dsp -f x11grab -r 30 -s 1024×768 -i :0.0 output.mkv
ffmpeg -ac 2 -f oss -i /dev/dsp -f x11grab -r 30 -s 1024×768 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 output.mkv
看到这,你会发现这个命令有多强大,如果我屏幕上打开了一个窗口,我只想录这个窗口的内容,如何确定这个窗口的坐标位置呢可以用另外一个命令:xwininfo。输入这个命令后,用鼠标点选目标窗口,就会出现目标窗口的坐标,宽高等一系列信息:
Absolute upper-left X: 276
Absolute upper-left Y: 57
Relative upper-left X: 2
Relative upper-left Y: 23
Width: 742
Height: 499
Depth: 24
Visual: 0x21
Visual Class: TrueColor
Border width: 0
Class: InputOutput
Colormap: 0x20 (installed)
Bit Gravity State: NorthWestGravity
Window Gravity State: NorthWestGravity
Backing Store State: NotUseful
Save Under State: no
Map State: IsViewable
Override Redirect State: no
Corners: +276+57 -262+57 -262-244 +276-244
-geometry 80×24+274+34 看到这一行了没
--------------------------
原文链接:https://blog.csdn.net/lailaiquququ11/article/details/80968272
ffmpeg在linux下支持的采集设备的种类比较多。
在操作设备之前,我们可以查看当前系统可以支持的操作设备:
ffmpeg -hide_banner -devices
Devices:
D. = Demuxing supported //输入的设备
.E = Muxing supported //输出的设备
--
DE alsa ALSA audio output
D dv1394 DV1394 A/V grab
DE fbdev Linux framebuffer //为输入输出设备,其他的类似这样判断
D lavfi Libavfilter virtual input device
DE oss OSS (Open Sound System) playback
E sdl SDL output device
E v4l2 Video4Linux2 output device
D video4linux2,v4l2 Video4Linux2 device grab
D x11grab X11 screen capture, using XCB
///
采集设备fbdev的参数:我们能看出fb(FrameBuffer)的操作参数,指定帧率就行(默认值为25).
ffmpeg -h demuxer=fbdev
Demuxer fbdev [Linux framebuffer]:
fbdev indev AVOptions:
-framerate <video_rate> .D...... (default "25")
ffmpeg -framerate 30 -f fbdev -i /dev/fb0 out.mp4
/
v4l2 即就是video4linux2的缩写,也是常见视频设备。获取摄像头的视频图片~
通过ffmpeg -h demuxer=v4l2 查看相关的操作参数
V4L2 indev AVOptions:
-standard <string> .D...... set TV standard, used only by analog frame grabber
-channel <int> .D...... set TV channel, used only by frame grabber (from -1 to INT_MAX) (default -1)
-video_size <image_size> .D...... set frame size
-pixel_format <string> .D...... set preferred pixel format
-input_format <string> .D...... set preferred pixel format (for raw video) or codec name
-framerate <string> .D...... set frame rate
-list_formats <int> .D...... list available formats and exit (from 0 to INT_MAX) (default 0)
all .D...... show all available formats
raw .D...... show only non-compressed formats
compressed .D...... show only compressed formats
-list_standards <int> .D...... list supported standards and exit (from 0 to 1) (default 0)
all .D...... show all supported standards
-timestamps <int> .D...... set type of timestamps for grabbed frames (from 0 to 2) (default default)
default .D...... use timestamps from the kernel
abs .D...... use absolute timestamps (wall clock)
mono2abs .D...... force conversion from monotonic to absolute timestamps
-ts <int> .D...... set type of timestamps for grabbed frames (from 0 to 2) (default default)
default .D...... use timestamps from the kernel
abs .D...... use absolute timestamps (wall clock)
mono2abs .D...... force conversion from monotonic to absolute timestamps
-use_libv4l2 <boolean> .D...... use libv4l2 (v4l-utils) conversion functions (default false)
例子:
获取本电脑的v4l2摄像头所支持的色彩格式和分辨率:
ffmpeg -hide_banner -f v4l2 -list_formats all -i /dev/video0
[video4linux2,v4l2 @ 0x9554e0] Raw : yuyv422 : YUV 4:2:2 (YUYV)
: 640x480 320x240 352x288 160x120 176x144 1280x720
[video4linux2,v4l2 @ 0x9554e0] Compressed: mjpeg : MJPEG
: 640x480 320x240 352x288 160x120 176x144 1280x720
接下来可以使用下面的命令行,用摄像头采集视频文件:
ffmpeg -hide_banner -s 1920*1080 -i /dev/video0 out2.avi
对应的输出信息为:
[video4linux2,v4l2 @ 0x15d0540] The V4L2 driver changed the video from 1920x1080 to 1280x720
Input #0, video4linux2,v4l2, from '/dev/video0':
Duration: N/A, start: 611.836289, bitrate: 110592 kb/s
Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1280x720, 110592 kb/s, 7.50 fps, 7.50 tbr, 1000k tbn, 1000k tbc
Output #0, avi, to 'out2.avi':
Metadata:
ISFT : Lavf57.25.100
Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 1280x720, q=2-31, 200 kb/s, 7.50 fps, 7.50 tbn, 7.50 tbc
Metadata:
encoder : Lavc57.24.102 mpeg4
Side data:
unknown side data type 10 (24 bytes)
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> mpeg4 (native))
因为我的摄像头不支持1920*1080,默认还原成了前面他所支持的参数 1280*720,输出的视频编码采用了avi的默认编码和码率参数。
ffmpeg在linux下桌面图形的时候,通常是用x11grab设备采集桌面图像。
ffmpeg -h demuxer=x11grab 可以获得操作的参数:
Demuxer x11grab [X11 screen capture, using XCB]:
xcbgrab indev AVOptions:
-x <int> .D...... Initial x coordinate. (from 0 to INT_MAX) (default 0)
-y <int> .D...... Initial y coordinate. (from 0 to INT_MAX) (default 0)
-grab_x <int> .D...... Initial x coordinate. (from 0 to INT_MAX) (default 0)
-grab_y <int> .D...... Initial y coordinate. (from 0 to INT_MAX) (default 0)
-video_size <string> .D...... A string describing frame size, such as 640x480 or hd720. (default "vga")
-framerate <string> .D...... (default "ntsc")
-draw_mouse <int> .D...... Draw the mouse pointer. (from 0 to 1) (default 1)
-follow_mouse <int> .D...... Move the grabbing region when the mouse pointer reaches within specified
amount of pixels to the edge of region. (from -1 to INT_MAX) (default 0)
centered .D...... Keep the mouse pointer at the center of grabbing region when following.
-show_region <int> .D...... Show the grabbing region. (from 0 to 1) (default 0)
-region_border <int> .D...... Set the region border thickness. (from 1 to 128) (default 3)
参数包括了,采集分辨率-video_size , 支持鼠标光标 -draw_mouse, 跟中鼠标轨迹 -follow_mouse, 指定采集区域 -region_border等参数。
例子:
1)录制桌面
ffmpeg -f x11grab -framerate 25 -video_size 1366*768 -i :0.0 out.mp4
图像的分辨率,以实际电脑的支持来,我的因为是1366*768,所刚好录制下整个屏幕
我设置的参数为: 帧率为25帧 ,分辨率为 1366*768,采集设备为 0.0,输出的文件为out.mp4
2)带鼠标的录制桌面
ffmpeg -f x11grab -framerate 25 -video_size 1366*768 -follow_mouse 1 -i :0.0 out.mp4
3)指定录制区域
ffmpeg -f x11grab -framerate 25 -video_size 352*288 -i :0.0+300,200 out4.mp4
-i :0.0+300,200 制定了x坐标为300 y坐标为200
这样就可以录制桌面了。
__EOF__

本文链接:https://www.cnblogs.com/pijunqi/p/14683952.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文来自博客园,作者:皮军旗,转载请注明原文链接:https://www.cnblogs.com/pijunqi/p/14683952.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人