使用FFMPEG加载外挂或内封字幕小记

news2024/11/20 19:29:27

ffmpeg版本: FFMEPEG 4.4

继上一篇实现音视频播放器后,将加载字幕的过程和遇到的坑记录如下:

字幕初识

视频字幕分为三种。

内嵌字幕,字幕与视频图像合二为一,成为视频帧的一部分,也叫硬字幕

内封字幕,字幕封装在视频容器中,成为字幕流。软字幕。

外挂字幕,也就字幕文件,如ass,srt等。软字幕。

srt字幕(SubRip Subtitle)

是一种简单的字幕格式,主要由时间戳和文本组成。它通常用于简单的字幕文件,如电影聚会之类。SRT字幕格式的参数如下:

  • 标题的计数器/索引
  • START和END:字幕开始和字幕结束的时间戳,格式为 "小时:分钟:毫秒"。
  • TEXT:在此时间戳范围内显示的字幕文本
  • 一行空白表示一个结束
1
00:00:0,000 --> 00:00:2,000
这是0到2秒显示的字幕

2
00:00:2,000 --> 00:00:4,000 
这是2到4秒显示的字幕

3
00:00:4,000 --> 00:00:7,000
这是4到7秒显示的字幕

ass字幕(Advanced SubStation Alpha)

是一个高级的字幕格式,它可以支持更多的样式和控制,比如,更改颜色、字体和大小,还可以通过几何变换来控制字幕的位置。ASS字幕格式包含以下参数:

样式:

Style: 序号, 字体名称, 字号, 颜色, 阴影, 边框, 描边, 阴影, 抗锯齿, 倾斜度, weight, underline
例子:Style: Top, Microsoft YaHei,40,&H00F5FF&,-1,2,0,0,1,0,0

对齐:

Dialogue: 0,0:00:03.42,0:00:04.91,Top,,0,0,0,,{\an6}本字幕居右上

其中\an6表示右上角对齐,默认是左下角对齐。

 触发器:

Dialogue: 0,0:00:03.42,0:00:04.91,Top,,0,0,0,,{\t(0,300,\fade(400,400))}三秒内渐入渐出

其中\fade(400,400)表示透明度从0渐变到400再从400渐变到0。

动画:

Dialogue: 0,0:00:03.42,0:00:04.91,Top,,0,0,0,,{\move(0,0,100,100)}右下角移动

其中\move(0,0,100,100)表示从(0,0)移动到(100,100)。

特殊效果:

Dialogue: 0,0:00:03.42,0:00:05.62,Top,,0,0,0,,{\fad(500,500)\blur3}左右淡入淡出,模糊度3

其中\blur3表示模糊度为3。

加载字幕这里我们使用subtitles过滤器,它内部使用的是libass库,其他格式的字幕首先会被转换为ass格式,不用担心格式问题。首先我们看下subtitles过滤器的参数

ffmpeg -h filter=subtitles

filename, f 指定使用的字幕文件

stream_index, si  指定使用字幕流中的第几个流

如上图所示,视频文件中有3个字幕流

字幕提取

默认提取第一个字幕流

ffmpeg -i .\11间谍过家家.mkv  简中.ass

提取第二个字幕流

ffmpeg -i .\11间谍过家家.mkv -map 0:s:1  繁中.ass

提取第三个字幕流

ffmpeg -i .\11间谍过家家.mkv -map 0:s:2  日文.ass

格式转换

ffmpeg -i 日文.ass  日文.srt

字幕叠加

硬字幕编码

ffmpeg .\11间谍过家家.mkv -vf subtitles=简中.ass out.mkv

软字幕编码

