(原)使用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调用了文 ...
随机推荐
- ELK快速入门(三)logstash收集日志写入redis
ELK快速入门三-logstash收集日志写入redis 用一台服务器部署redis服务,专门用于日志缓存使用,一般用于web服务器产生大量日志的场景. 这里是使用一台专门用于部署redis ,一台专 ...
- async和await执行顺序
关于执行顺序和线程ID,写了一个小程序来检测学习: using System; using System.Net; using System.Threading; using System.Threa ...
- V-rep(1)
第一次课堂作业,需要导入网格三维模型,对齐坐标系,然后在各个关节添加jiont,实现外观模型和运动仿真模型的分离. 1.首先导入模型.导入模型可能是一个整体模型(装配好的),也可能是单个(mesh)网 ...
- python 实现 AES ECB模式加解密
AES ECB模式加解密使用cryptopp完成AES的ECB模式进行加解密. AES加密数据块分组长度必须为128比特,密钥长度可以是128比特.192比特.256比特中的任意一个.(8比特 == ...
- A and B and Lecture Rooms(LCA)
题目描述 A and B are preparing themselves for programming contests. The University where A and B study i ...
- JVM 性能调优工具
jdk自带的工具,在macOs系统中的目录位置(jdk具体版本位置要替换):/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Ho ...
- python 使用 requests 做 http 请求
1. get import requests # 最简单的get请求 r = requests.get(url) print(r.status_code) print(r.json()) # url ...
- VoIP基本原理
VoIP基本原理 VoIP是通过Internet等互联网络传递语音信息的,主要包括终端设备.网关.网守和网络管理等部分.网关负责提供IP网络和传统的PSTN接口. VoIP的基本原理:通过语音压缩算法 ...
- Excel——读取文件后——组装成待插入数据库数据——实体映射模式
package com.it.excel.excelLearn; import java.io.IOException; import java.util.HashMap; import java.u ...
- 【每天学一点Linux】centos7 docker 启动cpu100% 飙升居高不下 无法关机 无法杀死进程
目前不知道什么原因. 重装了docker后仍然不行.安装方式为yum(在线和本地方式). 后来使用了下载static压缩包的方式来使用,就没有再出现如题的问题了.安装包地址为:https://down ...