Вопрос или проблема
console.log(this.dsh.getBitrateInfoListFor('video'))
Я использую это:
Как я могу узнать количество кадров в секунду (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"
Объяснение:
-
ffprobe: Этот инструмент анализирует видеофайл и извлекает метаданные. Параметры:
-v error
: Подавляет вывод ошибок.-select_streams v
: Выбирает видеопоток.-of default=noprint_wrappers=1:nokey=1
: Специфицирует формат вывода.-show_entries stream=r_frame_rate
: Извлекает частоту кадров.
-
Парсинг вывода: Поскольку FFmpeg может предоставить частоту кадров в виде дроби, скрипт использует утилиту
bc
для преобразования этой дроби в десятичную систему, а затем округляет значение до двух знаков после запятой.
Применение
Для корректной работы с видеопотоками и обеспечения нужного уровня качества важно не только извлекать, но и правильно задавать FPS в процессе конвертации видео. Если вы создаете или преобразуете видеофайл, указание частоты кадров становится ключевым шагом.
Указание FPS при конвертации в FFmpeg:
Для изменения FPS или его указания в процессе конвертации можно воспользоваться параметром -r
. Например:
ffmpeg -i input.mp4 -r 24 output.mp4
Здесь -r 24
устанавливает FPS равным 24 кадрам в секунду в конечном файле. Это может быть полезно при оптимизации видео для различных платформ или устройств.
Заключение
Работа с частотой кадров через FFmpeg открывает широкие возможности для оптимизации и анализа видео. Правильное понимание и применение информации о FPS помогает в создании качественного видеоконтента, который соответствует ожиданиям зрителя и требованиям устройства. Интеграция этого процесса в конвейеры обработки может значительно улучшить итоговое качество видео.
Поняв, как эффективно использовать FFmpeg и его возможности по извлечению и установке FPS, можно разработать более совершенные решения для работы с видеоданными в вашей организации или на вашем проекте.