《FFmpeg从入门到精通》读书笔记(六)

写在前面

2019.06.25

第六章 FFmpeg滤镜使用( 6.6 至结束)


FFmpeg音频音量探测
音频音量获得

FFmpeg可以获取到音频的音量分贝、音频相关信息等,使用滤镜volumedetect获得

ffmpeg -i output.wav -filter_complex volumedetect -c:v copy -f null /dev/null

在这里插入图片描述

上图中,获得的音频的平均大小mean_volume: -55.5 dB

绘制音频波形

声音分贝增大,波形波动越强烈,可以通过showwavespic滤镜来绘制音频的波形图

ffmpeg -i output.wav -filter_complex "showwavespic=s=640*120" -frames:v 1 output.png

在这里插入图片描述
在这里插入图片描述

如果希望看到每个声道的音频的波形图,可以使用showwavepic和split_channels滤镜配合

ffmpeg -i test.wav -filter_complex "showwavespic=s=640*120:split_channels=1" -frames:v 1 output2.png

在这里插入图片描述
在这里插入图片描述


FFmpeg为视频加字幕

添加字幕方式大致分为两种:

将字幕编码进视频流中,与视频加水印相似
在封装容器中加入视频流

知识点:ASS字幕和SRT字幕的区别
1、功能不同
SRT字幕是简单的纯文本字幕,无法使用其他高级功能如特效字体。
ASS字幕则属于高级字幕,可以制作出华丽的特效字幕。
2、制作方法不同
SRT字幕的制作方法较简单,一行字幕序号,一行时间代码和一行字幕数据就能完成了。
ASS字幕由于功能更加高级,因此需要采用SSA V4+脚本语言编写。
3、存储空间不同
同样一部电影,SRT字幕是纯文本字幕,所以体积较小,不用占用很多存储空间。
ASS字幕由于添加了特效等功能,体积自然也就大,所需存储空间也就比SRT多。

ASS字幕
在这里插入图片描述

SRT字幕
在这里插入图片描述

ASS字幕流写入视频流

将视频流解码,通过ASS滤镜将ASS字幕写入视频流,编码压缩后进行封装

ffmpeg -i input1.mp4 -vf ass=zimuass.ass -strict -2 -f mp4 output21.mp4

在这里插入图片描述
在这里插入图片描述

ASS字幕流写入封装容器
ffmpeg -i intput1.mp4 -i zimuass.ass -acodec copy -vcodec copy -acodec copy output.mkv

在这里插入图片描述
在这里插入图片描述

命令执行后,会将input1.mp4中的音频流、视频流、zimuass.ass中的字幕流在不改变编码的情况下封装入output.mkv。如果输入视频文件中原文带有字幕流,而我想使用自己的字幕流时,可以通过map功能,例如:

// 将第一个输入文件的第一个流和第二个流,与第二个输入文件的第一个流,写入output2.mkv
ffmpeg -i output.mkv -i zimu2.ass -map 0:0 -map 0:1 -map 1:0 -acodec copy -vcodec copy -acodec copy output2.mkv

在这里插入图片描述
在这里插入图片描述


FFmpeg视频抠图合并

FFmpeg可以通过chromakey操作,进行视频抠图与背景视频的合并

chromakey参数(书 P205)

参数类型说明
colorcolor设置chromakey颜色值,默认为黑色
similarityfloat设置chromakey相似值
blendfloat设置chromakey融合值
yuvbooleanyuv替代rgb,默认为false
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[1:v]chromakey=Green:0.1:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output22.mp4 

Note:这部分需要FFmpeg版本为3.0及以上,因为chromakey的支持在3.0才加进去,否则会报“No such filter: ‘chromakey’”错误。chromakey filter #388
FFmpeg中除了有chromakey滤镜外,还有一个colorkey参数。chromakey滤镜主要处理YUV数据,做绿幕更加有优势;colorkey处理纯色均可以,因为主要以RGB为主。
在这里插入图片描述

在这里插入图片描述


FFmpeg 3D视频处理

VR推出,需要对视频进行处理,调整为左右眼状态; 如果是红蓝眼镜3D视频,同样可以调整为左右眼视频,或是将左右眼视频调整为红蓝眼镜视频

stereo3d处理3D视频 参数(书 P206-207)
在这里插入图片描述
在这里插入图片描述

// 将左右排列效果合并为黄蓝合并排列效果
ffplay -vf "stereo3d=sbs1:aybd" input.mp4
// 左右转换为红蓝排列效果
ffplay -vf "stereo3d=sbs1:arbd" input.mp4

因为我没有这种3D的视频,所以就把命令贴出来了。。我想用我之前操作的input1.mp4试一下,结果报出Error initializing filter ‘stereo3d’ with args ‘sbs1:aybd’,感兴趣的同学可以自行试一下~


FFmpeg定时视频截图

视频播放时,将鼠标移动到进度条上时,播放器中会弹出一个与进度条的进度相对应的缩略图,这就用到了截图的功能。
使用FFmpeg截图的方法有很多种,常用的是使用vframe参数与fps滤镜。

vframe参数截图

ffmpeg -i input1.mp4 -ss 00:00:3.345 -vframes 1 out.png

在这里插入图片描述
在这里插入图片描述

fps滤镜定时获得图片

在直播场景中,需要定义每隔一段事件就从视频中截取图像生成图片来作为缩略图等

// 每隔一秒生成一张png图片
ffmpeg -i input.flv -vf fps=1 out%d.png
// 每隔一分钟生成一张png图片
ffmpeg -i input.flv -vf fps=1/60 out%d.png
// 每隔十分钟生成一张png图片
ffmpeg -i input.flv -vf fps=1/600 out%d.png
// 使用select,按照关键帧截图图片
ffmpeg -i input.flv -vf "select='eq(pict_type,PICT_TYPE_I)' " -vsync vfr thumb%04d.png

FFmpeg对音视频的倍速处理

对音视频的倍速处理包含跳帧播放和不跳帧播放,但是跳帧播放的用户体验稍差一些

atempo音频倍速处理

该滤镜只有一个参数tempo,float型,取值范围为0.5到2。

// 半速处理
ffmpeg -i input.wav -filter_complex "atempo=tempo=0.5" -acodec aac output.aac
// 2倍速处理
ffmpeg -i input.wav -filter_complex "atempo=tempo=2" -acodec aac output.aac

在这里插入图片描述

setpts视频倍速处理

该滤镜只有一个参数expr,用来描述视频的每一帧的时间戳

说明
FRAME_RATE根据帧率设置帧率值,只用于固定帧率
PTS输入的pts时间戳
RTCTIME使用RTC的时间作为时间戳
TB输入的时间戳的时间基
// 半速处理
ffmpeg -re -i input1.mp4 -filter_complex "setpts=PTS*2" output23.mp4
// 2倍速处理
ffmpeg -re -i input1.mp4 -filter_complex "setpts=PTS/2" output23.mp4

在这里插入图片描述
在这里插入图片描述

如上图,时长从15s变成了30s。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值