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 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   皮军旗  阅读(312)  评论(0编辑  收藏  举报
编辑推荐:
· 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训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示