Eu tenho um player de vídeo html 5 com 700px de largura e 400px de altura. Estou tentando avconv
usar o ffmpeg para redimensionar (mantendo a proporção) e certificando-me de que ela se encaixa no meu player.
A entrada pode ser um arquivo de qualquer tamanho, por isso preciso redimensionar os maiores, mas centralizar os menores com barras pretas. Até agora, tentei: -s
e -aspect
vi pad
ser usado com o -vf
switch, mas não entendo como ele funciona o suficiente para obter o que eu preciso.
Esta é uma idéia aproximada do que eu preciso. Não tenho certeza se é possível. É quase como a largura máxima / altura máxima do CSS. Sei que isso pode ser apenas um amontoado de palavras, mas se alguém entender o que estou falando, agradeceria ajuda, obrigado.
Comando avconv:
avconv -y -i control.avi -vcodec libx264 -b 2000k -bufsize 20M -acodec aac -strict experimental -ar 44100 -ab 256k bigbuck_out.mp4
fonte
Respostas:
Um método simples é usar a
force_original_aspect_ratio
opção no filtro de escala .Imagem original. Representa um vídeo com proporção de 640x480, 4: 3.
Nesses exemplos, a imagem original será redimensionada para caber em uma saída de proporção de aspecto 16: 9, preservando a proporção original. Para fazer isso, você pode:
Pillarbox ou letterbox
Imagem com colunas. Ajustar uma entrada de 640x480 (4: 3) em uma saída de 1280x720 (16: 9).
Isso aumentará a imagem. Se você deseja evitar o aumento de escala, veja o exemplo abaixo.
O letterboxing ocorreria se a proporção de entrada fosse maior que a proporção de saída. Por exemplo, uma entrada com proporção de 2,35: 1 ajustada a uma saída 16: 9 resultará em letterboxing.
O mesmo que acima, mas sem aumento de escala
Entrada de 640x480 (4: 3) na saída de 1280x720 (16: 9) sem aumento de escala.
Colheita
Imagem recortada. Formato de entrada 4: 3, formato de saída 16: 9.
fonte
color
opção, comopad=1280:720:(ow-iw)/2:(oh-ih)/2:color=red
(ou você pode usar o hexadecimal, se preferir). Veja a lista de cores .Aqui está o comando que adicionaria pilar ou caixa de correio para uma largura de saída fixa. É um pouco longo, mas você precisará especificar o preenchimento de alguma forma.
Primeiro, em seu shell, defina a largura e a altura da saída:
Em seguida, execute o comando:
Isso é reduzido ao essencial necessário para redimensionar e compactar - adicione suas outras opções de vídeo e áudio como achar melhor. Observe que os números para
width
eheight
devem ser divisíveis por 2 para funcionar na maioria dos codecs.Aqui está a explicação do que está acontecendo:
min()
) e escolhemos apenas esse fator para redimensionar.iw*min(…):ih*min(…)
).$width:$height
é a largura e altura da saídascale
filtro.fonte
-movflags +faststart
ao exemplo do slhck. Ele permitirá que o vídeo baixado progressivamente comece a reprodução antes de ser baixado completamente e também consulte o Guia de codificação FFmpeg e x264 e o Guia de codificação FFmpeg e AAC para obter mais instruções e exemplos de codificação.pad=$width:$height:(ow-iw)/2:(oh-ih)/2"
ow-iw
.Parece-me que você precisa fazer isso em três etapas:
O FFmpeg / avconv pode fazer o dimensionamento / preenchimento com filtros de vídeo em uma única etapa, transcodificando apenas uma vez. Por exemplo, para gravar um vídeo 16: 9, redimensione-o em largura e, em seguida, envie os resultados para a caixa de correio:
... mas para o primeiro passo (detectando a proporção e comparando-a com o 7: 4 que você precisa), você terá que usar algum tipo de script.
... você obtém a proporção do vídeo, que será semelhante a '16: 9' ou '4: 3'. Em um script bash, eu usaria algo como:
Obviamente, você terá que adaptá-lo às suas necessidades.
fonte