ffmpeg基础使用

参考:
ffmpeg常用命令
ffmpeg参数中文详细解释
[总结]FFMPEG视音频编解码零基础学习方法

一、安装

注:新版本安装方式,可以参考:

Index of /ffmpeg/old-releases   

John Van Sickle - FFmpeg Static Builds

linux下安装ffmpeg的详细教程_linux 离线安装ffmpeg-4.1.tar_戴国进的博客-CSDN博客 

Windows下载FFmpeg最新版

打开Download FFmpeg,该网站中的FFMPEG分为3个版本:Static,Shared,Dev。

前两个版本可以直接在命令行中使用,他们的区别在于:Static里面只有3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe,每个exe的体积都很大,相关的Dll已经被编译到exe里面去了。Shared里面除了3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe之外,还有一些Dll,比如说avcodec-54.dll之类的。Shared里面的exe体积很小,他们在运行的时候,到相应的Dll中调用功能。Dev版本是用于开发的,里面包含了库文件xxx.lib以及头文件xxx.h,这个版本不包含exe文件。

这里下载了static版本,是个zip压缩文件,解压到指定目录,去配置环境变量,比如e:\ffmpeg20180919\bin,这样bin下面的ffmpeg.exe就可以在命令行中使用了,可以用ffmpeg -version测试一下:

查看所有支持的编、解码算法:

运行 ffmpeg -codecs
显示一下信息说明

其中前缀含义如下:
前缀含义
D….. = Decoding supported
.E…. = Encoding supported
..V… = Video codec
..A… = Audio codec
..S… = Subtitle codec
…I.. = Intra frame-only codec
….L. = Lossy compression
…..S = Lossless compression

二、常用命令

ffmpeg 参数详细说明

主要参数:

-c:      指定编码器
-c copy: 直接复制,不经过重新编码(这样比较快)  eg: ffmpeg -i input.mp4 -c copy output.webm 
          将视频从一种容器转到另一个容器
-c:v:    指定视频编码器  	eg:  ffmpeg -i [input.file] -c:v libx265 output.mp4  转成 H.265 
          编码
-c:a:    指定音频编码器  
-i:      指定输入文件  		eg: ffmpeg -i input.mp4 查看文件信息
-an:     去除音频流
-vn:     去除视频流   eg: $ ffmpeg -i input.mp4 -vn -c:a copy output.aac 从视频中提取音频;- 
          vn去掉视频,-c:a copy表示不改变音频编码,直接拷贝。
-preset: 指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, 
          veryfast, faster, fast, medium, slow, slower, veryslow。
-y:      不经过确认,输出时直接覆盖同名文件。
-vf scale=480*360   改变分辨率  eg:ffmpeg -i input.mp4 -vf scale=320*240 output.mp4
-s        设置视频分辨率 		eg:ffmpeg -i input,mp4 -s 320x240 output.mp4
-vframes 1 指定只截取一帧  
-q:v      2表示输出的图片质量,一般为1到5(1代表质量最高)
-ss       开始时间
-t        持续时间
-to       结束时间
-loop 1   表示图片无限循环
-shortest 音频文件结束,输出视频就结束
-r fps    设置帧率 		eg: ffmpeg -i input.mp4 -r 24 output.mp4 设置帧率为24
-b        设置码率 		eg: ffmpeg -i input.avi -b 1.5M output.mp4
-b:a      音频 -b:v 视频
-fs       (file size首字母缩写)控制输出文件大小 eg: ffmpeg -i input.avi -fs 1024K output.mp4
-ar        指定音频采样率 比如48000
-channels  指定音频通道数 比如双通道为2
-profile:a 指定音频编码格式 比如AAC_LC
-ss        开始时间 

视频参数:

-b 设定视频流量(码率),默认为200Kbit/s 
-r 设定帧速率,默认为25 
-s 设定画面的宽与高 
-aspect 设定画面的比例 
-vn 不处理视频 
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器 
-g gop_size 设置图像组大小 这里设置GOP大小,也表示两个I帧之间的间隔

音频参数:

-ar 设定采样率 
-ac 设定声音的Channel数 
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器 
-an 不处理音频

其他参数: 

