ffmpeg 常用命令

更详细请参考ffmpeg手册,下载ffmpegrelease版后在doc中就有,主页面。video filter 参考ffmpeg-filters.html

ffmpeg -i E:/1/22-.mp4 -ss 11:0 -t 1:0 -b:v 1M -vf setpts=N/FRAME_RATE/TB -af asetpts=N/SR/TB -vcodec hevc_nvenc E:/1/2-.mp4

"-vf setpts=N/FRAME_RATE/TB -af asetpts=N/SR/TB":重置视频和音频的时间线。vf是video filter的缩写

"-vcodec hevc_nvenc":对视频进行重编码时,设置视频编码器为hevc_nvenc(主要是利用显卡编码速度快)

"-codec copy ":表示对原始编码的视频和音频直接拷贝,相当于"-vcodec copy "和"-acodec copy"。对视频进行时如果视频帧率或音频采样率不同会出现https://blog.csdn.net/qiushangren/article/details/132418796 中所提到的问题

"-i E:/1/22-.mp4":设置输入视频

"-ss 1:1:1":截取视频时设置开始时间1:1:1 。如果-ss 参数在-i参数之前,会定位到该时间点之后最近的i帧或p帧,有时会出现开头视频解码错误(可能定位到了一个p帧),这时可以通过截取1分钟视频,将时间往前调几秒钟进行尝试。在视频文件中两i帧之间的间隔从几毫秒到几十秒不等。
对截取视频进行重新编码的方案,会先找目标时间点附近往前的最近的i帧,然后精确定位到时间点的帧进行重编码。

"-t 1:1:1":截取视频时设置时长1:1:1 ,放在-i之前,表示对输入视频进行时长限制,读取到对应时长就不读了,放在-i之后表示对输出进行时长限制,写完对应时长就不写了。

"-to 2:2:2":截取视频时设置截止时间2:2:2 ,放在-i之前,表示对输入视频进行截止时间限制,读取到对应截止时间就不读了,放在-i之后表示对输出进行截止时间限制,写完对应截止时间就不写了。这个与-ss一起使用时,需要注意与-ss 放置的位置要一致

"-b:v 1M":设置视频流码率1M"

ffmpeg -ss 22:30 -accurate_seek -i E:/1/1.mp4 -t 2:0 -avoid_negative_ts 1 -c copy E:/1/11-.mp4

"-avoid_negative_ts 1" :结合-c copy 使用。直接跳转到目标时间点最近的I帧开始,避免出现视频解码错误的现象。avoid_negative_ts的值为[-1,2],为正数时才会进行跳转,默认值为0.

"-accurate_seek" :结合-ss使用,允许ss是否精确定位。(暂时没发现有什么特殊之处)

"-start_at_zero" :结合-ss使用,当-ss 放在 -i前面时才用到该参数。

ffmpeg -f concat -i E:/1/videos.txt -safe 0 -codec copy E:/1/a.mp4 //拼接多个视频文件。(视频拼接需要视频的码率、帧率、宽、高等等参数一致,对于有差异的视频需要通过filter对其进行处理后格式变成一致才能进行拼接。判断视频参数是否一致,需要通过ffprobe进行探查)

"-f concate" 表示拼接视频

"-i E:/1/videos.txt" :指定存放要拼接的文件的内容。可以对满足拼接条件的多个文件进行拼接。

-safe 0:允许使用不安全的文件名,这对于指定文件路径非常有用。如果不加这个参数,当文件名包含特殊字符时,可能会导致拼接失败。

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex concat=n=2:v=1:a=1 output.mp4

拼接input1.mp4和input2.mp4两个视频文件,output.mp4是拼接后的输出文件。其中,n表示需要拼接的文件个数,v表示是否拼接视频流,v=1表示拼接视频流,v=0表示不拼接视频流,a表示是否拼接音频流。

ffmpeg -i 1.mp3 -i 2.mp3 -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 output.mp3:

-ac:设定声音的channel数

-c:a libmp3lame:指定音频编码器为libmp3lame

-q:a:表示输出的音频质量,一般是1到5之间(1 为质量最高)

ffmpeg -i 1.mp3 -i 2.mp3 -i 3.mp3 -filter_complex "[1:a]adelay=1000[a1];[2:a]adelay=1000[a2];[0:a][a1][a2]concat=n=3:v=0:a=1" output.mp3: 拼接三段音频,在每段之间加入一秒的空白。

-filter_complex "[1:a]adelay=1000[a1]":第2段素材的音频(如果是视频就是[1:v]),延迟1000毫秒播放,并且赋值为a1,供后面使用。同理定义了a2。

-filter_complex "[0:a][a1][a2]concat=n=3":将第一段素材的音频、a1和a2拼接,n=3表示三段。

v=0:a=1:不要声音,只要音频。

ffmpeg -i 1.mp4 -i bg.jpg -i font.png -filter_complex "[0:v]scale=1080:-1[video];[1:v][video]overlay=x=0:y=(1920-h)/2[v1];[v1][2:v]overlay" -codec:a copy output1.mp4:bg.jpg是1080*1920的竖版图片用作背景,font.png是1080*1920的带透明通道的字幕图片。目的是在背景图中间嵌入(合并)视频1.mp4,并对1.mp4保持宽为1080的自适应缩放,最后合并上字幕。

[0:v]scale=1080:-1[video]:第一个素材的只取视频,按比例resize成宽1080,输出赋值为video。

[1:v][video]overlay=x=0:y=(1920-h)/2[v1]:将第video放在背景图上层,位置是x,y,输出赋值为v1.

[v1][2:v]overlay:将第三个素材的视频放在v1上层。

音频、视频合并

ffmpeg -i 1.mp4 -i 1.mp3 -filter_complex "[1:a]volume=0.3[a1];[0:a][a1]amix=inputs=2:duration=first[a]" -map 0:v -map "[a]" -c:v copy -c:a aac -y output.mp4:视频合成, 原视频有声音,在保持原视频声音不变的情况下,添加背景音,并让背景音音量变小。

[1:a]volume=0.3[a1]:第二个素材的音频音量取30%,输出赋值为a1;

[0:a][a1]amix=inputs=2:duration=first[a]:第一个素材(视频)的声音和背景音混合,时长为第一个素材的声音,输出赋值a;

-map 0:v:视频流式拼接,这里只有一个视频;

-map "[a]":音频流式拼接,这里取刚刚输出的a;

-c:v copy:视频编码不变;

-c:a aac :音频编码acc。

-y:输出文件覆盖

ffmpeg -i 1.mp4 -i 1.mp3 -filter_complex "[0:v]trim=0:10.1[v];[1:a]adelay=1000[a];[v][a]concat=n=1:v=1:a=1" -c:v libx264 -c:a aac -movflags +faststart output.mp4:视频合成, 去掉原视频的声音,重新配音,并且声音前增加1秒的空白。

[0:v]trim=0:10.1[v]:视频取1-10.1秒,这里单位是秒,输出赋值v;

[1:a]adelay=1000[a]:音频演示1000毫秒播放,这里单位是毫秒;

[v][a]concat=n=1:v=1:a=1:音视频合在一起,输出需要视频和音频;

-c:v libx264:视频编码使用x264;

-c:a aac:音频编码acc;

-movflags +faststart :这个参数跟mp4的元数据有关,设为faststart表示会将moov移动到mdat的前面,在线播放的时候会稍微快一些。

ffmpeg -i E:/1/2.mp4 -r 15 E:/1/22-.mp4

"-r 15" :修改视频帧率时使用,设置目标视频帧率。

ffmpeg -i E:/1/6-.mov -r 29.97 -ar 44100 -map 0:0 -map 0:1 E:/1/6.mov //作用是将文件变换帧率,同时保持原来文件流的序列号。此案例中6-.mov原来stream 0是音频流,stream 1是视频流,但是使用ffmpeg进行重新编码后(此处使用-r就会导致重新编码),ffmpeg会默认将视频流设置为stream 0,音频流设置为stream 1。要保持原来的流序列号。就需要通过-map[stream] (stream 可用 "文件序号:流序号" 或者 流别名 表示)来设置先后顺序,第一个map设置第一个输入文件的第一个流为 stream 0 ;第二个map设置第一个输入文件的第二个流为stream 1

-map input_file_index:stream_number:挑选流和设置流序列号。

-ar 44100 : 设置音频的采样率为44100

ffmpeg -i E:/1/6-.mov -video_track_timescale 30K -r 29.97 -c:v libx264 -b:v 7M E:/1/6.mov