将字幕文件01.ass 编码成字幕流到文件中(内封字幕

 ffmpeg -i .\beautlWorld.mp4 -i .\01.ass -c copy -c:s mov_text -metadata:s:s:0 language=chi
 ouptut_chi.mp4

注意:这里虽然将字幕加载到MP4文件中,但是兼容性不好

请使用MKV封装格式,该格式可封装各种格式的字幕,OGM格式只支持srt

 ffmpeg -i .\beautlWorld.mp4 -i .\01.ass -c copy -c:s ass -metadata:s:s:0 language=chi
 ouptut_chi.mkv

这里使用ass字幕编码器

 如上,字幕文件成了视频文件的内封字幕,视频文件时长1分03秒,字幕时长23分40秒

多通道内封字幕

将两个字幕文件添加到视频文件中

ffmpeg -i beautlWorld.mp4 -i 简中.ass -i 繁中.ass -map 0 -map 1 -map 2 -c copy -c:s ass -metadata:s:s:0 language=chi_eng -metadata:s:s:1 language=eng output_chi_双字幕.mkv

 

FFMPEG4.4支持的字幕编码器

  ffmpeg -encoders

程序加载外挂字幕

在代码中如果使用绝对路径有点区别,需要使用四个斜杆,具体形式如下:

char filterDesc[128];
	sprintf(filterDesc,"subtitles=filename='D\\:\\\\测试工程\\\\sound\\\\01.ass'");

程序加载内封字幕

内封字幕与外挂字幕很类似,字幕文件就是视频文件本身,如下代码中设置:

这是设置加载的字幕流为第二个字幕也就是繁体中文,默认是第一个

char filterDesc[128];
		sprintf(filterDesc, "subtitles=filename='D\\:\\\\工程\\\\音视频分析\\\\source\\\\11间谍过家家.mkv':stream_index=1");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/536769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库完整性

完整性概述 数据库的完整性是指数据库的正确性、一致性、相容性 正确性:数据库的数据符合语义约束 一致性:数据间的逻辑关系是正确的,从一个一致性状态转移到另一个一致性状态 相容性:同一事物的两个数据应当是一致的 约束的分类…

Zookeeper(一)

简介 设计模式角度 Zookeeper:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那…

JDBC从入门到精通

1 JDBC概述 在开发中我们使用的是java语言,那么势必要通过java语言操作数据库中的数据。这就是接下来要学习的JDBC。 1.1 JDBC概念 JDBC 就是使用Java语言操作关系型数据库的一套API 全称:( Java DataBase Connectivity ) Java 数据库连接 我们开发的同…

两年时间,成为测试组老大....

看到行业的前辈都分享一些过往的经历来指导我们这些测试人员,我很尊敬我们的行业前辈,没有他们在前面铺路,如今我们这帮年轻的测试人估计还在碰壁或摸着石头过河,结合前辈们的经验,作为年轻的测试人也有自己的一些职场…

IMX6ULL裸机篇之DDR3的时钟配置

一. MMDC 控制器 对于 I.MX6U 来说,有 DDR 内存控制器,否则的话它怎么连接 DDR 呢?MMDC控制器 就是 I.MX6U 的 DDR内存控制器。 MMDC 外设包含一个内核(MMDC_CORE)和 PHY(MMDC_PHY),内核和 PHY 的功能如下: MMDC 内…

nacos服务端源码集群同步源码分析

nacos集群状态同步源码分析 ServerStatusReporter ServerStatusReporter 是 ServerListManager的内部类 通过Component注解被解析到spring容器中 再通过PostConstruct初始化执行init方法 上边代码启动了一个延时2秒的线程 private class ServerStatusReporter implements Run…

信号时域分析方法

主要参考: 时域分析——有量纲特征值含义一网打尽 信号时域分析方法的理解(峰值因子、脉冲因子、裕度因子、峭度因子、波形因子和偏度等) 重要笔记如下: 建议跟参考笔记同步看。 有量纲特征值8个——最大值、最小值、峰峰值、均值…

Unable to resolve resource vscode-vfs://github%2B7b2276223a312c22726566223a7

github无法访问?vscode 无法使用github登录同步? 改 hosts 吧 Unable to resolve resource vscode-vfs://github%2B7b2276223a312c22726566223a7一、无法访问 github.com ? 想要去 github.com 上拿来主义,结果访问不了,或者 np…

Go基础篇:接口

目录 前言✨一、什么是接口?二、空接口 interface{}1、eface的定义2、需要注意的问题 三、非空接口1、iface的定义2、itab的定义3、itab缓存 前言✨ 前段时间忙着春招面试,现在也算告一段落,找到一家比较心仪的公司实习,开始慢慢回…

Linux防火墙之iptables(上)

目录 一、iptables防火墙的相关知识 1)防火墙的概念 2)iptables的简介 3)netfilter/iptables 的关系 netfilter iptables 二、iptables中的四表五链 1 )四表五链的关系 2)iptables中的四表 3&#xff0…

