Получите информацию о ходе транскодирования ffmpeg в режиме реального времени.
Получите информацию о ходе транскодирования ffmpeg в режиме реального времени.

Предисловие

Посмотреть запись этой статьи ffmpeg Ход транскодирования в реальном времени。Используемый проект основан на предыдущем блоге.компилироватьуспешный проект:Скомпилируйте ffmpeg.c, используя официальный пакет разработки SDK FFmpeg4.3.1.

1. Спрос

При использовании ffmepg для перекодирования аудио и видео файлов вы можете увидеть подробный прогресс.

Скомпилируйте исходную программу. Исходная программа выполняет следующую команду:

Язык кода:javascript
копировать
.\ffmpeg431_test.exe - i "SampleVideo_1280x720_20mb.mp4" - vcodec libx264 - acodec copy - y SampleVideo_1280x720_20mb.flv

Вы можете увидеть следующую соответствующую информацию:

Но мы не можем видеть, сколько времени потребуется для завершения перекодирования и какой прогресс уже достигнут.

2. Получите информацию о ходе транскодирования ffmpeg в режиме реального времени.

1. Сортировка идей

  • ffmpeg_parse_options() функцияиспользуется для реализацииАнализ параметров и открытие входных и выходных файловФункция,Когда входной файл открыт, его можно получить из него Аудио и общая продолжительность видео, поэтому измените его внутреннюю open_input_file() Функция, ее внутренняя avformat_open_input() После выполнения вы можете получить на входе Аудио. и общая продолжительность видео, поэтому здесь есть аудио и общая продолжительность видео;
  • transcode() Функция внутренняя print_report() В функции «Отображение» есть реализация печати. временной метки текущего транскодирования,Итак, здесь мы получаем Отображение временной метки текущего транскодирования;
  • Воля Отображение временной метки текущего транскодированияразделить на Аудио и видео Общую продолжительность можно получить ffmpeg Ход транскодирования в реальном времени.

2. Модификация исходного кода

① Добавьте две глобальные переменные и объявление, чтобы получить функцию прогресса транскодирования в реальном времени в файле ffmepg.h.

Язык кода:javascript
копировать
int64_t __g_total_duration; // Аудио и общая продолжительность видео
int64_t __g_tc_cur_pts;     // Отображение временной метки текущего транскодирования
double get_tc_progress();   // Получайте информацию о ходе транскодирования в реальном времени

② Получайте информацию о ходе транскодирования в файле ffmepg.c в реальном времени.

Язык кода:javascript
копировать
// Получайте информацию о ходе транскодирования в реальном времени
double get_tc_progress() {
    if (__g_total_duration <= 0) 
        return 0;

    printf("&&& duration=%lld, pts = %lld &&&\n", __g_total_duration, __g_tc_cur_pts);
    printf("***progress = %lf***\n", (double)__g_tc_cur_pts / (double)__g_total_duration);

    return (double)__g_tc_cur_pts / (double)__g_total_duration;
}

③ Добавить реализацию получения общей продолжительности в функции open_input_file в файле ffmpeg_opt.c.

Язык кода:javascript
копировать
    // by lp, получите общую продолжительность, от микросекунд до миллисекунд
    __g_total_duration = ic->duration / 1000;

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

Язык кода:javascript
копировать
    // by lp
    __g_tc_cur_pts = pts / 1000;    // Микросекунды в миллисекунды
    if (is_last_report) {
        __g_tc_cur_pts = __g_total_duration;
    }
    get_tc_progress();

⑤ Основная функция заключается в следующем.

Язык кода:javascript
копировать
// ffmpeg431_test.cpp : Этот файл содержит "main" Функция. Выполнение программы начнется и закончится здесь.
//

#include <iostream>
extern "C"
{
#include "ffmpeg.h"
}

int main(int argc, char** argv)
{
	main_ffmpeg431(argc, argv);

	//printf("hello, ffmepg4.3.1\n");
	//char* arrParams[10] = { 0 };
	//for (int k = 0; k < 10; k++) {
	//	arrParams[k] = new char[64]();
	//}
	//strcpy(arrParams[0], "D:\\Project\\VS_Project\\ffmpeg431_test\\Debug\\ffmpeg431_test.exe");
	//strcpy(arrParams[1], "-i");
	//strcpy(arrParams[2], "\"SampleVideo_1280x720_20mb.mp4\"");
	//strcpy(arrParams[3], "-vcodec");
	//strcpy(arrParams[4], "libx264");
	//strcpy(arrParams[5], "-acodec");
	//strcpy(arrParams[6], "copy");
	//strcpy(arrParams[7], "-y");
	//strcpy(arrParams[8], "\"SampleVideo_1280x720_20mb.flv\"");

	//main_ffmpeg431(9, arrParams);

	//AVGeneralMediaInfo* avmi = new AVGeneralMediaInfo();
	//if (avmi) {
	//	get_avgeneral_mediainfo(avmi, "SampleVideo_1280x720_20mb.mp4");

	//	delete avmi;
	//	avmi = NULL;
	//}
}

3. Результаты операции

Вы можете увидеть нашу новую информацию о печати и ход конвертации.

Прогресс после последнего преобразования равен 1, что соответствует 100 %, и перекодирование завершено.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose