VLC - Por que a faixa de áudio é mais longa que a trilha de vídeo após um screencasting?

1

Eu uso o VLC media player 2.2.8 Weatherwax (revisão 2.2.7-14-g3cc1d8cba9), instalado a partir do meu distribuidor (Arch Linux). Meu objetivo é criar um comando que registra um vídeo da minha área de trabalho, com entrada de áudio de micro.

Após algumas pesquisas, usei este comando:

vlc screen:// 
:screen-fps=24 
:screen-follow-mouse 
:screen-mouse-image=cursor.png 
:input-slave=alsa://hw:1,0
:sout="#transcode{vcodec=h264,venc=x264,vb=2048,acodec=mp3,scale=1.0,vfilter=croppadd{cropleft=0,croptop=0,cropright=0,cropbottom=0}}:duplicate{dst=std{mux=mp4,access=file,dst=out.mp4}}"

Testei-o para um vídeo de ~ 1mn e funcionou sem qualquer problema visível. Então eu gravei um vídeo de ~ 1h, e o resultado é o seguinte: Link para a imagem (imgur).

Os valores são aproximados. O atraso de áudio começa com ~ 3s e termina com ~ 3mn. Exceto o atraso, o vídeo e o áudio funcionam corretamente.

Por que há um atraso de áudio? É devido a algum tipo de compressão, ou a algumas razões como "a micro entrada é mais lenta do que a captura de tela de vídeo"?

Obrigado pela sua resposta.

    
por Fnifni 15.02.2018 / 15:52

1 resposta

0

Ok, acho que encontrei uma solução. Por favor, corrija-me se estiver errado.

Solução

vlc screen:// 
:screen-fps=24 

...

:sout="#transcode{...fps=24}...

A solução é especificar os mesmos fps na opção de transcodificação do que na opção: screen-fps.

Complete o comando (para referência):

vlc screen:// 
:screen-fps=24 
:screen-follow-mouse 
:screen-mouse-image=cursor.png 
:input-slave=alsa://hw:1,0
:sout="#transcode{vcodec=h264,venc=x264,vb=2048,acodec=mp3,scale=1.0,vfilter=croppadd{cropleft=0,croptop=0,cropright=0,cropbottom=0},fps=24}:duplicate{dst=std{mux=mp4,access=file,dst=out.mp4}}"

Detalhes

Por padrão, o VLC tem:

  • uma entrada de 500 000 µs ,
  • uma saída de 40 000 µs .

Você pode vê-lo no console após o comando vlc: Link para a imagem (imgur).

  • A opção :screen-fps=24 fornece a opção stream_out_transcode stream out: input interval 41666 (base 1) ao VLC.
  • A opção fps=24 in transcode fornece a opção stream_out_transcode stream out: output interval 41666 (base 1) ao VLC.

Se eu tiver razão, para obter 41666 de 24 fps (ou Hz), precisamos fazer a seguinte operação: 10^6 / 24 = 41666.66666... ~= 41666 µs

Na minha postagem original, não defini fps=24 na opção transcode . Então, o valor padrão para o intervalo de saída foi 40 000 µs.

Se eu considerar que meu vídeo é 3600 s e eu faço a seguinte operação: 3600 * (1-40000/41666) = 143.9447 segundos.

É > 2mn e corresponde ao delta observado.

Resultado com as opções corretas: Link para a imagem (imgur).

Observação

Embora exista uma opção de parâmetro audio-sync in transcode , não funcionou como eu esperava. Somente adicionando fps parâmetro fez o truque.

Referências

Você pode encontrar referências aqui:

por 15.02.2018 / 19:43