%3A%20%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B5%20%D0%B4%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%20%D1%81%D0%BB%D0%B0%D0%B9%D0%B4%D0%BE%D0%B2%20%D0%B2%20%D1%81%D0%BE%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B8%D0%B8%20%D1%81%20%D0%B4%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E%20%D0%B7%D0%B0%D0%BA%D0%B0%D0%B4%D1%80%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0.png)
Я случайно побежалЧеткое время показа на всех слайдахcommand и потерял все тайминги слайдов. Однако каждый слайд моей презентации имеет закадровый текст. Есть ли способ 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
Вот скрипт, который я придумал на основе ответа Стива здесь. Я столкнулся с проблемой, когда переменная перехода слайдов по какой-то причине превысила, казалось бы, произвольный предел 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, похоже, есть ошибка, которая вызывает хаос с таймингами. Видимо, в опции ленты ПЕРЕХОДЫ опция "Перейти к слайду через XXX секунд" автоматически отмечена по умолчанию. Если вы редактируете какие-либо переходы и НЕ снимаете этот флажок, все ваши тайминги будут стерты и заменены числом, показанным в опции ленты.
Я потратил дни, пытаясь исправить презентации, в которых были стерты тайминги закадрового текста, доходя до того, что перезаписывал закадровый текст (никакой радости), а затем прибегая к захвату экрана, запуская всю презентацию вручную, а затем конвертируя в видео. Решение Джона Джи выше исправило это, всего за 25 секунд.
Спасибо, Джон!