Short-notes on Add subtitle to any video with ffmpeg

บางทีเวลาทำ VDO ประกอบ presentation หรือ document นี่ก็จะมีความอยากใส่ subtitle เพื่อที่จะได้ให้คำอธิบายแบบละเอียดๆ เคลียร์ๆ และไม่ต้องมาซ้ำอธิบายหลายๆครั้ง วันนี้พอทำ VDO อันที่ 2/3 นี่แหละก็ลืมไปแล้วว่าครั้งที่แล้วทำยังไงเลยเขียน blog เผื่อไว้กลับมาอ่านวันหลัง

ขั้นตอนที่ 1 คือเตรียม file subtitle (.srt) ซึ่งก็มี format ง่ายๆแบบนี้คือ

[sequence]
[hh:mm:ss,ms] --> [hh:mm:ss,ms] อันนี้คือ marker ว่าจากเวลาไหนถึงเวลาไหน
[Text]
[newline]
[newline]

ซึ่งถ้าทำตัวอย่าง ให้ดูก็จะประมาณนี้

1
00:00:01,000 --> 00:00:11,000
Subtitle 1

2
00:00:11,18,367 --> 00:00:18,000
Subtitle 2

3
00:00:18,18,367 --> 00:00:27,000
Subtitle 3

4
00:00:27,000 --> 00:00:38,000
Subtitle 4

5
00:00:38,000 --> 00:01:04,000
Subtitle 5

ขั้นตอนที่ 2 คือแปลงไฟล์ .srt ไปเป็น .ass เพราะปกติผมทำวิดีโอด้วย mp4 และผมใช้ libass สำหรับเป็น container ของ codec นะครับ

ffmpeg -i original.srt subtitle.ass

หลังจากนั้นก็ทำการ modify VDO ด้วย ffmpeg โดยให้ใส่ subtitle ด้วย libass ดังนี้

ffmpeg -i input.mp4 -vf ass=subtitle.ass output_w_sub.mp4

สำหรับใครที่ทำไม่ได้เพราะ ffmpeg ไม่ได้ enable options บางอัน อันนี้เป็น command ที่ผมลง ffmpeg แบบ all avialable options เลยทีเดียว

brew install ffmpeg $(brew options ffmpeg | grep -vE '\s' | grep -- '--with-' | tr '\n' ' ')

ทีนี้ก็จะได้ VDO + subtitle สวยงามกันแล้วนะครับ #HappyXMas ครับ