Mac OS中利用ffmpeg为视频添加字幕

简介: Mac OS中利用ffmpeg为视频添加字幕

字幕类型

  • 硬字幕,类似视频水印,作为视频的一部分内嵌了。
  • 软字幕,封装字幕,也是内嵌到视频里,不过只是作为渲染,而且需要播放器支持才行。
  • 外挂字幕,就是外部字幕文件,可以允许自行选用。

常见字幕格式

  • srt,标准外挂字幕格式。这是最简单的,普通文本格式即可
  • ass,高级外挂字幕格式。支持定义样式、字体、位置、特效等功能。

利用ffmpeg添加字幕

首先安装/升级ffmpeg。我是mac系统,执行下面命令可以就可以安装ffmpeg了

brew install ffmpeg

或者直接升级

brew upgrade ffmpeg

我安装的版本是4.3.1,支持ass字幕格式。

yejr@yejr.run> ffmpeg -version

ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
built with Apple clang version 12.0.0 (clang-1200.0.32.28)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.3.1_8 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100

制作外挂字幕

首先编辑一个标准字幕文档,纯文本格式即可,例如

yejr@yejr.run> cat 001.srt

1
00:00:01,000 --> 00:00:02,000
大家好,我是叶金荣,这是第一条字幕

2
00:00:02,000 --> 00:00:05,000
本次我想和大家分享利用ffmpeg制作字幕的方法

然后利用ffmpeg制作一个高级外挂字幕,生成ass格式的文件

yejr@yejr.run> ffmpeg -i 001.srt -y 001.ass

我们来看下高级字幕文件的内容

yejr@yejr.run> cat 001.ass

[Script Info]
; Script generated by FFmpeg/Lavc58.91.100
ScriptType: v4.00+
PlayResX: 384
PlayResY: 288
ScaledBorderAndShadow: yes

