ffmpeg 命令_详细介绍ffmpeg复杂命令(2)

0.引言

阅读本文前可以先看看前面的文章,方便理解,文章列表如下:

详细介绍ffplay命令(1)

详细介绍ffmpeg基础命令(1)

详细介绍ffmpeg基础命令(2)

7bdf53e5f8ae497b51e29cc1b5131dd2.png

1.保持编码格式

音视频均以copy的形式,就是不重新编码,换了一个封装,-codec copy 这个命令等同于-vcodec copy -acodec copy。如下命令:

(1)ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.ts

(2)ffmpeg -i test.mp4 -codec copy test_copy2.ts

2.改变编码格式

音视频均改变编码格式,视频以x265,音频以mp3。

(1)ffmpeg -i test.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv

3.修改帧率

如果要修改帧率和采样率,肯定要涉及到重新转码。如下命令:

(1)ffmpeg -i test.mp4 -r 15 output2.mp4

注意:这时候不能以copy的形式,否则会报错。

4.修改视频码率

(1)ffmpeg -i test.mp4 -b 400k output_b.mkv

(2)ffmpeg -i test.mp4 -b:v 400k output_bv.mkv

注意:如果换了一种封装格式,此时音频也可能被重新编码。如下是转为MKV封装:

b4b3324565fe3889d516fe2bedc934ab.png

如下是转为ts封装,此时音频也可能被重新编码。如下图所示:

b3c238e60939fc0aa86311d33563e338.png

5.修改音频码率

修改音频码率,码率不可能无限大。如果不想重新编码video,需要加上-vcodec copy。命令如下:

ffmpeg -i test.mp4 -b:a 192k output_ba.mp4

6.修改音视频码率

ffmpeg -i test.mp4 -b:v 400k -b:a 192k output_bva.mp4

7.修改视频分辨率

ffmpeg -i test.mp4 -s 480x270 output_480x270.mp4

8.修改音频采样率

ffmpeg -i test.mp4 -ar 44100 output_44100hz.mp4

9.ffmpeg裁剪视频

-ss设置裁剪起始时间,-t 是设置裁剪多长的时间。如果音视频源的音视频格式不统一则强制统一为 -vcodec libx264 -acodec aac

9.1找三个不同的视频每个视频截取10秒内容

(1)ffmpeg -i 02.mp4 -ss 00:05:00 -t 10 -codec copy 1.mp4

(2)ffmpeg -i 3.mp4 -ss 00:05:00 -t 10 -codec copy 2.mp4

(3)ffmpeg -i 4.mp4 -ss 00:05:00 -t 10 -codec copy 3.mp4

9.2将上述1.mp4/2.mp4/3.mp4转成ts格式

(1)ffmpeg -i 1.mp4 -codec copy -vbsf h264_mp4toannexb 1.ts

(2)ffmpeg -i 2.mp4 -codec copy -vbsf h264_mp4toannexb 2.ts

(3)ffmpeg -i 3.mp4 -codec copy -vbsf h264_mp4toannexb 3.ts

9.3转成flv格式

(1)ffmpeg -i 1.mp4 -codec copy 1.flv

(2)ffmpeg -i 2.mp4 -codec copy 2.flv

(3)ffmpeg -i 3.mp4 -codec copy 3.flv

注意:分离某些封装格式(例如MP4/FLV/MKV等)中的H.264的时候,需要首先写入SPS和PPS,否则会导致分离出来的数据没有SPS、PPS而无法播放。H.264码流的SPS和PPS信息存储在AVCodecContext结构体的extradata中。需要使用ffmpeg中名称为“h264_mp4toannexb”的bitstream filter处理。

10.拼接文件

读一个文件列表,拼接可以不用重新编码。以MP4方式拼接,可能会出现问题。这里的拼接指的是把三个视频流拼接成一个流。

ts格式列表如下:

156617ce6d0f96d93c3c10c45394f7cd.png

以flv格式进行拼接。

flv格式列表如下:

91e8787db5f8eaea2ff4d3ad6b4a5a37.png

10.1 以MP4格式进行拼接

ffmpeg -f concat -i mp4list.txt -codec copy out_mp42.mp4

10.2 以TS格式进行拼接

(1):ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out_ts.mp4

(2):ffmpeg -f concat -i tslist.txt -codec copy out_ts2.mp4

10.3 以FLV格式进行拼接

(1):ffmpeg -i "concat:1.flv|2.flv|3.flv" -codec copy out_flv.mp4

(3):ffmpeg -f concat -i flvlist.txt -codec copy out_flv2.mp4

注意:方法1只适用部分封装格式,比如TS。

建议:

(1)使用方法2进行拼接

(2)转成TS格式再进行拼接

11 测试不同编码拼接

11.1 修改音频编码

(1)ffmpeg -i 2.mp4 -vcodec copy -acodec ac3 -vbsf h264_mp4toannexb 2.ts

(2)ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out1.mp4

经过测试,结果第二段没有声音。

11.2 修改音频采样率

(1)ffmpeg -i 2.mp4 -vcodec copy -acodec aac -ar 96000 -vbsf h264_mp4toannexb 2.ts

(2)ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out2.mp4

经过测试,第二段播放异常

11.3 修改视频编码格式

(1)ffmpeg -i 1.mp4 -acodec copy -vcodec libx265 1.ts

(2)ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out3.mp4

11.4 修改视频分辨率

(1)ffmpeg -i 1.mp4 -acodec copy -vcodec libx264 -s 800x472 -vbsf h264_mp4toannexb 1.ts

(2)ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out4.mp4

注意:根据测试,最好是把每个视频封装格式也统一为ts,拼接输出的时候再输出你需要的封装格式,比如MP4。视频分辨率可以不同,但是编码格式需要统一。音频编码格式需要统一,音频参数(采样率/声道等)也需要统一。

12.测试图片和视频转换

从视频中截取一张图片,如下命令:

12.1 截取jpg图片

(1)ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.jpg

(2)ffmpeg -i test.mp4 -t 5 -s 640x360 -r 15 frame%03d.jpg

12.2 截取bmp图片

ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.bmp

注意:-i 输入 ,-y 覆盖之前的图片,-f 像素格式,image2表示图像格式,-ss 表示时间起始值,-vframes表示输出图片张数,输出加%03d ,test%03d.jpg。-s 表示格式大小size。结果如下图:

10176eeb1c3dba1adab7d9e44210f073.png

12.3 图片转换成视频

(1)ffmpeg -f image2 -i frame%03d.jpg -r 25 video.mp4

结果如下:

bf7c03489c701b28bf54ab8e3a83d066.png
682b78c96f65b1018806f6ac5c285b41.png

12.4 视频中生成GIF图片

(1)ffmpeg -i test.mp4 -t 5 -r 1 image1.gif

(2)ffmpeg -i test.mp4 -t 5 -r 25 -s 640x360 image2.gif

12.5 将 GIF 转化为 视频

(1)ffmpeg -f gif -i image2.gif image2.mp4

13.总结

本文讲解了ffmpeg对如何拼接,如何转换图片和动图,能够更好的理解,ffmpeg这个功能。欢迎关注,收藏,转发,分享。

后期关于项目知识,也会更新在微信公众号“记录世界 from antonio”,欢迎关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值