Altera a taxa de quadros de um vídeo MP4 com ffmpeg

8

Eu tenho um vídeo no formato mp4 com uma taxa de quadros de .33 (1 quadro por 3 segundos). Eu quero aumentar a taxa de quadros para 5 quadros / seg. Eu tentei o comando abaixo, mas não faz nada:

ffmpeg -i <input.mp4> -r 5 <output.mp4>

Alguma idéia de por que o ffmpeg está ignorando a opção -r ?

    
por firemonkey 06.08.2011 / 06:10

4 respostas

6

Se o arquivo de entrada não tiver uma taxa de quadros válida, talvez seja necessário defini-lo explicitamente

ffmpeg -r 1 -i input.mp4 -r 24 output.mp4
    
por 06.08.2011 / 06:44
2

Eu só pude fazer com que o framerate alterado tivesse efeito se o arquivo de entrada fosse classificado como um arquivo "bruto":

ffmpeg -r 5 -f h264 -i input.h264 -vcodec copy -an output.mkv

Sem especificar -f h264 , o padrão seria 25 fps e não poderia ser alterado. Aparentemente, isso ocorreu porque o stream não tinha nenhuma informação framerate e essa é a taxa de quadros padrão do ffmpeg.

Aparentemente, quando você usa -r como uma opção de saída, ele duplica ou elimina quadros para que o vídeo seja reproduzido na mesma velocidade - nesse caso, não o que você deseja! Mas alterar a taxa de quadros de entrada como acima fará com que o vídeo aumente ou diminua, sem que nenhum quadro seja perdido ou duplicado.

    
por 29.10.2014 / 14:39
2

Eu sei que esta é uma pergunta antiga, mas nenhuma das respostas atuais é mais recomendada. Esta é a orientação do ffmpeg wiki . Observe que todas essas opções exigem a recodificação do vídeo.

Acelerar / desacelerar o vídeo

Você pode alterar a velocidade de um fluxo de vídeo usando o filtro de vídeo setpts. Observe que nos exemplos a seguir, o fluxo de áudio não é alterado, portanto, deve ser desativado idealmente com -an.

Para dobrar a velocidade do vídeo, você pode usar:

ffmpeg -i input.mkv -filter:v "setpts=0.5*PTS" output.mkv

O filtro funciona alterando o timestamp de apresentação (PTS) de cada quadro de vídeo. Por exemplo, se houver dois quadros sucessivos exibidos nos carimbos de data / hora 1 e 2 e você quiser acelerar o vídeo, esses carimbos de data / hora precisarão se tornar 0,5 e 1, respectivamente. Assim, temos que multiplicar por 0,5.

Observe que esse método soltará os quadros para atingir a velocidade desejada. Você pode evitar quadros perdidos especificando uma taxa de quadros de saída maior do que a entrada. Por exemplo, para ir de uma entrada de 4 FPS para uma que seja acelerada até 4x (16 FPS):

ffmpeg -i input.mkv -r 16 -filter:v "setpts=0.25*PTS" output.mkv

Para abrandar o seu vídeo, você tem que usar um multiplicador maior que 1:

ffmpeg -i input.mkv -filter:v "setpts=2.0*PTS" output.mkv

Suave

Você pode suavizar o vídeo lento / rápido com o filtro de vídeo minterpolate. Isso também é conhecido como "interpolação de movimento" ou "fluxo óptico".

ffmpeg -i input.mkv -filter "minterpolate='mi_mode=mci:mc_mode=aobmc:vsbmc=1:fps=120'" output.mkv

Outras opções incluem slowmoVideo e Butterflow. Acelerar / desacelerar o áudio

Você pode acelerar ou desacelerar o áudio com o atempo filtro de áudio. Para dobrar a velocidade do áudio:

ffmpeg -i input.mkv -filter:a "atempo=2.0" -vn output.mkv

O filtro atempo é limitado ao uso de valores entre 0,5 e 2,0 (assim, ele pode atrasá-lo para não menos do que a metade da velocidade original e acelerar para não mais que o dobro da entrada). Se você precisar, você pode contornar essa limitação encadeando vários filtros atempo juntos. O seguinte com quadruplicar a velocidade do áudio:

ffmpeg -i input.mkv -filter:a "atempo=2.0,atempo=2.0" -vn output.mkv

Usando um filtro gráfico complexo, você pode acelerar o vídeo e o áudio ao mesmo tempo:

ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mkv
    
por 02.02.2018 / 20:53
1

Tal característica - de alterar a taxa de quadros - é chamada de "conforme" e é freqüentemente usada para produzir câmera lenta ou rápida como o crescimento de uma planta em minutos instados de dias. O ffmpeg não permite sobrescrever / alterar a taxa de quadros sem recodificar . Se isso acontecer, a duração será alterada e o áudio ficará fora de sincronia, a menos que seja corrigido separadamente. Mas receio que o áudio não seja de interesse no seu caso com taxa de quadros de .33

Você quer estar em conformidade porque deseja apenas alterar a taxa de quadros, mas o ffmpeg ignora -r silenciosamente se o framerate estiver especificado no arquivo de entrada. Como seu arquivo de entrada está no formato .mp4, sua própria taxa de quadros tem precedência de -r quando o recodificador não é necessário. Para isso você precisa de uma ferramenta diferente: mencoder.

Supondo que o seu arquivo de entrada não contenha som - provavelmente verdadeiro para qualquer vídeo com taxa de quadros .33 - o que você precisa é:

$ mencoder -fps 5 -o <output> -ovc copy -nosound <input.mp4>

Observe que o mencoder por padrão produz a saída no formato AVI.

    
por 17.01.2016 / 08:24