Eu tenho um vídeo no formato mp4 com uma taxa de quadros de .33
(1 quadro por 3 segundos). Quero aumentar a taxa de quadros para 5 quadros / s. Eu tentei o comando abaixo, mas ele não faz nada:
ffmpeg -i <input.mp4> -r 5 <output.mp4>
Alguma idéia de por que o ffmpeg está ignorando a -r
opção?
Respostas:
Sei que essa é uma pergunta antiga, mas nenhuma das respostas atuais é mais recomendada.
Remuxagem sem perdas (vídeo)
Conforme observado nos comentários, há uma maneira de fazer isso onde o vídeo não precisa ser recodificado. Requer a remuxagem do arquivo para um formato MKV de contêiner diferente e, em seguida, a remuxagem novamente para um MP4. Aqui está um exemplo que altera um vídeo para 12 quadros / segundo:
Se o vídeo contém áudio também pode retardar esse baixo sem alterar o tom, mas é não uma conversão sem perdas. O exemplo abaixo supõe que o vídeo de origem tenha 24 quadros / segundo, para que o áudio precise ser reduzido para metade (0,5) da velocidade usando o filtro atempo do ffmpeg .
Guia do FFMPEG Wiki
Esta é a orientação do wiki ffmpeg . Observe que todas essas opções exigem a recodificação do vídeo.
Acelerando / desacelerando 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, idealmente, deve ser desativado com -an.
Para dobrar a velocidade do vídeo, você pode usar:
O filtro funciona alterando o registro de data e hora da apresentação (PTS) de cada quadro de vídeo. Por exemplo, se houver dois quadros sucessivos mostrados nos registros de data e hora 1 e 2 e você desejar acelerar o vídeo, esses registros de data e hora deverão se tornar 0,5 e 1, respectivamente. Portanto, temos que multiplicá-los por 0,5.
Observe que esse método eliminará os quadros para atingir a velocidade desejada. Você pode evitar a queda de quadros especificando uma taxa de quadros de saída mais alta que a entrada. Por exemplo, para passar de uma entrada de 4 FPS para uma que é acelerada até 4x que (16 FPS):
Para diminuir a velocidade do seu vídeo, você precisa usar um multiplicador maior que 1:
Suave
Você pode suavizar vídeos lentos / rápidos com o filtro de vídeo minterpolar. Isso também é conhecido como "interpolação de movimento" ou "fluxo óptico".
Outras opções incluem slowmoVideo e Butterflow. Acelerar / desacelerar o áudio
Você pode acelerar ou diminuir a velocidade do áudio com o filtro de áudio atempo. Para dobrar a velocidade do áudio:
O filtro atempo é limitado ao uso de valores entre 0,5 e 2,0 (para que ele possa diminuir a velocidade para não menos que a metade da velocidade original e acelerar para não mais que o dobro da entrada). Se necessário, você pode contornar essa limitação amarrando vários filtros atempo. O seguinte com quadruplica a velocidade do áudio:
Usando um gráfico de filtro complexo, você pode acelerar o vídeo e o áudio ao mesmo tempo:
fonte
mkvmerge --default-duration 0:24000/1001fps --fix-bitstream-timing-information 0 in.mkv -o out.mkv
altere a taxa de quadros no contêiner MKV . Você pode remuxar para o MKV e voltar para o MP4 ou encontrar uma ferramenta que faça isso para o MP4 diretamente. xcoding o vídeo é muito intensivo da CPU e com perdas, por isso é uma opção horrível.Se o arquivo de entrada não tiver uma taxa de quadros válida, talvez seja necessário defini-lo explicitamente
fonte
Eu só poderia obter a taxa de quadros alterada para entrar em vigor se o arquivo de entrada fosse classificado como um arquivo "bruto":
Sem especificar
-f h264
, o padrão seria 25 fps e não poderia ser alterado. Aparentemente, isso ocorreu porque o fluxo não possuía nenhuma informação de taxa de quadros e essa é a taxa de quadros padrão do ffmpeg.Aparentemente, quando você usa
-r
como opção de saída, ele duplica ou baixa quadros, para que o vídeo seja reproduzido na mesma velocidade - nesse caso, não é o que você deseja! Porém, alterar a taxa de quadros da entrada como acima fará com que o vídeo acelere ou diminua, sem perda de quadros ou duplicação.fonte
Esse recurso - de alterar a taxa de quadros - é chamado de "conformidade" e é frequentemente usado para produzir câmera lenta ou avanço rápido, como mostrar o crescimento de uma planta em minutos em instantes de dias. O ffmpeg não permite substituir / 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 do seu interesse com taxa de quadros de 0,33
Você quer se conformar porque só deseja alterar a taxa de quadros, mas o ffmpeg ignora
-r
silenciosamentese a taxa de quadros estiver especificada no arquivo de entrada. Como o arquivo de entrada está no formato .mp4, sua própria taxa de quadros tem precedência sobrequando a recodificação não for necessária. Para isso, você precisa de uma ferramenta diferente: mencoder.-r
Supondo que seu arquivo de entrada não contenha som - provavelmente verdadeiro para qualquer vídeo com taxa de quadros .33 - o que você precisa é:
Observe que o mencoder, por padrão, produz saída no formato AVI.
fonte
r
for especificado como um comutador de saída, o ffmpeg produzirá uma saída na taxa de quadros especificada, independentemente da taxa de quadros da entrada. Ser
for especificado como um comutador de entrada, o ffmpeg duplicará ou eliminará os quadros conforme necessário para alimentar o número especificado de quadros por segundo de entrada no filtro / codificador.r
é uma opção de entrada contradiz minha experiência anterior no formato .mp4, a nota de Malvineous (nesta página) e a descrição do bug 403 trac.ffmpeg.org/ticket/403 ; sua descrição quandor
usada na saída ocorre quando recodificando, enquanto o cenário do OP parece ser um caso em conformidade (corrigir taxa de quadros sem recodificação) pelo fato de ele ter 0,33 taxa de quadros.r
fps.-r
. Esse uso não pode afetar minhas experiências anteriores em resposta ao OP, porque, considerando um caso conforme, nunca abandonei o parâmetro de cópia do ffmpeg e,-r
portanto , é ignorado. I escreveu um pedido de recurso: trac.ffmpeg.org/ticket/5170A maneira mais rápida é criar um arquivo BAT no diretório com as seguintes linhas:
Você precisa ter mkvmerge e ffmpeg no mesmo diretório. Ele muda todos os arquivos mp4 em segundos automaticamente, sem perda de qualidade.
fonte