Como uma continuação da pergunta , estou agora lutando com a edição síncrona do vídeo e do áudio.
Eu ainda tento cortar o vídeo por quadros. Embora os timestamps resultantes pareçam estar corretos no vídeo, o áudio está longe de estar em sincronia. Nem ajuda adicionar um tempo constante a asetpts
. Parece mudar com cada intervalo de quadro diferente que eu uso.
Aqui está o que eu tenho (são apenas partes relevantes de um script mais longo):
SET SELECT=select='gte(n\,%4)*lte(n\,%5)'
SET ASELECT=aselect='gte(n\,%4)*lte(n\,%5)'
SET SETPTS=setpts='PTS-STARTPTS'
SET ASETPTS=asetpts='PTS-STARTPTS'
SET SCALE=scale='1280:-1'
SET CROP=%3
:
ffmpeg -y -i %1 -af %ASELECT%,%ASETPTS% -vf %SELECT%,%SETPTS%,%SCALE%,%CROP% ^
-ab 128k -crf 18 -pix_fmt yuv420p "%1 converted.mp4"
Em suma
- é necessário o material de recorte e os quadros de início / fim como parâmetros
- o arquivo de origem começa com ~ 1 segundo de áudio antes do início do vídeo sincronizado
- se eu não usar
setpts/asetpts
e não select/aselect
, o vídeo resultante começará com um segundo de um quadro congelado com áudio e, em seguida, o vídeo será reproduzido em sincronia com o áudio
- se eu não usar
setpts/asetpts
, o vídeo resultante começará com um quadro congelado, depois o áudio entrará e, em seguida, começará com o quadro inicial passado o vídeo sendo reproduzido em sincronia com o áudio
- se eu não usar o
select/aselect
, o vídeo resultante terá o vídeo e o áudio sendo desativados em aproximadamente um segundo
- se eu usar tudo, o vídeo resultante terá vídeo e áudio iniciados com o quadro inicial e o áudio sendo desligado por aproximadamente um segundo
Eu acho que o select/aselect
está funcionando bem, mas o setpts/asetpts
está causando os problemas. Trabalhar apenas com filtros de vídeo ou filtros de áudio torna isso ainda pior.
Obviamente estou fazendo algo errado aqui. Portanto, alguém pode me ajudar aqui? Talvez seja possível explicar como os setpts
e asetpts
funcionam juntos?
EDIT:
Outras tentativas:
ffmpeg -y -i %1 ^
-filter_complex %ASELECT%,%ASETPTS%;%SELECT%,%SETPTS%,%SCALE%,%CROP% ^
-ab 128k -crf 18 -pix_fmt yuv420p "%1 converted.mp4"
com duas entradas (isso é muito lento):
ffmpeg -y -i %1 -i %1 ^
-filter_complex [1:1]%ASELECT%,%ASETPTS%[aud];[0:0]%SELECT%,%SETPTS%,%SCALE%,%CROP%[vid] ^
-map [vid] -map [aud] ^
-ab 128k -crf 18 -pix_fmt yuv420p "%1 converted.mp4"