1.time_base
#define AV_TIME_BASE 1000000
#define AV_TIME_BASE_Q          (AVRational){1, AV_TIME_BASE}
AV_TIME_BASE_Q指的是1微秒(1/1000000)。

2.pts & dts
PTS(Presentation Time Stamp) : 显示时间戳
DTS(Decoding Time Stamp) :解码时间戳
注意这里的显示时间并不是现实世界里的时间,不是秒、分之类的,而是ffmpeg中的时间刻度。

3.r_frame_rate
the lowest framerate with which all timestamps can be represented accurately (it is the least common multiple of all framerates in the stream).

4.AVRational
typedef struct AVRational{
    int num; ///< Numerator
    int den; ///< Denominator
} AVRational;


5.av_q2d(AVRational )
将一个AVRational变成一个浮点数,可以理解为在这里面做了一次除法。
Parameters:
​ a AVRational to convert
Return:
​ a in floating-point form
因为AVRational有两个成员,一个是den分母,一个是num分子,所以实际的计算公式如下
r e s = A V R a t i o n a l . n u m / A V R a t i o n a l . d e n res = AVRational.num / AVRational.den
res=AVRational.num/AVRational.den
那为什么要使用一个函数做这件事呢?我的思考是可能存在分母为0的时候,需要进行合法性判断。

6.av_rescale_q(int64_t a, AVRational bq, AVRational cq)
转化时间基,将一种时间基转化为另一种。

7.tbr,tbn,tbc
tbr: 帧率
tbn: 文件层的时间精度
tbc: 视频层的时间精度

8.av_packet_rescale_ts()
void av_packet_rescale_ts(AVPacket * pkt,AVRational tb_src, AVRational 	tb_dst )	
将包的时间基转化为另一种。

1. 视频格式转换

其实格式转换说法不太准确,但大家都这么叫,准确的说,应该是视频容器转换
比如一个avi文件,想转为mp4,或者一个mp4想转为ts。

ffmpeg -i input.avi output.mp4
ffmpeg -i input.mp4 output.ts

插个号外:某天我在知乎上看到一段视频,想转给微信好友看,怎么操作呢。这里参考如何全自动下载知乎上的视频到本地(注意不要滥用),先打开要观看的视频页面,再F12清空,然后开始播放视频,就能看到类似https://vdn.vzuu.com/SD/49c84c7c-c61a-11e8-8bad-0242ac112a0a.mp4?auth_key=1539832492-0-0-c61c22f39c&expiration=1539832492&disable_local_cache=1这样的字符串,然后用ffmpeg -i "https://vdn.vzuu.com/SD/49c8..." output.mp4即可下载。弄到电脑上,用电脑QQ发送到手机QQ上,在手机QQ上点击选择保存到手机上。然后在微信里选照片就能看到这个视频了(注意视频文件不要超过20M,另外最开始用的不是电脑QQ,而是百度网盘,发现不行……)。

2. 提取音频

比如我有一个“晓松奇谈”,可是我不想看到他的脸,我只想听声音, 地铁上可以听,咋办?
ffmpeg -i 晓松奇谈.mp4 -acodec copy -vn output.aac
上面的命令,默认mp4的audio codec是aac,如果不是会出错,咱可以暴力一点,不管什么音频,都转为最常见的aac。

ffmpeg -i 晓松奇谈.mp4 -acodec aac -vn output.aac
# (-vn 不处理视频 )

3. 提取视频

我目测有些IT员工,特别是做嵌入式的,比如机顶盒,想debug一下,没有音频的情况下,播放一个视频几天几夜会不会crash,这时候你需要一个纯视频文件,可以这么干。

ffmpeg -i input.mp4 -vcodec copy -an output.mp4
# -an 不处理音频

4. 视频剪切

经常要测试视频,但是只需要测几秒钟,可是视频却有几个G,咋办?切啊!
下面的命令,就可以从时间为00:00:15开始,截取5秒钟的视频。
ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4
-ss表示开始切割的时间,-t表示要切多少。上面就是从开始,切5秒钟出来。

摘自使用 MediaSource 搭建流式播放器