0基础要怎么开始学习c++?

先放一张学习线路图: 对于初学者看到这张线路图可能有点晕。实际上耐心一点,有足够的毅力还是可以自学攻克C这门语言的。 一、C语言 基础内容就是两块:基础语法和一个小游戏案例 进阶一点也是两块内容:C高级和数据结构。包括一…

怎么画骑鹅旅行记思维导图?办公常备工具

骑鹅旅行记不仅是一本神奇的奇幻童话,更是一本寓教于乐的启蒙读物,引导着孩子们学习正确的价值观和道德观。在开始制作骑鹅旅行记思维导图之前,我们需要先整理好故事情节:小男孩尼尔斯因捉弄动物而被一个小精灵变成了拇指大小&…

中国社科院与美国杜兰大学金融管理硕士——与时间赛跑,充分利用每一分钟

不管你愿不愿意,时间总是在不经意间流去。林清玄在《和时间赛跑》中写道:“虽然我知道人永远跑不过时间,但是可以比原来快跑几步。那几步虽然很小很小,但作用却很大很大”。是的,我们需要与时间赛跑,充分利…

就业内推 | 上市公司招网工,最高25k*14薪,六险一金

01 锐捷网络 招聘岗位:网络工程师 职责描述: 1、承接本产品线(无线或数通)所有咨询、故障、网络变更等业务,响应内外部客户的业务响应需求,需要值班。 2、同时作为产品线技术力的核心,需要负责…

购票API接口商品详情信息API

购票网是一个在线购票平台,为音乐会、演唱会、话剧、体育比赛等各类娱乐活动提供门票销售服务。通过大麦网,用户可以轻松购买心仪的演出门票,并享受到良好的购票体验。 为了让更多用户了解到大麦网的商品详情,并能够方便地获取相…

内防泄密重要,还是外防窃密重要?

内防泄密是组织为防止内部敏感信息未经授权泄露所采取的各种管理与技术措施的总称。它主要针对内部人员的信息访问与操作行为进行管控,减少故意或疏忽泄密事件的发生几率。 内防泄密的工作,通常包括员工管理、权限管控、监控检查、分级保护、离岗管控、技术防护、事…

高赞热门,这是B站值得一看的商单作品

3月30日、5月11日,第十届中国网络视听大会和首届上海网络视听内容创作者大会先后开幕。 在现场,陈睿共发表了《科技与青年的双向奔赴》、《B站,高质量内容的沃土》两次主题演讲。陈睿分享道,“优质的内容和创作者,是能…

主动防御更安全 混沌工程助力企业系统稳定

数字经济时代背景下,各个行业迎来数字化转型浪潮,随着企业对于云计算的理解和实践不断深入,数据作为生产要素参与到市场分配当中,全面渗透金融、政务、医疗、教育、能源等各个领域,已成为企业发展乃至国家发展的重要战…

GPU机器docker环境离线安装

秋风阁(https://focus-wind.com/) 文章目录 docker 环境离线二进制安装下载二进制包解压.tgz包迁移文件到/usr/bin/目录下启动docker手动启动dockersystemctl启动dockerdocker.servicedocker.socketcontainerd.service设置开机重启启动docker服务 离线安装nvidia-docker&#x…

GPT逆向:高效解读小红书文案生成器的内部逻辑

文章目录 前言一、什么是小红书文案生成器二、具体步骤总结 前言 关注我的很多同学都会写爬虫。但如果想把爬虫写得好,那一定要掌握一些逆向技术,对网页的JavaScript和安卓App进行逆向,从而突破签名或者绕过反爬虫限制。 最近半年&#xff…