Gostaria de converter muitos arquivos de vídeo em flash para o site da nossa empresa. Tenho o requisito de que todos os vídeos estejam no formato 360p, para que o tamanho deles seja Nx360.
FFMpeg usos -s argumento para especificar resolução alvo como W x H . Eu não sei W IDþ, pois depende de relação de aspecto arquivo de origem. Se a origem for 640x480, o destino será 480x360. Se a origem for 848x480, o destino será 636x360.
Existe uma maneira de fazê-lo com alguma opção de ffmpeg? Isso preservará a proporção e só especificarei a altura do vídeo de destino?
Eu poderia resolvê-lo facilmente criando um programa que iniciará o ffprobe para obter o tamanho do vídeo de origem, calcular a proporção e, em seguida, calcular uma nova largura.
Ainda não há pontos suficientes para comentar uma resposta existente, mas isso segue a resposta do user65600 e vai além quando codecs específicos exigem uma largura / altura que é divisível por 2 (por exemplo, libx264)
Quando você usa -1 (variável / desconhecido), ele pode retornar um número ímpar. Para garantir um # par, você deve usar algo como
trunc(ow/a/2)*2
, que calculará automaticamente o # par mais próximo, preservando a proporção.Fonte: https://ffmpeg.org/trac/ffmpeg/ticket/309
fonte
-vf "scale=trunc(ow/a/2)*2:360"
não funciona por causa do erro "auto-referência".Em vez disso, o seguinte funciona:
A auto-referência é assim evitada por duas escalas consecutivas e o arredondamento é feito na segunda etapa. Bonito, não é? :)
fonte