注意一个问题,ffmpeg 在切割视频的时候无法做到时间绝对准确,因为视频编码中关键帧(I帧)和跟随它的B帧、P帧是无法分割开的,否则就需要进行重新帧内编码,会让视频体积增大。所以,如果切割的位置刚好在两个关键帧中间,那么 ffmpeg 会向前/向后切割,所以最后切割出的 chunk 长度总是会大于等于应有的长度。

5. 码率控制

码率控制对于在线视频比较重要。因为在线视频需要考虑其能提供的带宽。

那么,什么是码率?很简单: bitrate = file size / duration

比如一个文件20.8M,时长1分钟,那么,码率就是:
biterate = 20.8M bit/60s = 20.8*1024*1024*8 bit/60s= 2831Kbps
一般音频的码率只有固定几种,比如是128Kbps, 那么,video的就是
video biterate = 2831Kbps -128Kbps = 2703Kbps。

说完背景了。好了,来说ffmpeg如何控制码率。 ffmpg控制码率有3种选择,-minrate -b:v -maxrate

  • -b:v主要是控制平均码率。 比如一个视频源的码率太高了,有10Mbps,文件太大,想把文件弄小一点,但是又不破坏分辨率。 ffmpeg -i input.mp4 -b:v 2000k output.mp4上面把码率从原码率转成2Mbps码率,这样其实也间接让文件变小了。目测接近一半。

  • 不过,ffmpeg官方wiki比较建议,设置b:v时,同时加上 -bufsize
    -bufsize 用于设置码率控制缓冲器的大小,设置的好处是,让整体的码率更趋近于希望的值,减少波动。(简单来说,比如1 2的平均值是1.5, 1.49 1.51 也是1.5, 当然是第二种比较好) ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4

  • -minrate -maxrate就简单了,在线视频有时候,希望码率波动,不要超过一个阈值,可以设置maxrate。
    ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

6. 视频编码格式转换

比如一个视频的编码是MPEG4,想用H264编码,咋办?
ffmpeg -i input.mp4 -vcodec h264 output.mp4
相反也一样
ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4

当然了,如果ffmpeg当时编译时,添加了外部的x265或者X264,那也可以用外部的编码器来编码。(不知道什么是X265,可以Google一下,简单的说,就是她不包含在ffmpeg的源码里,是独立的一个开源代码,用于编码HEVC,ffmpeg编码时可以调用它。当然了,ffmpeg自己也有编码器)
ffmpeg -i input.mp4 -c:v libx265 output.mp4
ffmpeg -i input.mp4 -c:v libx264 output.mp4

7. 只提取视频ES数据

这个可能做开发的人会用到,顺便提一下吧。
ffmpeg –i input.mp4 –vcodec copy –an –f m4v output.h264

8. 过滤器的使用

这个我在另一篇博客提到了,具体参考ffmpeg filter过滤器 基础实例及全面解析

8.1 将输入的1920x1080缩小到960x540输出

ffmpeg -i input.mp4 -vf scale=960:540 output.mp4
//ps: 如果540不写,写成-1,即scale=960:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。

8.2 为视频添加logo / 水印

比如,我有这么一个图片

 想要贴到一个视频上,那可以用如下命令:
./ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4
结果如下所示:

 解释:

logo图片最好是png类型的,如图3.3所示,我们添加了个pptv的logo在右上角,这里是把3.2中去除水印后的视频最为本节的原始视频,当然也可以将logo放在别处,如下所示:

左上角:ffmpeg -i output.mp4 -i pptv.png -filter_complex overlay output3.mp4
右上角:ffmpeg -i output.mp4 -i pptv.png -filter_complex overlay=W-w output4.mp4
左下角:ffmpeg -i output.mp4 -i pptv.png -filter_complex overlay=0:H-h output5.mp4
右下角:ffmpeg -i output.mp4 -i pptv.png -filter_complex overlay=W-w:H-h output6.mp4

8.2 为视频去除 logo / 水印

有时候,下载了某个网站的视频,但是有logo很烦,咋办?有办法,用ffmpeg的delogo过滤器。
语法:-vf delogo=x:y:w:h[:t[:show]]
x:y 离左上角的坐标
w:h logo的宽和高
t: 矩形边缘的厚度默认值4
show:若设置为1有一个绿色的矩形,默认值0。

