PowerPoint 2013(6): 将幻灯片时间设置为旁白时长

PowerPoint 2013(6): 将幻灯片时间设置为旁白时长

我不小心跑了清除所有幻灯片上的时间命令并丢失了所有幻灯片计时。但是,我的演示文稿的每张幻灯片都有旁白。有没有一种 GUI/VBA 方法可以将所有幻灯片的幻灯片计时设置为旁白持续时间?

谢谢。

答案1

我制定了一个临时的解决方法:

  1. 选择幻灯片上的音频剪辑。
  2. 在下面音频工具,在回放选项卡,点击修剪音频.请注意总播放时长见右上角。
  3. 手动调整调整幻灯片计时过渡选项卡中定时组下前进幻灯片, 在输入框。

该工作流程有效但是是手动的并且因此很费力。

您知道如何通过 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 秒。

谢谢,乔恩!

相关内容