
Na minha aplicação o usuário pode buscar uma posição específica (media.currentPosition), depois pressionar o botão salvar, a imagem será exportada, aqui está o meu comando ffmpeg que estou usando para conseguir isso:
"-i",Video.mp4,"-filter_complex","[1:v][0:v]scale2ref=iw:ih[ovr][base];[ovr]colorchannelmixer=aa=0.7[ovrl];[base][ovrl]overlay[v]","-map","[v]","-ss",GetPositionInVideo,"-vframes","1","-q:v","2", "-preset", "ultrafast",directoryToStore+"/"+"Image.jpg"};
É um aplicativo Android, então é assim que está em uma matriz de strings. O comando funciona perfeitamente, mas leva uma eternidade para ser concluído.
No meu log, isso será mostrado repetidamente:
[Progress]: frame= 0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed= 0x
até que o quadro seja alcançado, ele mostra o seguinte:
[Progress]: frame= 1 fps=0.0 q=2.0 Lsize=N/A time=00:00:00.04 bitrate=N/A speed=0.00151x
então termina instantaneamente.
Então o que eu acho que está acontecendo é que o ffmpeg processa cada quadro até atingir o quadro desejado e então o processa.
Minha pergunta:
Existe uma maneira de aumentar a velocidade/tempo de processamento da exportação de um único quadro de um vídeo para uma imagem? - Talvez pulando os frames indesejados e indo diretamente para o frame que o usuário deseja exportar?
Responder1
"-ss",GetPositionInVideo,
vai imediatamente antes "-i",Video.mp4
para busca rápida.