Mac OS中利用ffmpeg爲視頻添加字幕

Mac系統下,利用ffmpeg加字幕

字幕類型

  • 硬字幕,類似視頻水印,作爲視頻的一部分內嵌了。
  • 軟字幕,封裝字幕,也是內嵌到視頻裏,不過只是作爲渲染,而且需要播放器支持纔行。
  • 外掛字幕,就是外部字幕文件,可以允許自行選用。

常見字幕格式

  • srt,標準外掛字幕格式。這是最簡單的,普通文本格式即可
  • ass,高級外掛字幕格式。支持定義樣式、字體、位置、特效等功能。

利用ffmpeg添加字幕

首先安裝/升級ffmpeg。我是mac系統,執行下面命令可以就可以安裝ffmpeg了

brew install ffmpeg

或者直接升級

brew upgrade ffmpeg

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

[email protected]> 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

製作外掛字幕

首先編輯一個標準字幕文檔,純文本格式即可,例如

[email protected]> cat 001.srt

1
00:00:01,000 --> 00:00:02,000
大家好,我是葉金榮,這是第一條字幕

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

然後利用ffmpeg製作一個高級外掛字幕,生成ass格式的文件

[email protected]> ffmpeg -i 001.srt -y 001.ass

我們來看下高級字幕文件的內容

[email protected]> 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         垂直距離

好了,製作完字幕文件,我們可以往視頻文件中添加字幕併合成新視頻了。

添加軟字幕

執行下面的命令即可

[email protected]> ffmpeg -i 01.mp4 -i 01.ass -c copy -y 001.mp4

因爲是添加軟字幕,無需重新編輯每幀視頻內容,所以速度非常快。

添加硬字幕

如果是要把視頻發佈到一些線上平臺,則最好是添加硬字幕。執行下面的命令即可

[email protected]> ffmpeg -i 01.mp4 -vf subtitles=01.srt -y 001.mp4
#或者
[email protected]> 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致敬,非常感謝他們無私地提供了這麼好的軟件。




本文分享自微信公衆號 - 老葉茶館(iMySQL_WX)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章