Base de tempo explícita com ffmpeg e framerates variáveis em mp4s

0

Eu preciso concatenar vários arquivos de vídeo com diferentes taxas de quadros para reproduzi-los com o OMXPlayer em um PI de framboesa (a concatenação também é feita no PI).

Ambos os originais e a concatenação são mp4 / h264 e os originais também são criados por algum software meu.

O uso do muxer de cópia do ffmpegs não funciona quando os arquivos têm diferentes bases de tempo.

Então, eu estava pensando em produzir os vídeos originais com um "> base de tempo de 120 (120 é divisível por 25 e 30, as únicas taxas de quadros que me interessam).

O teste

ffmpeg.exe -i .\ballon.mp4 -enc_time_base 1:120 .\ballon-120.mp4

parece promissor: ffmpeg diz que produz um vídeo de 30 fps (o original era 30 fps) com uma base de tempo de 120 na saída.

No entanto, ele também diz que "duplica quadros" muito e o comando a seguir informa que tenho 4 vezes mais quadros do que realmente deveria ter:

ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 .\ballon.mp4

ffprobe também acha que a taxa de quadros agora é de 120 e, de fato, o OMXPlayer reclama que a taxa de quadros está muito alta e reproduz o vídeo de forma um tanto lenta.

O que eu quero é alterar a base de tempo, não a taxa de quadros ou o número de quadros. Como eu faço isso?

    
por John 28.06.2018 / 17:15

2 respostas

1

Use a opção privada de muxer MP4

ffmpeg.exe -i .\ballon.mp4 -c copy -video_track_timescale 120 .\ballon-120.mp4

Com seu comando, você estava re-codificando o vídeo e fornecendo uma base de tempo para o codificador, que o ffmpeg usa para as decisões de duplicação / eliminação de quadros.

    
por 28.06.2018 / 17:26
0

A chave estava usando a opção vsync :

ffmpeg.exe -i. \ ballon.mp4 -enc_time_base 1: 120 -vsync vfr. \ ballon-120.mp4

    
por 28.06.2018 / 17:54