OfficeTips Home || VBA Section || General Section || Download Section || Privacy Policy

Media Format and Bookmarks

The new MediaFormat object associated with shapes is really cool. It offers everything that you could need to gather information about the inserted media shape. The code below also shows how to add a bookmark trigger. MediaFormat object has also two methods to resample audio and video in the presentation - Resample and ResampleFromProfile - which allows us to tap into the profile settings available in the compress media drop down.

See also: How to use msoAnimEffectPlayFromBookmark

Supported versions: PowerPoint 2010

Sub MediaInfo()
Dim oShp As Shape
Dim oMBK As MediaBookmark
Dim I As Integer

' Assumes that this shape is either inserted video or audio.

Set oShp = ActiveWindow.Selection.ShapeRange(1)

' Note: Online video is also flagged as mediatype shape
' but it fails on all these properties, only SourceFullName property works
' See *Linked info

If oShp.Type = msoMedia Then
    Debug.Print "Lenght: " & oShp.MediaFormat.Length
    Debug.Print "Start Point: " & oShp.MediaFormat.StartPoint
    Debug.Print "End Point: " & oShp.MediaFormat.EndPoint

    Debug.Print "Fade In Duration: " & oShp.MediaFormat.FadeInDuration
    Debug.Print "Fade Out Duration: " & oShp.MediaFormat.FadeOutDuration

    Debug.Print "Is Embedded: " & oShp.MediaFormat.IsEmbedded
    Debug.Print "Is linked: " & oShp.MediaFormat.IsLinked

    If oShp.MediaFormat.IsLinked Then
        Debug.Print "Movie Source: " & oShp.LinkFormat.SourceFullName '*Linked info
    End If

    Debug.Print "Volume: " & oShp.MediaFormat.Volume
    Debug.Print "Muted: " & oShp.MediaFormat.Muted
    Debug.Print "Audio Compression Type: " & oShp.MediaFormat.AudioCompressionType
    Debug.Print "Audio Audio Sampling Rate: " & oShp.MediaFormat.AudioSamplingRate

    ' Applicable only to video types
    If oShp.MediaType = ppMediaTypeMovie Then
        Debug.Print "Video Compression Type: " & oShp.MediaFormat.VideoCompressionType
        Debug.Print "Video Frame Rate: " & oShp.MediaFormat.VideoFrameRate

        ' Set poster frame
        Call oShp.MediaFormat.SetDisplayPicture(1000)
        ' Set poster frame from external image.
        Call oShp.MediaFormat.SetDisplayPictureFromFile("C:\Users\Shyam\Pictures\mvp.jpg")

        Debug.Print "Height: " & oShp.MediaFormat.SampleHeight
        Debug.Print "Width: " & oShp.MediaFormat.SampleWidth

        ' Movie Container Shape
        Debug.Print oShp.AutoShapeType
    End If


    ' It is possible to create bookmarks in the audio/video timeline for the media shape.
    ' You can then trigger an animation when the media hits the bookmark during playback
    ' Pretty cool, eh? 
    ' See the subroutine below this one to see how you can assign a bookmark trigger


        ' Add media bookmark, position is in milliseconds
        ' Note: Can't assign 2 bookmarks at the same point in the timeline.
        ' Generates error if specified duration is greater than movie duration
        ' Generates error if specified bookmark already exists on the timeline

        Call oShp.MediaFormat.MediaBookmarks.Add(4000, "Bookmark A")
        Call oShp.MediaFormat.MediaBookmarks.Add(8000, "Bookmark B")
        Call oShp.MediaFormat.MediaBookmarks.Add(9000, "Bookmark C")

        'Count the number of bookmarks
        Debug.Print "Bookmark count: " & oShp.MediaFormat.MediaBookmarks.Count
        'Retrieve info from the 1st bookmark
        For I = 1 To oShp.MediaFormat.MediaBookmarks.Count
                Set oMBK = oShp.MediaFormat.MediaBookmarks(I)
                Debug.Print oMBK.Index, "Name: " & oMBK.Name, "Position: " & oMBK.Position

        'Delete all the bookmarks
        For I = oShp.MediaFormat.MediaBookmarks.Count To 1 Step -1
                Set oMBK = oShp.MediaFormat.MediaBookmarks(I)
        End If
End Sub

Sub AddBookmarkTrigger()
Dim oShp As Shape         ' Shape with animation that needs to be triggered via bookmark
Dim oShpMovie As Shape    ' Media shape

'Assumes that we have a media shape with 'Bookmark 1' on slide 1 of the presentation
With ActivePresentation.Slides(1)
        Set oShpMovie = .Shapes(1)
        Set oShp = .Shapes(2)
        ' Assign an trigger to shape
        ' if no bookmark name is specified, it will default to 1st. If no bookmark exists then it fails
        Call .TimeLine.InteractiveSequences.Add.AddTriggerEffect(oShp, msoAnimEffectPathCircle, _   
                                msoAnimTriggerOnMediaBookmark, oShpMovie, "Bookmark 1")
End With

End Sub



Copyright 1999-2018 (c) Shyam Pillai. All rights reserved.