Полное руководство по извлечению размеров видео с помощью ffprobe

Размеры видео играют решающую роль в различных приложениях, таких как обработка, перекодирование и отображение видео. В этой статье блога мы рассмотрим различные методы извлечения размеров видео с помощью ffprobe, мощного инструмента командной строки, предоставляемого мультимедийной платформой FFmpeg. Мы также предоставим примеры кода для демонстрации каждого метода. Итак, приступим!

Метод 1: использование базовой команды ffprobe
Самый простой способ получить размеры видео — использовать базовую команду ffprobe. Вот пример:

ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 input.mp4

Метод 2: анализ вывода JSON
ffprobe также может выводить метаданные в формате JSON, что упрощает извлечение конкретной информации программным способом. Рассмотрим следующий пример на Python:

import subprocess
import json
def get_video_dimensions(filename):
    cmd = ['ffprobe', '-v', 'quiet', '-print_format', 'json', '-show_streams', '-select_streams', 'v:0', filename]
    output = subprocess.check_output(cmd).decode('utf-8')
    data = json.loads(output)
    width = data['streams'][0]['width']
    height = data['streams'][0]['height']
    return width, height
dimensions = get_video_dimensions('input.mp4')
print(f"Width: {dimensions[0]}, Height: {dimensions[1]}")

Метод 3: использование библиотек FFmpeg
Библиотеки FFmpeg предоставляют API для различных языков программирования, обеспечивая прямой доступ к метаданным видео. Вот пример на C с использованием библиотеки libavformat:

#include <libavformat/avformat.h>
int main() {
    av_register_all();
    AVFormatContext* formatContext = avformat_alloc_context();
    if (avformat_open_input(&formatContext, "input.mp4", NULL, NULL) != 0) {
        printf("Failed to open file\n");
        return -1;
    }
    if (avformat_find_stream_info(formatContext, NULL) < 0) {
        printf("Failed to retrieve stream information\n");
        return -1;
    }
    int streamIndex = av_find_best_stream(formatContext, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);
    if (streamIndex < 0) {
        printf("Failed to find video stream\n");
        return -1;
    }
    AVStream* videoStream = formatContext->streams[streamIndex];
    int width = videoStream->codecpar->width;
    int height = videoStream->codecpar->height;
    printf("Width: %d, Height: %d\n", width, height);
    avformat_close_input(&formatContext);
    return 0;
}

В этой статье мы рассмотрели три различных метода определения размеров видео с помощью ffprobe. Мы начали с базовой команды ffprobe, затем перешли к анализу вывода JSON для программного доступа и, наконец, продемонстрировали, как использовать библиотеки FFmpeg на C. В зависимости от ваших требований и предпочитаемого языка программирования вы можете выбрать наиболее подходящий метод для эффективно извлекайте размеры видео.