示例:ffmpeg -i origin.mp4 -vf delogo=1000:32:260:86 output.mp4
解释:ffmpeg -i 原始视频文件 -vf delogo=x:y:w:h 处理后视频文件,x,y为距左上角坐标,w,h为水印的宽度和高度,如图所示,我们想去除右上角的“字幕放送”的水印,可以使用ffmpeg -i origin.mp4 -vf delogo=1000:32:260:86 output.mp4 去掉水印。

包含水印的图

去除水印后的图

9. 抓取视频的一些帧,存为jpeg图片

比如,一个视频,我想提取一些帧,存为图片,咋办?

ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg

-r 表示每一秒几帧
-q:v表示存储jpeg的图像质量,一般2是高质量。

如此,ffmpeg会把input.mp4,每隔一秒,存一张图片下来。假设有60s,那会有60张。60张?什么?这么多?不要不要。。。。。不要咋办?? 可以设置开始的时间,和你想要截取的时间呀。

ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg

-ss 表示开始时间
-t表示共要多少时间。

如此,ffmpeg会从input.mp4的第20s时间开始,往下10s,即20~30s这10秒钟之间,每隔1s就抓一帧,总共会抓10帧。

10. 将图片序列合成视频 | 将视频分解成图片序列

ffmpeg -f image2 -i image%d.jpg video.mpg

上面的命令会把当前目录下的图片(名字如:image1.jpg. image2.jpg. 等...)合并成video.mpg

ffmpeg -i video.mpg image%d.jpg

上面的命令会生成image1.jpg. image2.jpg. ...

支持的图片格式有:PGM. PPM. PAM. PGMYUV. JPEG. GIF. PNG. TIFF. SGI

11. 视频压缩:H264编码profile & level控制

举3个例子吧

ffmpeg -i input.mp4 -profile:v baseline -level 3.0 output.mp4
ffmpeg -i input.mp4 -profile:v main -level 4.2 output.mp4
ffmpeg -i input.mp4 -profile:v high -level 5.1 output.mp4

如果ffmpeg编译时加了external的libx264,那就这么写:
ffmpeg -i input.mp4 -c:v libx264 -x264-params "profile=high:level=3.0" output.mp4
从压缩比例来说,baseline< main < high,对于带宽比较局限的在线视频,可能会选择high,但有些时候,做个小视频,希望所有的设备基本都能解码(有些低端设备或早期的设备只能解码baseline),那就牺牲文件大小吧,用baseline。自己取舍吧!

12. 旋转视频

在手机上录的视频,在电脑放,是颠倒的,需要旋转90度。使用格式工厂失败了……
参考ffmpeg视频的翻转vflip、hflip,旋转rotate、transpose
使用ffmpeg -i 3.mp4 -vf rotate=PI/2 rotate8.mp4画面确实旋转过来了,但是尺寸不对,变成横屏后,两侧的画面看不到了。改用ffmpeg -i 3.mp4 -vf transpose=1 rotate8.mp4解决了问题

13. 视频合成

对于 MPEG 格式的视频,可以直接连接:

ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg

 对于非 MPEG 格式容器,但是是 MPEG 编码器(H.264、DivX、XviD、MPEG4、MPEG2、AAC、MP2、MP3 等),可以包装进 TS 格式的容器再合并。在新浪视频,有很多视频使用 H.264 编码器,可以采用这个方法

ffmpeg -i input1.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts

ffmpeg -i input2.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts

ffmpeg -i input3.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input3.ts

ffmpeg -i "concat:input1.ts|input2.ts|input3.ts" -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4

 保存 QuickTime/MP4 格式容器的时候,建议加上 -movflags +faststart。这样分享文件给别人的时候可以边下边看。

参考:使用ffmpeg合并视频文件的三种方法 - JavaShuo

三、输出YUV420原始数据

对于做底层编解码的人来说,有时候常要提取视频的YUV原始数据。 怎么做?很简单: ffmpeg -i input.mp4 output.yuv怎么样,是不是太简单啦?!!!哈哈(如果你想问yuv的数据,如何播放,我不会告诉你,RawPlayer挺好用的!!)

