Como ligar as informações do processo de transcodificação ffmpeg em um aplicativo VB6 GUI?

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

  •  22-08-2019
  •  | 
  •  

Pergunta

Eu estou jogando com uma interface gráfica vb6 para ffmpeg ea partir de agora tudo que eu pode fazer é chamar o ffmpeg via cmd.exe que mostra o prompt de comando, enquanto todo o processo ainda está em execução. E eu pensei que esta era a norma ver como WinFF, outro gui frontend baseado pascal para obras ffmpeg.

Mas eu fiquei encantada quando vi este outro GVC gui que tem uma barra de progresso e tudo.

Então, basicamente, eu estou olhando para uma maneira como eu poderia limpa esconder todo o prompt de comando e vincular o progresso transcodificação de uma barra de progresso no meu gui.

Então aqui é o meu plano, eu estou pensando em encontrar uma função win32 api que eu posso ligar para a linha cmd e ainda esconder, e de outra discussão aqui , eu acho que eu teria que ler o arquivo de log para obter as informações do processo ffmpeg.

Então, qual a função que eu deveria chamar para o Win32 API? E faz alguém souber de uma maneira melhor / mais fácil de conseguir este feito? graças

Atualizações:

No caso alguém estiver interessado, eu encontrar um href="http://www.vbforums.com/showthread.php?t=364219" rel="nofollow noreferrer"> módulo de classe agradável :)

Foi útil?

Solução

Eu escrevi a mesma coisa exata para Java no OSX. lógica muito minimalista:

  • Você precisa ler a saída ffmpeg como ele é produzido.
  • analisar a linha de saída pela linha (ambos CR e LF)
    • Encontre a linha 'Duração', armazenar o valor de tempo como segundos em um número inteiro. "Duração: 00:03:18 .48, começar: 0,000000, bitrate: 274 kb / s" (CRLF terminado)
    • A partir desse ponto em diante, analisar o CR e olhar para o tempo (em segundos) valores concluídas. "frame = 2816 fps = 667 q = 11,0 lSize = 13036kB tempo = 187,66 taxa de bits = 569.1kbits / s" (CR terminada, sem LF)
    • Faça a divisão (tempo / duração) e você tem uma porcentagem!

Eu não acredito ter write ffmpeg para um arquivo de log está indo para o trabalho. Em * nix, pelo menos, ffmpeg escreve essa saída para err std, e as linhas de status que você precisa para capturar não têm uma alimentação de linha, e assim substituir a linha de status anterior. Isso é algo que você pode superar dentro de seu próprio código.

Desculpe, não posso ajudar com a parte VB6, mas diria que é para a frente para a saída de captura de um processo de desembolsar.

Outras dicas

Primeiro desculpa meu Inglês eu sou falar em espanhol. I encontrar a resposta. 1 / First colocar nos presets, eu tenho este exemplo "Formato de saída 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"

Esta instrução pode fazer um arquivo txt não se esqueça inclui os comandos "-vstats_file Mitxt.txt" para o presets como o exemplo. isso pode fazer um relatório que é ubicadet na fonte pasta do seu arquivo de origem. você pode colocar qualquer nome se você quer, então você pode ler este txt withthis exemplo.

Private Sub Timer1_Timer () Dim strLastLine As String 'Por exemplo meu 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

Função ReadLastLineOfFile (sFileName As String) As String Dim objFSO, TS Dim sTmpContents As String Set objFSO = CreateObject ( "Scripting.FileSystemObject") Conjunto TS = objFSO.OpenTextFile (sFileName, 1) sTmpContents = TS.ReadAll TS.Close Set TS = Nada Set objFSO = Nada

ReadLastLineOfFile = split (sTmpContents, vbCrLf) (UBound (Split (sTmpContents, vbCrLf)) - 1) End Function

em uma caixa de listagem chamado Lst1 você pode ver o resultado que é. Bitrate, Frames proceced, Hora do processo em segundos. etc

Cumprimentos.

scroll top