Eu tenho um vídeo mkv (h264) que é 23.976 fps (24000/1001), mas quero convertê-lo para 25 fps sem reencodificar e perder qualidade. Eu sei que o mkvmerge pode fazer isso (com a opção --default-duration '0: 25fps'), mas eu gostaria de fazê-lo diretamente do ffmpeg, se possível De acordo com os documentos, isso deve funcionar:
ffmpeg -i input.mkv -r 25 -vcodec copy output.mkv
mas quando o executo, recebo apenas o mesmo vídeo fps. Qual é o método correto para fazê-lo (se existir) no ffmpeg?
-r
não é compatível com a cópia de fluxo e não há filtros de fluxo de bits para alterar a taxa de quadros.Respostas:
Aqui está o método usando as versões atuais do FFmpeg. Ele conta com o desmuxer concat não redimensionando o PTS das entradas após o primeiro arquivo, mas simplesmente aplicando um deslocamento fixo. Digamos que você tenha um fluxo de 30 qps com uma escala de tempo
15360
(típica da saída FFmpeg). Isso significa que o quadro0
possui PTS0
e o quadro30
possui PTS15360
. Isso se tornaria um fluxo de 45 fps se pudéssemos alterar a escala de tempo para23040
sem afetar os valores do PTS.Essencialmente, é isso que o método abaixo faz.
1 . Identifique as propriedades de origem.
Você deseja anotar as propriedades de origem, especialmente resolução e
tbn
.2a . (Opcional) Altere a escala de tempo para algo conveniente, para simplificar os cálculos.
Isso nos leva
Se você executar esta etapa, a nova escala de tempo deverá ser igual ou um múltiplo integral da taxa de quadros original.
2b . Calcule a escala de tempo necessária para que, para a taxa de quadros de destino
x
, o PTS do quadro #x
na origem tenha o mesmo valor que o novotbn
. Se você executou a etapa 2a, isso é muito fácil e é simplesmente a nova taxa de quadros. Portanto, para o alvo fps45
, novotbn
deve ser45
.3 . Gere vídeo fictício.
Todas as propriedades devem ser iguais, como resolução, perfil H.264, formato de pixel, refs count ... etc para obter melhores resultados.
4 Concat os vídeos.
Primeiro crie um arquivo de texto
Então, o concat
O arquivo de saída terá o segundo vídeo sendo reproduzido a 45 fps.
5 . Agora, retire o pré-jogo fictício
e você tem
Eu disse que isso foi complicado!
fonte