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çãostream_out_transcode stream out: input interval 41666 (base 1)
ao VLC. - A opção
fps=24
intranscode
fornece a opçãostream_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: