При работе с задачами обработки видео в 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 видеофайлов, что позволит эффективно и точно выполнять различные задачи по обработке видео.