Как узнать FPS видеопотока с помощью FFmpeg?

Вопрос или проблема

console.log(this.dsh.getBitrateInfoListFor('video'))

enter image description here

Я использую это:

Как я могу узнать количество кадров в секунду (FPS) видеопотока?

Для этого мне нужно указать параметр во время конвертации, который отобразится в манифесте видео?

Как это сделать, прописать в команде FFmpeg?

#!/bin/bash

round() {
    printf "%.${2}f" "${1}"
}

FILENAME=$*
read FPS <<< $(ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=r_frame_rate "$FILENAME")
echo "FPS=$FPS"
FPS=$(echo "$FPS" | bc)
echo "FPS=$FPS"
FPS=$(round ${FPS} 2)
echo "FPS=$FPS"

Вывод в терминал:

FPS=30/1
FPS=30
FPS=30.00

Ответ или решение

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

Теория

Частота кадров (Frames Per Second, FPS) — это количество отдельных кадров или изображений, показываемых за одну секунду видео. Это один из наиболее важных параметров, который влияет на плавность видео и визуальное восприятие у зрителя. Неправильно установленная частота кадров может привести к разрыву изображений, задержкам или отсутствию синхронизации видео и аудио.

FFmpeg — это мощный инструмент командной строки, который позволяет анализировать, преобразовывать и потоково передавать аудио и видео. Его модуль ffprobe предоставляет возможность извлечения различных метаданных, включая FPS.

Пример

Выше указан пример использования команды FFmpeg с помощью инструментов Bash для извлечения FPS из видеофайла. Скрипт на Bash использует ffprobe для извлечения частоты кадров:

#!/bin/bash

round() {
    printf "%.${2}f" "${1}"
}

FILENAME=$*
read FPS << $(ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=r_frame_rate "$FILENAME")
echo "FPS=$FPS"
FPS=$(echo "$FPS" | bc)
echo "FPS=$FPS"
FPS=$(round ${FPS} 2)
echo "FPS=$FPS"

Объяснение:

  1. ffprobe: Этот инструмент анализирует видеофайл и извлекает метаданные. Параметры:

    • -v error: Подавляет вывод ошибок.
    • -select_streams v: Выбирает видеопоток.
    • -of default=noprint_wrappers=1:nokey=1: Специфицирует формат вывода.
    • -show_entries stream=r_frame_rate: Извлекает частоту кадров.
  2. Парсинг вывода: Поскольку FFmpeg может предоставить частоту кадров в виде дроби, скрипт использует утилиту bc для преобразования этой дроби в десятичную систему, а затем округляет значение до двух знаков после запятой.

Применение

Для корректной работы с видеопотоками и обеспечения нужного уровня качества важно не только извлекать, но и правильно задавать FPS в процессе конвертации видео. Если вы создаете или преобразуете видеофайл, указание частоты кадров становится ключевым шагом.

Указание FPS при конвертации в FFmpeg:

Для изменения FPS или его указания в процессе конвертации можно воспользоваться параметром -r. Например:

ffmpeg -i input.mp4 -r 24 output.mp4

Здесь -r 24 устанавливает FPS равным 24 кадрам в секунду в конечном файле. Это может быть полезно при оптимизации видео для различных платформ или устройств.

Заключение

Работа с частотой кадров через FFmpeg открывает широкие возможности для оптимизации и анализа видео. Правильное понимание и применение информации о FPS помогает в создании качественного видеоконтента, который соответствует ожиданиям зрителя и требованиям устройства. Интеграция этого процесса в конвейеры обработки может значительно улучшить итоговое качество видео.

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

Оцените материал
Добавить комментарий

Капча загружается...