Parar o vídeo de upscaling do FFMPEG

1

Estou usando o FFMPEG para transcodificar vídeos cuja função é acionada automaticamente. Eu estou tentando dimensionar o vídeo em várias resoluções, mantendo a proporção (encolher para caber). Se a resolução de vídeo original for menor que a resolução especificada no comando, ignore a transcodificação e pare de criar o arquivo de saída para essa resolução específica.

Por exemplo:

Eu tenho um vídeo com resolução de 1920x1080

Saída:

  • 3840x2160 (pular / parar)
  • 2560x1440 (Ignorar / Parar)
  • 1920 x 1080 (prosseguir para a saída-1080p.mp4)
  • 1280x720 (prossiga para a saída-720p.mp4)

Eu tentei muitos comandos, mas nenhum deles realmente funciona. Posso saber se existe algum comando que seja capaz de conseguir isso?

Abaixo está o último comando de trabalho que tenho para o FFMPEG. Desculpe, sou muito novo no FFMPEG, entendo que o comando atual ainda está longe do que pretendo abordar.

ffmpeg -i sample.mp4 -c:a copy -vf scale='min(2160\,iw):-2' -movflags +faststart out2160.mp4 -vf scale='min(1440\,iw):-2' -movflags +faststart out1440.mp4 -vf scale='min(1080\,iw):-2' -movflags +faststart out1080.mp4 -vf scale='min(720\,iw):-2' -movflags +faststart out720.mp4 -vf thumbnail -vf scale='min(500\,iw):-2' -vframes 1 thumb500.png -vf scale='min(270\,iw):-2' -vframes 1 thumb270.png

Se o sample.mp4 tiver resolução de 1920x1080p ou menor, este comando produzirá esses arquivos:

  • out2160.mp4
  • out1440.mp4
  • out1080.mp4
  • out720.mp4
  • thumb500.png
  • thumb270.png

Como estou acionando o FFMPEG automaticamente, desejo que o comando possa comparar a resolução que foi definida. Se a resolução de vídeo original for menor, basta ignorá-la, sem criar ou aprimorar um arquivo que seja maior que a resolução original. Somente saída com resolução igual ou menor, mantendo a proporção (encolher para caber). Seria ótimo se você pudesse me orientar sobre isso, obrigado novamente.

    
por Jessica 01.05.2017 / 14:05

1 resposta

1

Isso pode ser feito usando o filtro de corte, que falhará se as dimensões de saída cortadas forem maiores que a entrada. Se o comando falhar, o arquivo de saída será criado, mas seu tamanho será 0.

Cada variante precisará ser convertida usando um comando separado. Um único comando não pode ser usado como se um dos pipelines falhasse, todo o comando é abortado.

O filtro de culturas deve ser usado assim:

ffmpeg -i sample.mp4 -c:a copy -vf crop=iw:'max(ih,2160)',scale=-2:2160 -movflags +faststart out2160.mp4 

A largura da cultura é igual à largura da entrada. A altura da cultura é definida para o máximo da altura de entrada e da altura do alvo. Se a altura de entrada for menor que o destino, a inicialização do filtro de corte falhará e o comando será cancelado. Se a altura de entrada for igual ou maior, a largura total & altura é passada para o filtro de escala.

    
por 02.05.2017 / 15:53