1. 유튜브 등에서 영상에 대한 자막을 다운로드합니다.(다운받은 자막은 개인적인 용도로만 사용할 것!)
https://downsub.com/
위 사이트에 유튜브 주소를 붙여넣고 언어를 선택해서 다운로드 받습니다.
.SRT자막은 텍스트파일로 일반적으로 아래와 같은 형식입니다.
1
00:00:11,626 --> 00:00:15,470
불꺼진 romantic all my life
2
00:00:15,837 --> 00:00:19,376
내 주위는 온통 lovely day
3
00:00:19,673 --> 00:00:23,813
내 눈 속에 비친 arrow sign
2. 파워포인트에 유튜브 영상 등을 다운로드 받아 삽입합니다. (다운받은 영상은 개인적인 용도로만 사용할 것!)
youtube.com/1234abcd 를 youtubepp.com/1234abcd 로 접속해서 해상도를 골라서 다운로드 합니다.
3. 비디오를 삽입하고 Alt-F10누르고 영상의 이름은 Media 1 로 하고 자동재생 설정합니다.
나중에 자동재생 설정하면 자막 애니메이션보다 영상이 나중에 시작해서 책갈피가 작동하지 않습니다.
4. Alt-F11 창에 모듈을 추가하고 아래코드를 넣고 실행합니다.
'//convert .SRT subtitles to audio/video bookmarked Powerpoint animations
Sub SRT2BookmarkedAnimations()
Dim pres As Presentation
Dim handle As Integer
Dim srtFile As String
Dim Lines() As String, buffer As String
Dim l As Integer, p As Integer, SW!, SH!
Dim pStart As String, pEnd As String, dur As Long
Dim sld As Slide, media As Shape, eft As Effect, shp As Shape
Dim bmark As MediaBookmark
Set pres = ActivePresentation
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Choose a .SRT file"
.Filters.Clear
.Filters.Add "SRT subtitle file", "*.srt"
.InitialFileName = pres.Path & "\"
.AllowMultiSelect = False
If .Show = -1 Then srtFile = .SelectedItems(1)
End With
If srtFile = "" Then Exit Sub
handle = FreeFile
Open srtFile For Input As #handle
Do Until EOF(handle)
Line Input #handle, buffer
l = l + 1
ReDim Preserve Lines(1 To l)
Lines(l) = buffer
Loop
Close #handle
'1
'00:00:11,626 --> 00:00:15,470
'불꺼진 romantic all my life
With pres.PageSetup
SW = .SlideWidth: SH = .SlideHeight
End With
Set sld = ActiveWindow.View.Slide
Set media = sld.Shapes("Media 1")
If media.MediaFormat.MediaBookmarks.Count > 0 Then RemoveBookMarks
For l = 1 To UBound(Lines)
If InStr(Lines(l), "-->") Then
p = p + 1
If p > 256 Then MsgBox "At most, 512 media bookmarks can be added"
'나타날 시간
buffer = Trim(Split(Lines(l), "-->")(0))
pStart = Split(buffer, ",")(0)
pStart = CStr(Hour(pStart) * 3600 + Minute(pStart) * 60 + Second(pStart)) & Split(buffer, ",")(1)
'북마크 추가
Set bmark = media.MediaFormat.MediaBookmarks.Add(getSafeBmark(media, CLng(pStart)), "Bookmark_" & p & "_S")
'텍스트 추가
Set shp = sld.Shapes.AddTextbox(msoTextOrientationHorizontal, 0, SH - 100, SW, 100)
shp.Name = "Text_" & p
With shp.TextFrame2.TextRange
.Text = Lines(l + 1)
.Font.NameFarEast = "카페24 써라운드"
.Font.Size = 35
.Font.Bold = msoTrue
.Font.Fill.ForeColor.RGB = rgbWhite
.Font.Line.ForeColor.RGB = rgbBlack
.Font.Line.Weight = 0.5
shp.TextFrame2.HorizontalAnchor = msoAnchorCenter
End With
'나타내기
Set eft = sld.TimeLine.InteractiveSequences.Add.AddTriggerEffect(pShape:=shp, effectId:=msoAnimEffectFade, _
Trigger:=msoAnimTriggerOnMediaBookmark, pTriggerShape:=media, bookmark:="Bookmark_" & p & "_S")
eft.Timing.Duration = 0.5
'// ******************
'사라질 시간
buffer = Trim(Split(Lines(l), "-->")(1))
pEnd = Split(buffer, ",")(0)
pEnd = CStr(Hour(pEnd) * 3600 + Minute(pEnd) * 60 + Second(pEnd)) & Split(buffer, ",")(1)
'색칠하기 추가
Set eft = sld.TimeLine.InteractiveSequences.Add.AddTriggerEffect(pShape:=shp, effectId:=msoAnimEffectBrushOnColor, _
Trigger:=msoAnimTriggerOnMediaBookmark, pTriggerShape:=media, bookmark:="Bookmark_" & p & "_S")
dur = (CLng(pEnd) - CLng(pStart) - 1000) / 1000
If dur <= 0.1 Then dur = 0.1
eft.Timing.Duration = dur
eft.EffectParameters.Color2.RGB = rgbOrange
eft.Timing.TriggerType = msoAnimTriggerAfterPrevious
'북마크 추가
Set bmark = media.MediaFormat.MediaBookmarks.Add(getSafeBmark(media, CLng(pEnd)), "Bookmark_" & p & "_E")
'사라지기
Set eft = sld.TimeLine.InteractiveSequences.Add.AddTriggerEffect(pShape:=shp, effectId:=msoAnimEffectFade, _
Trigger:=msoAnimTriggerOnMediaBookmark, pTriggerShape:=media, bookmark:="Bookmark_" & p & "_E")
eft.Timing.Duration = 0.5
eft.Exit = msoTrue
End If
Next l
End Sub
'return safe bookmark position
Function getSafeBmark(oMedia As Shape, bmk As Long) As Long
Dim mb As MediaBookmark
Dim Found As Boolean
getSafeBmark = bmk
For Each mb In oMedia.MediaFormat.MediaBookmarks
If mb.Position = bmk Then
Found = True: Exit For
End If
Next mb
If Found Then getSafeBmark = bmk + 1
End Function
Private Sub RemoveBookMarks()
Dim shp As Shape
Dim i As Integer, k As Integer
Set shp = ActiveWindow.Selection.ShapeRange(1)
If shp.Type <> msoMedia Then MsgBox "select a media": Exit Sub
With shp.MediaFormat.MediaBookmarks
For i = .Count To 1 Step -1
'Debug.Print .Item(i).Position
.Item(i).Delete
k = k + 1
Next i
End With
If k Then MsgBox k & " bookmarks was(were) deleted."
End Sub
5. Media 1에는 가사가 나오고 사라질 위치에 북마크가 추가되고 슬라이드 하단에 가사 텍스트상자가 추가되고
나타나기, 색칠하기와 사라지기 애니메이션이 추가됩니다.
미디어 책갈피는 최대 512개를 추가할 수 있기 때문에 너무 많은 자막은 안됩니다. 그때는 미디어를 분할해야겠습니다.
자막의 폰트와 글자색상 위치등은 모두 선택해서 수정하면 되겠습니다.
6. 슬라이드쇼를 시작해서 자막이 정확한 시간에 뜨고 사라지는지 확인하세요.
1슬라이드 실행화면:
추가로 유튜브 영상에도 자막을 보이고 싶을 수 있는데요.
유튜브 영상위에는 자막을 띄울 수 없습니다.
그래서 유튜브 화면을 줄여서 조금 위에 띄워놓고
아래 여백에 자막을 보여줘야 합니다.
또한 유튜브 영상에 책갈피를 삽입할 수 없으므로
무음 오디오를 삽입하고 재생시킨 다음
무음 오디오에 오디오 책갈피를 걸어서 자막이 재생되게 해야 합니다.
위와 마찬가지로 무음오디오의 이름은 Media 1로 설정하고
매크로를 실행하고 Srt 파일을 선택하면 무음오디오에 책갈피를 걸고 자막을 자동으로 애니메이션으로 추가해줍니다.
유튜브 영상은 최초에 재생되는데 약2초 정도 소요되므로
.srt 자막의 싱크를 2초정도 늦춰주는 것이 필요합니다.
자막 편집은 아래 프로그램을 이용하세요.
http://www.nikse.dk/subtitleedit
syncronization 메뉴에서 2초정도 밀어주고 다른이름으로 저장하세요.
2슬라이드 실행화면: (영상앞부분만 녹화했는데도 저작권보호영상으로 짤려서 움짤로 대체합니다.)
첨부파일 참고하세요.
영상은 일부러 낮은 화질로 삽입하였고 특히 1슬라이드 영상은 저작권침해를 피하고자 2배속 재생되고 자막 또한 2배속으로 빠르게 지나갑니다. 2슬라이드 영상은 유튜브재생이라 원본대로 1배속이고 자막도 1배속입니다.
영상이나 가사 등은 모두 원저작자에게 권한이 있습니다.
(저작권은 링크의 설명을 참고하세요.)
이 자료는 순수한 파워포인트 교육용 자료로 제작되었습니다.
나타날때와 사라질 때 각각 북마크를 추가하는 버전: 최대 256개 북마크(가사) 가능
나타날때만 북마크를 추가하는 버전: 최대 512개 가사 북마크 가능
큐피드 가사(srt파일 참고용)
관련: 지식인
'PPT+VBA' 카테고리의 다른 글
도형의 Node를 대칭되게 조절 (0) | 2023.08.23 |
---|---|
파워포인트 표안의 셀 병합여부, 첫번째 셀인지, 병합된 순서, 범위 등 알아내기 (0) | 2023.07.29 |
엑셀 데이터로 파워포인트 차트 일괄 생성 (0) | 2023.06.28 |
스핀버튼을 눌러 총금액계산 (1) | 2023.05.21 |
오디오책갈피를 이용한 자막 애니메이션 자동 추가 (0) | 2023.05.03 |
슬라이드 영역을 벗어난 부분 자동으로 잘라내기 (0) | 2023.04.28 |
글자 밑에 밑줄 긋기 (1) | 2023.04.25 |
세로로 긴 표(Table) 자동으로 자르기 (0) | 2023.02.25 |
최근댓글