.. _Intermediate/EmbedTimecodeInVideoFile:

Embed a Timecode in a Video File 
================================

Problem
-------

You want to extract a timecode from a EXR image sequences and embed it in a video file.

Solution
--------

::

    import Draft
    from DraftParamParser import ReplaceFilenameHashesWithNumber   # Import ReplaceFilenameHashesWithNumber from the DraftParamParser library
    
    # Create a Draft.ImageInfo object used to extract a Draft.Timecode object 
    imageInfo = Draft.ImageInfo()
    
    # Main encoding loop
    for currFrame in range( 1, 200 ):
        currFile = ReplaceFilenameHashesWithNumber( 'movie_frame####.exr', currFrame )
        frame = Draft.Image.ReadFromFile( currFile, imageInfo )

        # If first frame and a timecode is found, specify the timecode parameter when creating the encoder   
        if currFrame == 1:
            if( imageInfo.timecode ):
                encoder = Draft.VideoEncoder( '//path/to/video/save.mov', timecode = imageInfo.timecode )
            else:
                encoder = Draft.VideoEncoder( '//path/to/video/save.mov' )

        encoder.EncodeNextFrame( frame )

    encoder.FinalizeEncoding()

Discussion
----------

In order to embed a timecode in a video file, you can extract the timecode embedded in the first frame of an image sequence. To do so, you first need to check if there's one. If a :class:`~Draft.Timecode` is set in imageInfo object, the if clause will execute and we'll initialize the video encoder and embed the first frame's timecode using::

    encoder = Draft.VideoEncoder( '//path/to/video/save.mov', timecode = imageInfo.timecode )

If no timecode is found, we'll have::

    imageInfo.timecode = None
    
and the else clause will execute, initializing the encoder using::

    encoder = Draft.VideoEncoder( '//path/to/video/save.mov' )

The remaining encoding steps are the same as usual, finishing with the line::

    encoder.FinalizeEncoding()

to finalize and save the resulting video to file.

See Also
--------

You can consult the sections :ref:`Concepts/Timecode` in Concepts and :ref:`Basic/EmbedTimecodeInImageFile` in the Basic Cookbook.