Mac OS中利用ffmpeg为视频添加字幕
Mac系统下,利用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.srt1
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字幕文件,看个人喜好自己选择了。
参考文章
https://ffmpeg.org/documentation.html
https://my.oschina.net/u/4383937/blog/4548619
https://www.jianshu.com/p/f33910818a1c
最后要向ffmpeg项目https://github.com/FFmpeg/FFmpeg致敬,非常感谢他们无私地提供了这么好的软件。
Mac OS中利用ffmpeg为视频添加字幕相关推荐
- Windows下使用ffmpeg为视频添加字幕
字幕分以下几种形式: 第一种是外挂字幕(软字幕),视频文件和字幕文件分离.当播放某视频文件时,会自动载入相同文件夹下同名的字幕文件,当然也可以用播放器(如:VLC media player)手动载入字 ...
- 安卓使用ffmpeg给视频添加字幕
包含添加字幕能力的ffmpeg和相关so编译 需要下载的源码 https://github.com/tanersener/mobile-ffmpeg https://github.com/taners ...
- ffmpeg 合并视频 添加字幕 bat命令
首先将ffmpeg添加进系统环境变量 1.mp4转mkv for %%a in ("*.mp4") do ffmpeg -i %%~na.mp4 -vcodec copy -aco ...
- PHP中利用Ffmpeg获得flv视频缩略图和播放时间
为什么80%的码农都做不了架构师?>>> 这里简单说一下:FFmpeg是用于录制.转换和流化音频和视频的完整解决方案,一套领先的音/视频编解码类库.官方正式版ffmpeg不支持 ...
- ffmpeg php 快速播放,怎么在PHP中利用FFmpeg函数对视频播放的时长进行获取
怎么在PHP中利用FFmpeg函数对视频播放的时长进行获取 发布时间:2020-12-18 16:02:20 来源:亿速云 阅读:96 作者:Leah 这篇文章给大家介绍怎么在PHP中利用FFmpeg ...
- ffmpeg给视频添加时间水印
ffmpeg给视频添加时间水印 通过 drawtext 滤镜模块给视频添加时间水印 给视频添加时间水印 用来做片源调试,非常方便的查找和定位处理的哪一帧视频片源: 1. 添加本地时间水印 ffmpeg ...
- 利用FFmpeg制作视频序列
前言 本文介绍了利用FFmpeg进行视频测试序列制作的方法.所谓测试序列就是将若干个不同场景的视频片段,按照不同的分辨率.码率.编码方法等进行处理,然后拼接成一条长视频,供测试者打分.一般包括以下几个 ...
- java操作ffmpeg为视频添加背景音乐
最近学习仿抖音微信小程序遇到一个坑,视频中使用以下语句为视频添加背景音乐 ffmpeg.exe -i input.mp4 -i 音乐.mp3 -t 7 -y 新视频.mp4 ,然而我怎么尝试都不行,上 ...
- ffmpeg给视频添加文本
1. 给视频添加文本 给视频添加文本有两种通常做法,一种是使用字幕实现,一种是使用overlay滤镜实现.但下面是通过使用drawtext滤镜,更高级的做法实现. 格式:ffmpeg -i inp ...
最新文章
- Java实现队列 链式存储结构
- 埃拉托斯特尼筛法(埃筛)
- 零基础学Java的书籍,值得收藏
- MySQL的explain工具介绍
- [zz] 使用ssh公钥密钥自动登陆linux服务器
- 山东大学网络教育计算机基础考试题,山东大学网络教育计算机网络基础期末考试复习...
- 匿名管道 阻塞_进程间通信-管道
- 使用Flask-Migrate进行管理数据库升级
- img atl和a title
- 【HDU1166】敌兵布阵(树状数组或线段树)
- VUE页面中加载外部HTML
- 7、乐趣国学—趣谈“圣贤”
- netty和dubbo的hashwheel时间轮定时器原理和源码解析
- java数组里的索引越界问题、空指针异常问题
- matlab多行注释
- MPB:南农韦中组-​根际细菌群落资源利用网络的研究方法
- 20952磁盘存储器的管理
- 【CodingNoBorder - 07】无际软工队 - 求职岛:ALPHA 阶段测试报告
- 关于触摸屏的一些硬件知识
- RPA流程调试:准确定位错误原因及位置