使用ass字幕文件經過ffmpeg給視頻添加字幕的一些研究html
Author:lihaiping1603@aliyun.comide
Create:2019-09-04測試
最近對ffmpeg給視頻文件添加字幕效果,進行了一些調試和研究,我的作個筆記,方便之後查找和使用。編碼
將字幕加入到視頻文件中,有兩種方式:spa
1)第一種是將字幕以除了音視頻以外的字幕流的形式添加到視頻文件格式中,而後播放器在播放這個視頻文件的時候,就能夠顯示相應的字幕效果了,該方式對於已經存在的視頻文件,能夠不用對音視頻進行轉碼,速度和效率較高,但缺陷是對於一些格式不支持一些字幕編碼格式,例如mp4不支持ass編碼格式字幕流,而mkv支持。因此對於mkv格式的視頻文件,咱們能夠利用以下的命令方式直接添加字幕流:.net
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.mp4code
3) 同時這裏介紹一下aas格式中的一些不是特別好理解的東西(相關基礎資料能夠參考:orm
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.2 ; http://www.aegisub.org/ Title: YYeTs ; Original Script: YYeTs Synch Point: 0 ScriptType: v4.00+ Timer: 100.0000 ScaledBorderAndShadow: no YCbCr Matrix: TV.601 WrapStyle: 0 [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,20,&H00F83C4A,&H00000000,&H00442121,&H00000000,0,0,0,0,100,100,0,0,1,1,1,2,5,5,2,134 [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:11.04,*Default,NTP,0,0,0,,{\an5\pos(0,0)}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