É possível pausar o áudio e o vídeo durante o período de sobreposição? Depois que o áudio é pausado, é possível adicionar uma nova faixa de áudio apenas durante esse intervalo? tempo restante que o áudio original precisa ser reproduzido.
Por exemplo,
Estou usando o ffmpeg para sobrepor várias imagens em um vídeo usando o comando mencionado abaixo,
ffmpeg -i 2.mp4 -i luvas.png -i meias.png -filter_complex "[1:v]scale=320:240 [ovrl]; [0:v][ovrl]overlay=y=Hh:enable=' entre(t,3,8)'[v1];[2:v]scale=320:240 [ovrl1];[v1][ovrl1]overlay=y=Hh:enable='between(t,15,20) '[v2]" -map "[v2]" -map 0:a -c:a copiar saídaVideo.mp4
Agora preciso pausar o vídeo e o áudio entre 3 a 8 segundos, reproduzir um novo áudio apenas durante 3 a 8 segundos e continuar com o áudio antigo pelo tempo restante.
Por favor, me ajude com isso.
Responder1
Para pausar áudio e vídeo, você pode fazer loop
streams ou compensar o PTS.
Fluxos em loop
loop=loop={len_frames}:size=1:start={pos_frames},setpts=N/FRAME_RATE/TB
Aqui, {len_frames}
é o comprimento do loop em quadros e {pos_frames}
é a posição da pausa em quadros. Você pode calcular esses números obtendo a taxa de quadros do vídeo e multiplicando-a pela duração escolhida e carimbo de data / hora em segundos.
O mesmo vale para a parte de áudio, para a qual você deve usar aloop
e asetpts
, respectivamente, e a taxa de amostragem em Hz. Além disso, você deve silenciar o áudio configurando o arquivo volume=0
.
Os fluxos de vídeo e áudio em loop serão mais longos que os originais e você poderá mostrar a sobreposição neles.
Como esses comandos são bastante complexos de montar, escrevi umPrograma Pythonque insere um indicador de “buffering” enquanto o vídeo e o áudio estão pausados. Você pode verificar como os comandos de loop são geradosaqui.
Compensação para PTS
Veja o de Gyanresponda aqui, que essencialmente faz:
setpts='PTS+gte(T\,{start_time})*({shift}/TB)'
combinado com -vsync vfr
, onde {start_time}
é o momento em que os quadros são deslocados e {shift}
é o deslocamento aplicado.
Mudança de áudio
Quanto à reprodução do áudio durante um determinado intervalo de tempo, você podeuse a -itsoffset
opção de entradapara compensar seu início.
Ou você compensa o PTS do fluxo de áudio com um valor fixo usando o asetpts
filtro.