Sobreponha a imagem no vídeo e pause o vídeo e o áudio durante o intervalo específico

Sobreponha a imagem no vídeo e pause o vídeo e o áudio durante o intervalo específico

É 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 loopstreams 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 aloope 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 -itsoffsetopção de entradapara compensar seu início.

Ou você compensa o PTS do fluxo de áudio com um valor fixo usando o asetptsfiltro.

informação relacionada