Изучение нескольких методов получения видео FPS с использованием Python и FFmpeg

При работе с задачами обработки видео в Python часто необходимо получить количество кадров в секунду (FPS) видеофайла. Значение FPS предоставляет важную информацию о временном разрешении видео и может быть полезно для различных приложений, таких как анализ видео, синхронизация и редактирование. В этой статье мы рассмотрим несколько методов извлечения частоты кадров видео с помощью Python и FFmpeg, а также примеры кода для каждого подхода.

Метод 1: использование FFprobe
FFprobe — это инструмент командной строки, входящий в состав FFmpeg, который предоставляет информацию о мультимедийных потоках, включая частоту кадров видео. Мы можем использовать модуль подпроцесса в Python для выполнения FFprobe и извлечения значения FPS из выходных данных.

import subprocess
def get_video_fps_ffprobe(video_path):
    command = f'ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=r_frame_rate {video_path}'
    result = subprocess.check_output(command, shell=True).decode('utf-8').strip()
    numerator, denominator = map(int, result.split('/'))
    return numerator / denominator
# Usage example
video_path = 'path/to/video.mp4'
fps = get_video_fps_ffprobe(video_path)
print(f"The video FPS is: {fps}")

Метод 2: использование OpenCV
OpenCV — это популярная библиотека компьютерного зрения, предоставляющая возможности обработки видео. Он включает класс VideoCapture, который позволяет нам считывать видеокадры и получать свойства, включая FPS.

import cv2
def get_video_fps_opencv(video_path):
    cap = cv2.VideoCapture(video_path)
    fps = cap.get(cv2.CAP_PROP_FPS)
    cap.release()
    return fps
# Usage example
video_path = 'path/to/video.mp4'
fps = get_video_fps_opencv(video_path)
print(f"The video FPS is: {fps}")

Метод 3: использование Moviepy
MoviePy — это библиотека Python, созданная на основе FFmpeg и предоставляющая высокоуровневый интерфейс для редактирования и обработки видео. Он предлагает простой метод определения частоты кадров видео.

from moviepy.editor import VideoFileClip
def get_video_fps_moviepy(video_path):
    clip = VideoFileClip(video_path)
    fps = clip.fps
    clip.close()
    return fps
# Usage example
video_path = 'path/to/video.mp4'
fps = get_video_fps_moviepy(video_path)
print(f"The video FPS is: {fps}")

Метод 4: использование MediaInfo
MediaInfo — это удобная библиотека мультимедийной информации, которую можно использовать для извлечения метаданных из видеофайлов. Мы можем использовать библиотеку-оболочку Python MediaInfoDLLдля получения значения FPS.

from MediaInfoDLL3 import MediaInfo
def get_video_fps_mediainfo(video_path):
    media_info = MediaInfo()
    media_info.Open(video_path)
    fps = media_info.Get(Stream.Video, 0, "FrameRate")
    media_info.Close()
    return float(fps)
# Usage example
video_path = 'path/to/video.mp4'
fps = get_video_fps_mediainfo(video_path)
print(f"The video FPS is: {fps}")

В этой статье мы рассмотрели несколько методов извлечения частоты кадров видео с помощью Python и FFmpeg. Мы рассмотрели методы с использованием FFprobe, OpenCV, MoviePy и MediaInfo, предоставив примеры кода для каждого подхода. Используя эти методы, вы можете легко получить значение FPS видеофайлов, что позволит эффективно и точно выполнять различные задачи по обработке видео.