手机怎么把srt字幕嵌入视频

手机怎么把srt字幕嵌入视频,第1张

工具/原料:戴尔xps15、windows10专业版、剪映电脑专业版V3.0.0

1、打开剪映软件,点击“开始创作”按钮新建一个项目。

2、点击“导入”按钮,把视频文件导入软件。

3、点击视频素材上的【+】按钮,把素材加入轨道。

4、点击进入“文本”界面,再点击“本地字幕”按钮。

5、点击“导入”按钮,选择准备好的字幕文件。

6、导入完成后,点击字幕上的【+】按钮,就可以把字幕加到视频轨道上了。

在视频功能里,一般对视频加文字是使用AVMutableVideoComposition加载一层文字图层,但是想要对一个视频嵌入一个srt文件中的所有字幕呢?

难点是一个srt文件中,每一段文字都有一个时间节点,需要解析时间节点把文字嵌入到视频中。

第一种方式:

AVAssetReader+AVAssetWriter

这两个对象都是AVFoundation中的,通过它们可以对视频解码生成CMSampleBufferRef对象,这个对象包含了视频,音频中每一片流中的信息,并且可以转换成UIImage单独对流 *** 作,可以对视频、音频文件重新编码:码率、帧率、分辨率、比特率、声道等。

AVAssetReader读取视频中的appendPixelBuffer,把它转换为UIImage,根据时间节点把字幕嵌入到UIImage中,这样一张图片就有了文字,然后再转换回CVPixelBufferRef,再用AVAssetWriterInputPixelBufferAdaptor的appendPixelBuffer方法写入一个新的视频流文件中,最终生成一个带有字幕的视频。

缺点:耗时久,cpu加载过高,把控好内存泄漏。

还有一个坑点,因为视频中可能会有旋转角度,比方说我使用8P拍的竖屏视频,再使用AVAssetReader解码的时候,解出来的CMSampleBufferRef都会旋转90度,所以需要对AVAssetWriterInput对象中的transform赋值,但是这种方式是在输出的时候对流旋转,在现在的字幕的方案的流程是

CMSampleBufferRef转换UIImage、

UIImage写文字、

UIImage转换CVPixelBufferRef。

所以需要改为:

CMSampleBufferRef转换UIImage,UIImage旋转90度

UIImage写文字,UIImage旋转回去、

UIImage转换CVPixelBufferRef。

效果图

AVAssetReader读取类:

AVAssetWriter写入类:

使用它们嵌入字幕

附带srt文件解析

GitHub链接:

https://github.com/qw9685/srt-.git

另一种方式嵌入字幕,提高性能: https://www.jianshu.com/p/e372a7b98b29


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8138398.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存