Redimensione vídeos com larguras diferentes para uma altura fixa, preservando a proporção com ffmpeg

17

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.

Axarydax
fonte

Respostas:

15

Você pode tentar adicionar este filtro de vídeo:

-vf "scale=-1:360" 

-1 nesse caso, significa variável / desconhecido, portanto, este filtro redimensiona o vídeo para preservar a proporção da entrada, mantendo 360 como a altura.

Para mim, isso alcançou o mesmo resultado que você está procurando.

user65600
fonte
6

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.

-vf "scale=trunc(ow/a/2)*2:360"

Fonte: https://ffmpeg.org/trac/ffmpeg/ticket/309

Toland H
fonte
3

-vf "scale=trunc(ow/a/2)*2:360" não funciona por causa do erro "auto-referência".

Em vez disso, o seguinte funciona:

-vf "escala = -1: 360, escala = trunc (iw / 2) * 2: 360"

A auto-referência é assim evitada por duas escalas consecutivas e o arredondamento é feito na segunda etapa. Bonito, não é? :)

ddystill
fonte
Escala do filtro gráfico simples = -1: 480; scale = trunc (iw / 2) * 2: 480 'não possui exatamente uma entrada e saída. Erro ao abrir filtros!
precisa saber é o seguinte