Converta um vídeo em um tamanho de tela fixo cortando e redimensionando

14

Eu tentei descobrir isso sozinho, mas a infinidade de opções me deixa perplexo.

Eu quero usar o ideal, ffmpegou mencoder(ou qualquer outra coisa, mas os dois que eu sei que estou trabalhando) para converter qualquer vídeo recebido em um tamanho de tela fixo.

Se o vídeo for mais largo ou curto demais, corte o vídeo no centro. Se não for o tamanho certo, redimensione para cima ou para baixo para torná-lo exatamente o tamanho fixo da tela.

A coisa final exata que preciso é de 720x480 em um XVid AVI com uma faixa de áudio MP3.

Encontrei muitas páginas mostrando como redimensionar para uma resolução máxima, mas preciso que o vídeo tenha exatamente essa resolução (com partes extras cortadas, sem barras pretas).

Alguém pode me dizer a linha de comando para executar - ou pelo menos me levar um pouco / quase lá? Se precisar ser de várias linhas de comando (execute X para obter a resolução, faça esse cálculo e, em seguida, execute Y com a saída desse cálculo) eu posso criar um script.

Andy Jeffries
fonte

Respostas:

22

Algo assim deve funcionar com os parâmetros adequados para cada caso:

Nota: A resposta original foi postada neste link: Como cortar um vídeo com ffmpeg? que foi originalmente publicado por mim e editado várias vezes para atualizá-lo para as opções mais recentes nas versões mais recentes do ffmpeg. Muito obrigado a slhck , Jonathan. , Anton Rudeshko , LordNeckbeard e futuros mantenedores.


Nas versões recentes do FFmpeg, use o cropfiltro :

ffmpeg -i in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4

Onde as opções são as seguintes:

  • out_w é a largura do retângulo de saída
  • out_h é a altura do retângulo de saída
  • xe yespecifique o canto superior esquerdo do retângulo de saída

Imagem original

imagem original
Imagem original de 320x240

Exemplo 1

80x60

Para cortar uma seção 80 × 60, iniciando na posição (200, 100):

ffmpeg -i in.mp4 -filter:v "crop=80:60:200:100" -c:a copy out.mp4
  • O áudio é copiado em fluxo neste exemplo, portanto, a recodificação é evitada.

Exemplo 2

quarto inferior direito

Para cortar o quarto inferior direito:

ffmpeg -i in.mp4 -filter:v "crop=in_w/2:in_h/2:in_w/2:in_h/2" -c:a copy out.mp4

É o mesmo que:

ffmpeg -i in.mp4 -filter:v "crop=320/2:240/2:320/2:240/2" -c:a copy out.mp4

Qual é o mesmo que:

ffmpeg -i in.mp4 -filter:v "crop=240:120:240:120" -c:a copy out.mp4
  • Você pode consultar o tamanho da imagem de entrada com in_we in_hcomo mostrado neste primeiro exemplo. A largura e a altura da saída também podem ser usadas com out_we out_h.

Exemplo 3

20 pixels de cima e 20 de baixo

Corte 20 pixels da parte superior e 20 da parte inferior:

 ffmpeg -i in.mp4 -filter:v "crop=in_w:in_h-40" -c:a copy out.mp4
  • O filtro centralizará automaticamente o corte se xe yfor omitido, como neste exemplo.

Visualização

Você pode pegar um recorte (heh heh) e visualizá-lo ao vivo com ffplay:

ffplay -i input -vf "crop=in_w:in_h-40"

Dessa forma, você pode experimentar e ajustar seu corte sem a necessidade de codificar, visualizar e repetir.

Notas

  • crop documentação do filtro

  • O codificador padrão para MP4 é libx264(vídeo H.264) ou mpeg4(vídeo MPEG-4 Parte 2), dependendo da sua ffmpegcompilação. Consulte FFmpeg Wiki: Guia de codificação de vídeo H.264 para obter mais informações.

  • Em vez de cortar e recodificar, considere cortar durante a reprodução. Isso é possível com qualquer jogador que valha a pena usar.

  • Antiga ffmpegconstrói usado -croptop, -cropbottom, -cropleft, -croprightopções em vez do cropfiltro. Se este for o seu caso, adquira um modernoffmpeg . O desenvolvimento é muito ativo e não há razão para usar uma antiguidade.

Geppettvs D'Constanzo
fonte
Pontos extras para a visualização com os ffplayquais torna ffmpegviável usar o tamanho da tela de vídeo para recortar na prática.
precisa saber é o seguinte