[파이썬] moviepy Timecode 표시하기

If you are working with video editing or video processing tasks using Moviepy library in Python, you might encounter the need to display the timecode of a video. Timecode is a unique identifier for each frame in a video and is commonly used in film and television production.

In this blog post, we will explore how to display timecode using the Moviepy library in Python. Let’s get started!

Installing Moviepy

Before we begin, let’s make sure we have Moviepy installed. You can install Moviepy using pip by running the following command:

pip install moviepy

Importing the necessary libraries

To display the timecode, we need to import the following libraries:

from moviepy.video.io.VideoFileClip import VideoFileClip
from moviepy.video.VideoClip import TextClip

Loading the video

To display the timecode, we first need to load the video using the VideoFileClip class from Moviepy.

video = VideoFileClip('path/to/video.mp4')

Make sure to replace 'path/to/video.mp4' with the actual path to your video file.

Defining the timecode function

Next, we define a function that will generate the timecode for each frame of the video. For simplicity, let’s assume that the timecode format is in HH:MM:SS:FF (hours:minutes:seconds:frame).

def timecode(current_time):
    hours = current_time // 3600
    minutes = (current_time % 3600) // 60
    seconds = (current_time % 60) // 1
    frames = int((current_time % 1) * video.fps)

    return f'{hours:02}:{minutes:02}:{seconds:02}:{frames:02}'

Adding the timecode to the video

Now, we can add the timecode to the video using the TextClip class from Moviepy. We will overlay the timecode text at the bottom right corner of the video.

video_with_timecode = video.fl(TimecodeVideoClip(video, timecode))

timecode_text = TextClip(timecode, fontsize=24, color='white',
                         bg_color='black', size=(150, 40)).set_position(('right', 'bottom')).set_duration(video.duration)

video_with_timecode = CompositeVideoClip([video_with_timecode, timecode_text])

Saving the video

Finally, we can save the processed video with the timecode using the write_videofile method.

video_with_timecode.write_videofile('path/to/video_with_timecode.mp4', codec='libx264')

Make sure to replace 'path/to/video_with_timecode.mp4' with the desired output file path.

Putting it all together

Here’s the complete code that puts everything together:

from moviepy.video.io.VideoFileClip import VideoFileClip
from moviepy.video.VideoClip import TextClip

def timecode(current_time):
    hours = current_time // 3600
    minutes = (current_time % 3600) // 60
    seconds = (current_time % 60) // 1
    frames = int((current_time % 1) * video.fps)

    return f'{hours:02}:{minutes:02}:{seconds:02}:{frames:02}'

video = VideoFileClip('path/to/video.mp4')

video_with_timecode = video.fl(TimecodeVideoClip(video, timecode))

timecode_text = TextClip(timecode, fontsize=24, color='white',
                         bg_color='black', size=(150, 40)).set_position(('right', 'bottom')).set_duration(video.duration)

video_with_timecode = CompositeVideoClip([video_with_timecode, timecode_text])

video_with_timecode.write_videofile('path/to/video_with_timecode.mp4', codec='libx264')

Conclusion

In this blog post, we have explored how to display timecode using the Moviepy library in Python. By following the steps outlined in this post, you can easily add timecode to your videos for various editing or processing tasks. Happy coding!