Como redimensionar um vídeo para torná-lo menor com o FFmpeg

103

É possível redimensionar meus vídeos para torná-los menores com o FFmpeg?

Tenho dimensões de vídeo originais de 1024x576, agora quero redimensionar o vídeo para 720x480 para atender aos requisitos.

Como posso fazer isso?

Alan
fonte
ffmpegpode ser descontinuado, veja aqui e aqui
nutty about natty
13
@nuttyaboutnatty As mensagens "obsoletas" se aplicavam apenas às antigas, mortas e falsas " ffmpeg" do fork do Libav, não ffmpegdo FFmpeg que retornou em 15.04.
Llogan

Respostas:

165

O exemplo mais básico é este:

ffmpeg -i input.avi -s 720x480 -c:a copy output.mkv

O uso do scalefiltro fornecerá mais flexibilidade:

ffmpeg -i input.avi -filter:v scale=720:-1 -c:a copy output.mkv

O -1comando dirá ao ffmpeg para escolher automaticamente a altura correta em relação à largura fornecida para preservar a proporção. -1também pode ser usado para largura se você fornecer uma determinada altura.


Uma desvantagem de escala quando se usa libx264é que este codificador requer até mesmo valores e escala pode escolher automaticamente um valor ímpar, resultando em um erro: width or height not divisible by 2. Você pode dizer à balança para escolher um valor par para uma determinada altura (720 neste exemplo):

scale="trunc(oh*a/2)*2:720"

... ou uma determinada largura (1280 neste exemplo):

scale="1280:trunc(ow/a/2)*2"

Observe que sua compilação ffmpeg pode reclamar por não reconhecer -cou -filteropções. Também pode não suportar scale. Nesse caso, você deve usar um ffmpeg mais recente, que pode ser baixado como uma construção estática ou compilado .

jimhark
fonte
11
Eu tentei ffmpeg -i output.mkv -filter:v scale=720:-1 -acodec copy -threads 12 output_shrink.mkv(em ffmpeg versão 0.8.6-6: 0.8.6-0ubuntu0.12.10.1), mas tenho o erroUnrecognized option 'filter:v'
doug65536
6
Depois de pesquisar na página de manual do ffmpeg várias vezes, descobri que, em vez de -filter:v, a opção parece ter sido alterada para -vf.
precisa saber é o seguinte
2
@ doug65536 -filter:ve -vfambos estão bem. A versão do Ubuntu que você estava usando está desatualizada e desatualizada - não é realmente a do FFmpeg ffmpeg, mas o binário fornecido pelo Libav (o fork do FFmpeg) com o mesmo nome.
slhck
11
@MightyPork provavelmente sua compilação ffmpeg está desatualizada - que problemas acontecem ?. Enfim, isso realmente me ajudou (com ffmpeg version 2.4.10) a reduzir o tamanho de alguns vídeos enormes para liberar espaço - obrigado!
Wilf
4
'-c' é a abreviação de -codec, ': a' especifica o (s) fluxo (s) de áudio, 'copy' especifica o codec de cópia, que copia o (s) fluxo (s) (nesse caso, o áudio) sem reencodificar. Basicamente, os fluxos de áudio passarão. Isso é comum quando você está manipulando apenas o fluxo de vídeo.
jimhark
14

Eu uso os seguintes comandos para redimensionar vídeos e imagens. Para largura e altura fixas -

ffmpeg -i input.avi -vf scale="720:480" output.avi

e se você deseja manter a proporção, dê a altura como -1 e ela será redimensionada automaticamente com base na largura -

ffmpeg -i input.avi -vf scale="720:-1" output.avi

Se você deseja dimensionar com base no tamanho da entrada, por exemplo, digamos, reduza a largura / altura da metade do que você pode

ffmpeg -i input.avi -vf scale="iw/1:ih/2" output.avi

NOTA :

iw : input width
ih : input height

A versão estática pode ser baixada em - https://johnvansickle.com/ffmpeg/

Documentação: https://ffmpeg.org/ffmpeg.html#filter_005foption

Aniket Thakur
fonte
Não está funcionando. Preso em handler_name: Sound Handle
Rushi M Thakker
Eu tenho uma qualidade de vídeo terrível com este comando. Muito melhor se eu criar output.mp4, não avi. Então a extensão é importante.
sekrett 4/10