[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,Arial,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,10,0

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:02.00,Default,,0,0,0,,大家好,我是叶金荣,这是第一条字幕
Dialogue: 0,0:00:02.00,0:00:05.00,Default,,0,0,0,,本次我想和大家分享利用ffmpeg制作字幕的方法

其中在 "[V4+ Styles]"这部分作用域里,可以定义关于字幕的各个属性,各定义域的作用分别如下:

01.Name             风格(Style)的名称,区分大小写,不能包含逗号。例如 Default
02.Fontname 使用的字体名称,区分大小写。例如 Arial
03.Fontsize 字体的字号,一般16号就可以
04.PrimaryColour 设置主要颜色, 为蓝-绿-红三色的十六进制代码相排列, BBGGRR. 为字幕填充颜色,例如 &Hffffff
05.SecondaryColour 设置次要颜色, 为蓝-绿-红三色的十六进制代码相排列, BBGGRR. 在卡拉OK效果中由次要颜色变为主要颜色.
06.OutlineColour 设置轮廓颜色, 为蓝-绿-红三色的十六进制代码相排列, BBGGRR.
07.BackColour 设置阴影颜色, 为蓝-绿-红三色的十六进制代码相排列, BBGGRR. ASS的这些字段还包含了alpha通道信息. (AABBGGRR), 注ASS的颜色代码要在前面加上&H
08.Bold -1为粗体, 0为常规
09.Italic -1为斜体, 0为常规
10.Underline [-1 或者 0] 下划线
11.Strikeout [-1 或者 0] 中划线/删除线
12.ScaleX 修改文字的宽度,为百分数,例如 100
13.ScaleY 修改文字的高度,为百分数
14.Spacing 文字间的额外间隙. 为像素数
15.Angle 按Z轴进行旋转的度数, 原点由alignment进行了定义. 可以为小数
16.BorderStyle 1=边框+阴影, 3=纯色背景. 当值为3时, 文字下方为轮廓颜色的背景, 最下方为阴影颜色背景.
17.Outline 当BorderStyle为1时, 该值定义文字轮廓宽度, 为像素数, 常见有0, 1, 2, 3, 4.
18.Shadow 当BorderStyle为1时, 该值定义阴影的深度, 为像素数, 常见有0, 1, 2, 3, 4.
19.Alignment 定义字幕的位置. 字幕在下方时, 1=左对齐, 2=居中, 3=右对齐. 1, 2, 3加上4后字幕出现在屏幕上方. 1, 2, 3加上8后字幕出现在屏幕中间. 例: 11=屏幕中间右对齐. Alignment对于ASS字幕而言, 字幕的位置与小键盘数字对应的位置相同.
20.MarginL 字幕可出现区域与左边缘的距离, 为像素数
21.MarginR 字幕可出现区域与右边缘的距离, 为像素数
22.MarginV 垂直距离

好了,制作完字幕文件,我们可以往视频文件中添加字幕并合成新视频了。

添加软字幕

执行下面的命令即可

yejr@yejr.run> ffmpeg -i 01.mp4 -i 01.ass -c copy -y 001.mp4

因为是添加软字幕,无需重新编辑每帧视频内容,所以速度非常快。

添加硬字幕

如果是要把视频发布到一些线上平台,则最好是添加硬字幕。执行下面的命令即可

yejr@yejr.run> ffmpeg -i 01.mp4 -vf subtitles=01.srt -y 001.mp4
#或者
yejr@yejr.run> ffmpeg -i 01.mp4 -vf ass=01.ass -y 001.mp4

srt或ass字幕文件,看个人喜好自己选择了。

            </div>
相关文章
|
SQL 关系型数据库 MySQL
IDEA自带的数据库插件,真香
最近阿粉的一个读者问阿粉,说进了一个公司,但是是外包身份进入的,而且甲方公司要求不能在电脑上装一些破解的,盗版的软件,只要发现就能扫描到并且被删除。而且还没有提供正版的软件的激活码,就问阿粉,说有没有什么类似Navicat 一样的工具,又强大,又好用的。
3728 0
IDEA自带的数据库插件,真香
|
8月前
|
安全 物联网 数据建模
SSL证书:网络安全的重要基石
在数字化时代,数据安全与隐私保护至关重要。SSL证书作为一种关键网络安全技术,通过加密和认证确保通信安全。本文从定义、工作原理、类型、应用场景到选择与维护全面解析SSL证书。其类型包括DV、OV和EV,广泛应用于电商、金融、政府及物联网等领域。选择时需明确需求、信赖CA,并关注成本与服务。及时更新证书,保障持续安全。SSL证书是守护网络安全的重要工具,对提升信任度和满足合规性意义重大。
|
9月前
|
存储 人工智能 算法
Magic 1-For-1:北大联合英伟达推出的高质量视频生成量化模型,支持在消费级GPU上快速生成
北京大学、Hedra Inc. 和 Nvidia 联合推出的 Magic 1-For-1 模型,优化内存消耗和推理延迟,快速生成高质量视频片段。
463 3
Magic 1-For-1:北大联合英伟达推出的高质量视频生成量化模型,支持在消费级GPU上快速生成
|
11月前
|
机器学习/深度学习 编解码 物联网
极致的显存管理!6G显存运行混元Video模型
混元 Video 模型自发布以来,已成为目前效果最好的开源文生视频模型,然而,这个模型极为高昂的硬件需求让大多数玩家望而却步。魔搭社区的开源项目 DiffSynth-Studio 近期为混元 Video 模型提供了更高效的显存管理的支持,目前已支持使用24G显存进行无任何质量损失的视频生成,并在极致情况下,用低至 6G 的显存运行混元 Video 模型!
917 13
|
供应链 搜索推荐 数据挖掘
探索增强现实(AR)在零售业的应用
【5月更文挑战第12天】本文探讨了AR技术如何革新零售业,包括虚拟试衣间提升购物效率、产品信息展示增强认知、导航导购优化购物体验及互动营销增加用户粘性。AR技术能提升消费者体验,提高零售业效率,并增强品牌竞争力。随着AR的发展,零售业将迎来更多创新应用。
|
机器学习/深度学习 负载均衡 算法
训练Backbone你还用EMA?ViT训练的大杀器EWA升级来袭
训练Backbone你还用EMA?ViT训练的大杀器EWA升级来袭
452 1
Keil uVision5软件的操作与编写基础(入门)
一、如何新建一个空白文档 1.打开Keil uVision5,将会出现工作界面。如图所示: 2.点击【project】选项,再去点击【New uVision project...】选项。如图所示: 打开之后,会弹出一个界面。这时我们点击【新建文件夹】,我们先将新建的文件夹重命名为001. 打开001这个文件夹,并且将文件名命名为002。如图所示: 此时会弹出一个新界面Select Device for Target 'Target 1',这时候我们选择下图中的Atmel,然后再去找到AT89C51。 3.点击工作界面左上角的白色小纸(New),如图所示: 4. 然后保存这个文档,点击左上角的
2271 0
Keil uVision5软件的操作与编写基础(入门)
|
安全 开发工具 数据安全/隐私保护
MacOS安装FFmpeg
MacOS安装FFmpeg
10554 58
|
存储 数据可视化 数据挖掘
如何为多个变量绘制联合分布图(pairplot)?
本文介绍基于Python中seaborn模块,实现联合分布图绘制的方法~
722 1
如何为多个变量绘制联合分布图(pairplot)?