我不小心跑了清除所有幻灯片上的时间命令并丢失了所有幻灯片计时。但是,我的演示文稿的每张幻灯片都有旁白。有没有一种 GUI/VBA 方法可以将所有幻灯片的幻灯片计时设置为旁白持续时间?
谢谢。
答案1
我制定了一个临时的解决方法:
- 选择幻灯片上的音频剪辑。
- 在下面音频工具,在回放选项卡,点击修剪音频.请注意总播放时长见右上角。
- 手动调整调整幻灯片计时过渡选项卡中定时组下前进幻灯片, 在后输入框。
该工作流程有效但是是手动的并且因此很费力。
您知道如何通过 VBA 读取音频播放的总时长吗?
答案2
这里有一些 VBA,它可以为您提供演示文稿中声音的总长度(并且在此过程中,返回每个声音...如果需要将其分离出来,您可以修改代码):
Sub SumSoundLengths()
Dim oSh As Shape
Dim oSl As Slide
Dim sngLengthOfSound As Single
Dim sngSoundDuration As Single
For Each oSl In ActivePresentation.Slides
For Each oSh In oSl.Shapes
If oSh.Type = msoMedia Then
If oSh.MediaType = ppMediaTypeSound Then
With oSh
sngLengthOfSound = .MediaFormat.Length
sngSoundDuration = sngSoundDuration + sngLengthOfSound
End With
End If
End If
Next
Next
MsgBox "Sounds total to: " & CStr(sngSoundDuration)
End Sub
答案3
这是我根据 Steve 的回答编写的脚本。我遇到了一个问题,幻灯片过渡变量出于某种原因超出了看似任意的限制 86.4。如果您更改了该数字,但没有出现错误,请随意将其全部删除。
Sub SetTransitionTimings()
Dim shapeObj As Shape
Dim slideObj As Slide
Dim sngLengthOfSound As Single
Dim slideDuration As Single
For Each slideObj In ActivePresentation.Slides
slideDuration = 0
For Each shapeObj In slideObj.Shapes
If shapeObj.Type = msoMedia Then
If shapeObj.MediaType = ppMediaTypeSound Then
With shapeObj
.AnimationSettings.PlaySettings.PlayOnEntry = msoTrue
sngLengthOfSound = .MediaFormat.Length / 1000
slideDuration = slideDuration + sngLengthOfSound
End With
End If
End If
Next
If slideDuration = 0 Then
slideDuration = 5
End If
If slideDuration < 86.4 Then
With slideObj.SlideShowTransition
.AdvanceOnTime = msoTrue
.Duration = 1
.AdvanceTime = slideDuration
End With
Else
Debug.Print "Slide " & slideObj.SlideNumber & ": " & slideDuration
End If
Next
MsgBox "Transition timings set."
End Sub
答案4
只是想指出,最新版本的 PowerPoint 似乎有一个错误,会导致计时混乱。显然,在功能区选项 TRANSITIONS 下,默认情况下会自动选中“XXX 秒后前进幻灯片”选项。如果您编辑任何过渡并且没有取消选中此选项,则所有计时都将被删除并替换为功能区选项中显示的数字。
我花了好几天时间尝试修复那些旁白时间被抹去的演示文稿,甚至不得不重新录制旁白(毫无进展),然后自己截屏,手动运行整个演示文稿,然后转换为视频。Jon G 的解决方案解决了这个问题,总共花了大约 25 秒。
谢谢,乔恩!