那如果我只想要抽取某一帧YUV呢? 简单,你先用上面的方法,先抽出jpeg图片,然后把jpeg转为YUV。 比如: 你先抽取10帧图片。 ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
结果:

-rw-rw-r-- 1 chenxf chenxf    296254  7月 20 16:08 pic-001.jpeg
-rw-rw-r-- 1 chenxf chenxf    300975  7月 20 16:08 pic-002.jpeg
-rw-rw-r-- 1 chenxf chenxf    310130  7月 20 16:08 pic-003.jpeg
-rw-rw-r-- 1 chenxf chenxf    268694  7月 20 16:08 pic-004.jpeg
-rw-rw-r-- 1 chenxf chenxf    301056  7月 20 16:08 pic-005.jpeg
-rw-rw-r-- 1 chenxf chenxf    293927  7月 20 16:08 pic-006.jpeg
-rw-rw-r-- 1 chenxf chenxf    340295  7月 20 16:08 pic-007.jpeg
-rw-rw-r-- 1 chenxf chenxf    430787  7月 20 16:08 pic-008.jpeg
-rw-rw-r-- 1 chenxf chenxf    404552  7月 20 16:08 pic-009.jpeg
-rw-rw-r-- 1 chenxf chenxf    412691  7月 20 16:08 pic-010.jpeg

然后,你就随便挑一张,转为YUV: ffmpeg -i pic-001.jpeg -s 1440x1440 -pix_fmt yuv420p xxx3.yuv如果-s参数不写,则输出大小与输入一样。当然了,YUV还有yuv422p啥的,你在-pix_fmt 换成yuv422p就行啦!

四、fluent-ffmpeg

参考自
[FFmpeg探秘]Ep.(1) 什么是FFmpeg?
[FFmpeg探秘]Ep.(2) 从node-fluent-ffmpeg开始
NODEJS基于FFMPEG视频推流测试

该nodejs包封装了ffmpeg的命令行调用部分,加强了代码的可读性,若熟悉ffmpeg 命令行使用手册,亦可不使用该包。

    npm install --save fluent-ffmpeg
    //使用js编码的用户,可以忽略下条命令
    npm install --save @types/fluent-ffmpeg 

五、使用ffmpeg推RTMP直播流

1.安装nignx环境
参考windows使用nginx配置rtmp,hls,httpflv

2.参考手把手教你搭建Nginx-rtmp流媒体服务器+使用ffmpeg推流
在上述下载的demo中,看一下conf/nginx.conf配置文件:

rtmp {
    server {
        listen 1935;

        application live {
            live on;
        }
        
        application vod {
            play video;
        }
        
        application hls {
            live on;
            hls on;  
            hls_path temp/hls;  
            hls_fragment 8s;  
        }
    }
}

其中rtmp就是rtmp服务器模块,端口是1935,application我理解为一个路径。可以通过访问rtmp://localhost/live来访问live这个资源。live on 表示这是实时的传输,这不同于点播,点播就好比我在某视频网站上想看一个视频,无论我什么时候去点击,它会从头开始播放。而实时传输(直播),就是好比看电视,我在19:20去打开电视(打开直播路),视频不会从头开始播放,而是从当前(19:20)的视频数据开始播放。

然后在nginx.exe路径下命令行运行nginx -s reload重新加载配置。

3.使用ffmpeg推流
参考使用FFmpeg在B站直播的姿势
ffmpeg -re -i 1.mp4 -vcodec copy -f flv rtmp://localhost/live
或者

ffmpeg -re -i 1.mp4 -vcodec copy -acodec copy
 -b:v 800k -b:a 32k -f flv rtmp://localhost/live

-re : 表示使用文件的原始帧率进行读取,因为ffmpeg读取视频帧的速度很快,如果不使用这个参数,ffmpeg可以在很短时间就把video.mp4中的视频帧全部读取完并进行推流,这样就无法体现出视频播放的效果了。官方文档中对这个参数的解释是:

