Как связать информацию о процессе перекодирования ffmpeg с приложением с графическим интерфейсом vb6?

StackOverflow https://stackoverflow.com/questions/867383

  •  22-08-2019
  •  | 
  •  

Вопрос

я играю с графическим интерфейсом vb6 для ffmpeg и на данный момент все, что я могу сделать, это вызвать ffmpeg через cmd.exe, который отобразит командную строку, пока весь процесс еще работает.И я подумал, что это норма, видя, как работает WinFF, еще один интерфейсный интерфейс для ffmpeg на основе Паскаля.

Но я был потрясен, когда увидел это другое Графический интерфейс GVC, в котором есть индикатор выполнения и все такое.

По сути, я ищу способ полностью скрыть всю командную строку и связать ход перекодирования с индикатором выполнения в моем графическом интерфейсе.

Итак, вот мой план: я думаю найти функцию API Win32, которую я могу вызвать в строке cmd и при этом скрыть ее, и из другого обсуждения здесь, я думаю, мне придется прочитать файл журнала, чтобы получить информацию о ходе работы ffmpeg.

Итак, какую функцию мне следует вызвать для API Win32?И знает ли кто-нибудь лучший/более простой способ сделать это?Спасибо

Обновления:

Если кому-то интересно, найду хороший модуль класса о том, как получить вывод cmd в мое приложение vb6, и это никто иной, как великий Иоаким :)

Это было полезно?

Решение

Я написал то же самое для Java в OSX.Очень минималистичная логика:

  • Вам необходимо прочитать вывод ffmpeg по мере его создания.
  • Разобрать вывод построчно (как CR, так и LF)
    • Найдите строку «Продолжительность», сохраните значение времени в виде целого числа в секундах. "Продолжительность: 00:03:18.48, начало:0,000000, битрейт:274 кб/с" (CRLF прекращен)
    • С этого момента анализируйте CR и ищите значения времени (в секундах) завершения. "frame= 2816 fps=667 q=11.0 Lsize= 13036kB time=187.66 битрейт = 569,1 кбит/с" (CR прекращен, LF нет)
    • Сделайте деление (время/длительность) и у вас будет процент!

Я не верю, что запись ffmpeg в файл журнала будет работать.По крайней мере, в *nix ffmpeg записывает этот вывод в std err, а строки состояния, которые вам нужно захватить, не имеют перевода строки и поэтому перезаписывают предыдущую строку состояния.Это то, что вы можете преодолеть в своем собственном коде.

Извините, не могу помочь с частью VB6, но предполагаю, что это просто, чтобы захватить выходные данные процесса, который вы выкладываете.

Другие советы

Во-первых, извините за мой английский, я говорю по-испански.Я нахожу ответ.1/Сначала установите пресеты, у меня есть пример «Выходной формат MPEG2 DVD HQ».

"-vcodec mpeg2video -vstats_file MFRfile.txt -r 29.97 -s 352x480 -aspect 4:3 -b 4000k -mbd rd -trellis -mv0 -cmp 2 -subcmp 2 -acodec mp2 -ab 192k -ar 48000 -ac 2"

Эта инструкция может создать текстовый файл. Не забудьте включить в пресеты команды «-vstats_file Mitxt.txt», как показано в примере.это может сделать отчет, который будет размещен в исходной папке вашего файла Source.Если хотите, вы можете указать любое имя, а затем прочитать этот текст в этом примере.

Private Sub -Timer1_Timer () Dim Strlastline As String ', например, My Ruta "C: Documents and Settings Gortiz mis Documentos file.txt"

strlastline = readlastlineoffile ("c: documents and settings gortiz mis _ documentos file.txt") lst1.additem strlastline end sub sub

Функция readlastlineOffile (sfilEname AS string) как строка Dim objfso, ts dim sTmpContents как строка objfso = createObject ("scripting.filesystemobject") set ts = objfso.opentextfile (sfileName, 1) stmpcontent Ничто не установлено objfso = ничего

Readlastlineoffile = split (stmpcontents, vbcrlf) (ubound (split (stmpcontents, vbcrlf)) - 1) конечная функция

в списке под названием Lst1 вы можете увидеть результат.Битрейт, обработанные кадры, время процесса в секундах.и т. д.

С уважением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top