-video_track_timescale 30K 设置tbn为30K,在新版的ffmpeg中tbc已经被抛弃了。设置tbn必须通过这个参数进行。拼接的两个视频的tbn不一致的时候,会导致合成的目标视频出现时长紊乱。

参考:

https://superuser.com/questions/1362410/what-is-fps-tbr-tbn-tbc-in-ffmpeg

https://video.stackexchange.com/questions/33134/ffmpeg-resizing-mp4-changes-the-timebase-tbn-tbc

ffmpeg -i E:/1/1.mp4 -r 25 -vf scale=848:1520 -b:v 1M -c:v hevc_nvenc E:/1/1-.mp4

-vf scale=848:1520 表示将1.MP4的视频的长宽通过伸缩的方式改为848:1520。scale=w:h。当w为-1时表示保持原来的长宽比,并将h设置为新的值;h亦然。(视频合拼后出现乱码,很有可能是因为视频的尺寸对不上

ffmpeg -i E:/1/1.mp4 -vf crop='720:1280:200:200' E:/1/1-.mp4

-vf crop='720:1280:200:200' 表示将1.MP4的视频的长宽通过裁剪的方式改为720:1280。crop='w:h:x:y'。x和y可以不进行设置,程序会自动计算,默认居中。w和h是主要值,x和y超出范围的值会被削减为范围值。

0:逆时针旋转90度并垂直翻转,1:顺时针旋转90度,2:逆时针旋转90度,3:顺时针旋转90度后并垂直翻转

ffmpeg -i E:/1/1.mp4 -ss 2:55:10 -t 30:0 -r 24 -ac 1 -ar 44100 -video_track_timescale 20K -vf "scale=720:1280,setsar=sar=1:1" -b:v 1M -c:v hevc_nvenc E:/1/1-.mp4

  1. PAR图像纵横比:PAR=(每行像素数)/(每列像素数)=分辨率,通过scale或-s可进行设置
  2. SAR样点纵横比:SAR=(像素的宽)/(像素的高)。像素不一定都是正方形的。
  3. DAR显示纵横比:一般说的16:9和4:3指的是DAR。DAR=(每行像素数像素的宽)/(每列像素数像素的高),即DAR=PAR*SAR

-vf "scale=720:1080,setsar=sar=1:1" :设置视频幅度为720:1080 ,设置sar=1:1

-ac 1 :设置声音为单通道,如果stereo应该设置为2通道

-ab 56K :设置声音的比特率 等价于"-b:a 56K"

-ar 44100 : 设置音频的采样率为44100

ffmpeg -i D:/1/1.mp4 -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" D:/1/b.mp4 将视频上半部分水平镜像到下半部分形成新的视频。

                [main]
input --> split ---------------------> overlay --> output
            |                             ^
            |[tmp]                  [flip]|
            +-----> crop --> vflip -------+
input就是原输入流,上图整个流程就做了这些操作,
首先使用split滤波器将input流分成两路流(main和tmp),然后分别对两路流进行处理。对于tmp流,先经过crop滤波器进行裁剪处理,再经过flip滤波器进行垂直方向上的翻转操作,输出的结果命名为flip流。再将main流和flip流输入到overlay滤波器进行合成操作。上图的input就是上面提过的buffer源滤波器,output就是上面的提过的buffersink滤波器。

以上操作使用命令实现是
ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
同一个线性链中的过滤器用逗号分隔,不同的过滤器线性链用分号分隔。
在我们的例子中,裁剪,vflip在一个线性链中,分割和叠加在另一个链中是分开的。线形链连接的点用方括号括起来的名称进行标记。
在本例中,拆分过滤器生成与标签[main]和[tmp]相关联的两个输出。
一些过滤器接受输入的参数列表:它们在过滤器名称和等号之后指定,并用冒号分隔。

描述:前景窗口(第二输入)覆盖在背景窗口(第一输入)的指定位置。
​
语法:[main_name][overlay_name]overlay[=x:y[[:rgb={0, 1}]]
    参数 x 和 y 是可选的,默认为 0。
    参数 rgb 参数也是可选的,其值为 0 或 1,默认为 0。
​
参数说明:
    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 1.mp4 -vf pad=2*iw 4.mp4 :将宽度扩展一倍,用黑色填充。

-vf pad=2*iw:将宽度扩展为原来的两倍,pad=w:h:x:y:violet (violet 紫色)

ffmpeg -i 1.mp4 -vf split[a][b];[a]pad=2*iw[1];[b]hflip[2];[1][2]overlay=w:0 7.mp4

F1: split过滤器创建两个输入文件的拷贝并标记为[a],[b]

F2: [a]作为pad过滤器的输入,pad过滤器产生2倍宽度并输出到[1].

F3: [b]作为hflip过滤器的输入,vflip过滤器水平翻转视频并输出到[2].

F4: 用overlay过滤器把 [2]覆盖到[1]的旁边.

ffmpeg -i .test.mp4 -i test1.mp4 -lavfi hstack output.mp4 :将两个相同格式的视频左右拼接(对于不同格式视频的拼接需要先用vf将视频进行修正)

-lavfi hstack :左右拼接, vstack 上下拼接

ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -lavfi hstack=inputs=3 output.mp4 :3个视频左右拼接

ffmpeg -i test.mp4 -vf "transpose=1" out.mp4 :顺时针旋转90° transpose=2 逆时针90°

ffmpeg -i test.mp4 -vf hflip out.mp4 :水平翻转视频画面 vflip垂直翻转

ffmpeg -i ring.mp4 -i ring_100x87.png -filter_complex overlay=W-w:H-h-56 -max_muxing_queue_size 1024 ring_logo_b.mp4 :对ring.mp4添加水印。

ffmpeg -i ring.mp4 -itsoffset 8.6 -i ring_100x87.png -filter_complex overlay=W-w:56 -max_muxing_queue_size 1024 ring_logo_delay.mp4:背景窗口播放 8.6 秒后,图标开始显示。注意 "-itsoffset 8.6" 作为第二个输入文件的输入选项,参数位置不能放错。

ffmpeg -i D:/1/a.mp4 -filter_complex "[0:v]split=3[v0][v1][v2];[v0]trim=0:10,setpts=PTS-STARTPTS[vout0];[v1]trim=10:20,setpts=PTS-STARTPTS[vout1];[v2]trim=20:30,setpts=PTS-STARTPTS[vout2];[0:a]asplit=3[a0][a1][a2];[a0]atrim=0:10,asetpts=PTS-STARTPTS[aout0];[a1]atrim=10:20,asetpts=PTS-STARTPTS[aout1];[a2]atrim=20:30,asetpts=PTS-STARTPTS[aout2]" -c:v hevc_nvenc -map [vout0] -map [aout0] D:/1/output0.mp4 -map [vout1] -map [aout1] D:/1/output1.mp4 -map [vout2] -map [aout2] D:/1/output2.mp4 -y 将一个30s的视频按时间先后拆分成三个10s的视频。ffmpeg 中的video filter 和audio filter是分开的,所以对声音和视频需要分开处理。按时间先后顺序拆分视频,最便捷的截取方式应该是 通过-ss和 -t参数进行操作

ffmpeg -f lavfi -i "aevalsrc=10:d=2" -f lavfi -i "anullsrc=duration=1" -filter_complex "[0:a][1:a]amix=inputs=2:duration=first:dropout_transition=0" output.wav:在音频之间多次插入随机静音的效果

aevalsrc=0:d=2:aevalsrc为音频滤镜,这段作用表示生成2秒钟的静音音频

anullsrc=duration=1:anullsrc为音频滤镜,这段作用为生成1秒钟的空白音频

[0:a][1:a]amix=inputs=2:duration=first:dropout_transition=0:amix为音频滤镜,这段作用表示将静音音频和空白音频混合在一起, amix作用是混合音频,音量大小等于1/n,amix混合不同时长的音频时,会出现音频音量前后不一致, ffmpeg使用amix混合多个音频时音量变小或音量不一致问题-CSDN博客
FFmpeg音频滤镜(12) - 简书

将图片制作成一个小视频,然后添加到长视频开头:

(1)ffmpeg -f lavfi -t 0.1 -i anullsrc=r=44100:cl=mono -c:a aac -ab 69K D:/1/test.aac -y :制作0.1秒的静音音频流文件,采样率ar、编码器c:a、通道数cl、码率b:a 要与目标文件一致。

(2)ffmpeg -t 0.1 -f image2 -loop 1 -i D:/1/1.jpeg -r 22.37 -video_track_timescale 17152 -vf "setsar=sar=1:1" -b:v 1M -c:v hevc_nvenc D:/1/11-.mp4 制作0.1秒长的视频流文件,分辨率(不一样的时候可以使用vf 中的scale|crop|pad等进行操作,保证输出的视频流文件与目标的一致)、帧率-r、tbn、sar 与目标文件的视频流保持一致。

(3)ffmpeg -i D:/1/11-.mp4 -i D:/1/test.aac -map 0:0 -map 1:0 D:/1/1-.mp4:将音频流和视频流合并,-map 的位置极为重要,他设置了视频流和音频流的下标,这里-map 0:0 表示第一个输入文件的第一个流作为输出文件的第一个流,-map 1:0 表示第二个输入文件的第一个流,必须保证与目标流下标对应。就此制作完成

(4)ffmpeg -f concat -i D:/1/videos.txt -c copy D:/1/a.mp4 ,拼接两个文件。

vf中的concat:1.mkv 2.mkv 3.mkv每个视频都有3个流,分别是v[0] a[1] a[2]。使用vf将三个视频拼接成一个视频

ffmpeg -i 1.mkv -i 2.mkv -i 3.mkv -filter_complex \
  '[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2]
   concat=n=3:v=1:a=2 [v] [a1] [a2]' \
  -map '[v]' -map '[a1]' -map '[a2]' output.mkv
concat=n=3:v=1:a=2 ,表示目标文件和输入文件的流有3个,v有一个,a有两个。

对part1.mp4和part2.mp4的视频进行缩放后拼接成一个文件,操作如下:
movie=part1.mp4, scale=512:288 [v1] ; amovie=part1.mp4 [a1] ;
movie=part2.mp4, scale=512:288 [v2] ; amovie=part2.mp4 [a2] ;
[v1] [v2] concat [outv] ; [a1] [a2] concat=v=0:a=1 [outa]

其他参数

ffmpeg -i E:/1/1.mp4 -metadata title=xxx -metadata copyright=xxx.com -metadata comment=xxx.com -t 1:0 -b:v 1M -c:v hevc_nvenc E:/1/2-.mp4 设置title copyright comment等参数。

GOP

ffprobe -i D:/1/a.mp4 -select_streams v:0 -show_frames >D:/1/h1.txt :查看gop(计算两个I帧pict_type=I的时间间隔,具体视频流中,每个gop的时间长度有所差异,gop在编码是只是一个参考值)

ffmpeg -i D:/1/a.mp4 -f segment -segment_time 2 -reset_timestamps true -avoid_negative_ts 1 -c copy D:/1/out%d.mp4 -y :将D:/1/a.mp4的内容按不小于2秒以gop为单位进行裁剪。不会截断gop。
segment详细参数参考ffmpeg手册中的"(stream) segment muxer AVOptions"段。

ffmpeg -t 3 -i D:/1/a.mp4 -avoid_negative_ts 1 -c copy D:/1/outtest.mp4 :截取3秒,会截断gop。

如何用ffmpeg准确剪切视频,对初始gop进行重编码(最方便的还是对视频重编码):Can you losslessly ediit H264 at the GOP level? -Stack Exchange***
回答1***

回答2:


设备:

ffmpeg -devices 查询当前的设备有哪些,windows下建议使用dshow,mac下建议使用foundation

ffmpeg -f dshow -list_devices true -i "" 该命令可以查询设备列表(空引号表示列举,也可以用单词 dummy 来代替) (-i 指定设备 mac 下 1表示桌面(命令查询mac下的索引号))

ffmpeg -f dshow -list_options true -i video="USB Live Camera" :该命令查看设备"USB Live Camera"支持的格式 ​​​​​​。可以看到该设备有pin 0 和pin 1,两者支持的格式不一样,pin 1中支持h264。

ffplay -f dshow -vcodec h264 -video_pin_name 1 -framerate 30 -video_size 1920*1080 -x 640 -y 480 -i video="USB Live Camera" -f dshow -i audio="麦克风 (USB Live Camera audio Devi)" :捕捉设备"USB Live Camera" pin 1中的h264编码分辨率为1920*1080,帧率为30帧的格式的画面。并显示成640*480画幅的画面,并采集"麦克风 (USB Live Camera audio Devi)"的声音。

ffplay -f dshow -vcodec mjpeg -framerate 30 -video_size 1920*1080 -x 640 -y 480 -i video="USB Live Camera":捕捉设备"USB Live Camera" pin 0(默认pin值)中的h264编码分辨率为1920*1080、帧率为30帧的格式的画面。并缩放显示成640*480画幅的画面。

-x -y:设置ffplay播放窗口的长和高。

ffplay -f gdigrab -offset_x 10 -offset_y 20 -video_size 640:480 -i desktop :通过gdigrab捕捉桌面区域。

-offset_x -offset_y 用于设置捕获的画面的偏移,-video_size是设置捕获换面的长宽。这两个参数用于控制捕获行为。

ffplay -f gdigrab -i desktop -x 640 -y 480 :通过gdigrab捕捉桌面,并缩放成640*480来显示 -x -y 是设置输出的画幅的

ffplay -f gdigrab -i desktop -vf "scale=640:480" :通过gdigrab捕捉桌面,并缩放成640*480来显示

ffmpeg -f gdigrab -framerate 6 -i title=tools out1.mp4 :使用gdigrab采集窗口名字为tools 的窗口的画面。

ffplay -f vfwcap -i 0 :捕捉设备编号为0 的画面采集设备的画面。

ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt 420p out.yuv :将imput.mp4 转换成YUV420p格式的文件out.yuv,-c:v rawvideo表示输出视频无编码,

ffplay -pix_fmt yuv420p -s 608x368 out.yuv :播放yuv格式文件。-s指定画面的长宽,是必须得参数

ffplay -pix_fmt yuv420p -s 608x368 -vf extractplanes = 'y' out.yuv :提取出y分量播放

ffmpeg -i input.mp4 -filter_complex 'extractplanes= y+u+v[y][u][v] ' -map '[y]' y.yuv -map '[u]' u.yuv -map '[v]' v.yuv :从mp4文件中提取出y u v 分量的文件。

ffplay -pix_fmt gray -s 608x368 y.yuv :播放y分量的文件

ffplay -pix_fmt gray -s 304x184 u.yuv :播放u分量的文件

-vsync 1:表示输入视频同步 -async 1:表示输入音频同步

-b:v 200k -maxrate 250k -bufsize 400k:表示输出视频码率200k,最大码率250k,缓存大小400k

-coder 1:表示使用cabac进行熵编码

-refs 3 -bf 5:表示编码时用到的参考帧数量为3帧,b帧数量最大为5帧

-flags +loop -deblock -1:-1 :表示使用去块化的滤波器,后面是它的参数

-partitions i4x4+i8x8+p8x8+b8x8:-partitions设置宏块分析,可以包含i4x4、i8x8、p8x8、b8x8,

-me_method umh:设置运动估算算法,umh表示不均衡的六边形算法

-g 60 keyint_min 30:设置gop为60 ,最小gop为30

-qmin 0 -qmax 69 -qdiff 2:设置量化器参数,-qdiff设置q p step 设置设置的是2

ffplay -f dshow -i video="USB Live Camera" -vf "drawtext=text='%{pts\:hms}':x=10:y=10:fontsize=40:fontcolor=red" 捕获摄像头视频并打上时间

ffmpeg -re -i 'input.mp4' -c:v libx264 -preset slow -tune film -b:v 2000k -maxrate 2500k -bufsize 4000k -g 60 -c:a aac -b:a 128k -f flv 'rtmp://server-address/stream-name' 将视频进行推流,

-re:表示以实时模式推流。使用该参数时,FFmpeg会尽可能快地读取源文件并将数据推送到服务器,以保证推流的实时性。

-preset :是h264的一个预设选项,可用于设置编码速度和质量的平衡,控制FFmpeg的编码器。

-tune :是h264的一个预选项,主要配合视频类型和视觉优化的参数,或特别的情况。如果视频的内容符合其中一个可用的调整值又或者有其中需要,则可以使用此选项,否则建议不使用(如tune grain是为高比特率的编码而设计的)
【x264】x264编码器参数配置-CSDN博客
x264编码参数详解与最佳实践-CSDN博客

通过preset参数,我们可以非常方便地设置输出视频的速度、质量等内容,达到我们需要的效果。
-preset参数的取值范围依据编码器而不同。这里我们以视频编码器x264为例,介绍几个比较常用的-preset参数:

-preset ultrafast :编码速度非常快,但输出视频质量不高
-preset superfast :编码速度非常快,但输出视频质量比ultrafast略微高一些
-preset veryfast :编码速度比较快,输出视频质量较好
-preset faster :编码速度比较快,输出视频质量比veryfast略微差一些
-preset fast :编码速度适中,输出视频质量较好
-preset medium :编码速度适中,输出视频质量非常好,是默认值
-preset slow :编码速度较慢,但输出视频质量比medium更好
-preset slower :编码速度比slow略微慢一些,但输出视频质量更好
-preset veryslow :编码速度最慢,但输出视频质量最好

-preset参数的其他用途
-preset参数不仅可以用于控制编码速度和质量,还可以用于优化视频和音频的编码。例如,我们可以使用-preset tune选项来进行编码优化,以适应不同的情况。可以通过x264的--tune参数或ffmpeg的-x264-params参数来指定。

下面是一份x264的-tune选项列表:

film :该选项用于处理电影或其他传统镜头的视频,适用于视频的动态图像较少。缺省设置为无。
animation :该选项用于处理动画或卡通片,适用于视频的动态图像较多。缺省设置为no。
grain :该选项用于处理具有高噪声的视频。缺省设置为no。
stillimage :该选项适用于处理静止图像。缺省设置为no。
psnr :该选项用于计算视频的PSNR值。缺省设置为no。
ssim :该选项用于计算视频的SSIM值。缺省设置为no。
fastdecode: 可以快速解码的参数;
zerolatency:零延迟,牺牲视频质量减少延迟,比如视频会议
                        
原文链接:https://blog.csdn.net/lixiaowu119/article/details/136705644

-bufsize:设置缓存大小,让推流过程更平滑。

-f flv :将mp4格式转换成flv格式,因为flv存放格式与rtmp的包格式是极为相近的,只是使用的包头不同

x264编码参数详细解释:
X264 Settings - MeWiki :http://www.chaneru.com/Roku/HLS/X264_Settings.htm
介绍类似CABAC变成coder的详细映射关系:https://sites.google.com/site/linuxencoding/x264-ffmpeg-mapping

https://www.cnblogs.com/hgdhome/p/9372800.html

FFmpeg 常用命令_ffmpeg改变视频帧率_wk灬丨的博客-CSDN博客

FFmpeg个人使用指南_ffmpeg force_style_jerrylin07的博客-CSDN博客

FFMPEG命令入门到提高,一篇文章就够了 - 知乎

FFmpeg Filter过滤器_ffmpeg configure_filtergraph_生椰_李点点的博客-CSDN博客

使用ffmpeg将图片拼接为视频--技术员007 ଘ(੭ˊᵕˋ)੭

ffmpeg 基本命令介绍 - 简书
FFmpeg+SDL播放器开发实践:解析、解码、渲染全流程详解 - 知乎

FFmpeg ------ 屏幕录像和录音并推流(命令行的方式) - 知乎

相关推荐
宿命小人7 小时前
ffmpeg视频抽帧和合成
ffmpeg·音视频
丘上人13 小时前
ffmpeg 命令行 重置音频或视频的时间戳
ffmpeg·音视频
我真不会起名字啊17 小时前
“深入浅出”系列之FFmpeg:(1)音视频开发基础
ffmpeg·音视频
飘逸高铁侠20 小时前
使用 whisper和ffmpeg 烧录视频的中英文双语字幕
ffmpeg·whisper·音视频
风雅GW1 天前
本地LLM部署--Open WebUI(多媒体工具FFMPEG作用)
gpt·ffmpeg·agi
cuijiecheng20182 天前
音视频入门基础:MPEG2-PS专题(6)——FFmpeg源码中,获取PS流的视频信息的实现
ffmpeg·音视频
丘上人2 天前
下载ffmpeg执行文件
ffmpeg
悠着,大嘟嘟2 天前
基于ffmpeg和sdl2的简单视频播放器制作
ffmpeg·音视频
Fre丸子_2 天前
ffmpeg之yuv格式转h264
开发语言·qt·ffmpeg