-re (input)
Read input at native frame rate. Mainly used to simulate a grab device, or live input stream (e.g. when reading from a file). Should not be used with actual grab devices or live input streams (where it can cause packet loss). By default ffmpeg attempts to read the input(s) as fast as possible. This option will slow down the reading of the input(s) to the native frame rate of the input(s). It is useful for real-time output (e.g. live streaming).

-vcodec copy : -vcodec表示使用的视频编解码器 ,前缀v表示video。后面紧跟的copy 表示复制使用源文件的视频编解码器,比如原文件的编解码器(codec)是h264,则这里就使用h264。

-acodec copy : -acodec表示使用的音频编解码器,前缀a表示audio。后面的copy 表示使用源文件的音频编解码器。

-b:v 800k : -b:v表示视频的比特率(bitrate) ,为800k。

-b:a 32k : 表示音频的比特率为32k。

-f flv : -f表示format ,就是强制输出格式为flv,这一步其实也叫封装(mux),封装要做的事就是把视频和音频混合在一起,进行同步。紧跟在后面的rtmp://localhost/live 表示输出的"文件名",这个文件名可以是一个本地的文件,也可以指定为rtmp流媒体地址。指定为rtmp流媒体地址后,则ffmpeg就可以进行推流。

4.可以使用VLC或ffplay进行播放了

六、音视频采集

1. dshow

参考FFMPEG学习(一)---【命令行】采集视频和音频
Windows DirectShow输入设备,用于采集windows下的视频和音频设备。
通过命令 ffmpeg -list_devices true -f dshow -i dummy 查看支持的设备列表,包含设备名称,设备类型等信息。
得到如下结果

[dshow @ 0000022890f18f40] DirectShow video devices (some may be both video and audio devices)
[dshow @ 0000022890f18f40]  "HP TrueVision HD Camera"
[dshow @ 0000022890f18f40]     Alternative name "@device_pnp_\\?
\usb#vid_0408&pid_5365&mi_00#6&193fc2d2&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 0000022890f18f40] DirectShow audio devices
[dshow @ 0000022890f18f40]  "麦克风阵列 (英特尔® 智音技术)"
[dshow @ 0000022890f18f40]     Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-
00A0C911CE86}\wave_{1F376599-992B-457F-A4B1-45C06BD5C148}"
dummy: Immediate exit requested

使用以下命令录制视频或音频,按Q可以停止。

ffmpeg -f dshow -i video="HP TrueVision HD Camera" -vcodec libx264 001.mp4
ffmpeg -f dshow -i audio="麦克风阵列 (英特尔® 智音技术)"  -ar 16000 -ac 1 lib.wav

音视频联合录制

ffmpeg -f dshow -i video="HP TrueVision HD Camera":audio="麦克风阵列 (英特尔® 智音技术)" 
-s 640x360 -b:v 1000k -b:a 128k output.mkv

音视频推流

ffmpeg -f dshow -i video="HP TrueVision HD Camera":audio="麦克风阵列 (英特尔® 智音技术)" 
-vcodec libx264 -r 25 -preset:v ultrafast -tune:v zerolatency -f rtsp rtsp://127.0.0.1/test

2. FFmpeg使用gdigrab采集窗口

FFmpeg采集设备(3)

  • 15
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
使用ffmpeg,首先需要安装ffmpeg软件。然后,可以使用ffmpeg命令行参数来控制其功能。其中,控制码率有三种选择:-minrate、-b:v和-maxrate。 安装ffmpeg的方法可以参考一些参考资料,例如中提到的FFMPEG视音频编解码零基础学习方法。 使用ffmpeg进行视频合并的方法可以使用以下命令: ffmpeg -i input1.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts ffmpeg -i input2.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts ffmpeg -i input3.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input3.ts ffmpeg -i "concat:input1.ts|input2.ts|input3.ts" -c copy -bsf:a aac_adtstoasc -movflags faststart output.mp4 这个命令将会把多个视频文件合并成一个output.mp4的文件。 总结起来,要使用ffmpeg,首先需要安装它,然后可以使用ffmpeg命令行参数来控制其功能,包括控制码率。同时,还可以使用ffmpeg命令来合并视频文件。希望这些信息对你有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [ffmpeg基础使用](https://blog.csdn.net/JineD/article/details/123057086)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴国进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值