Converte um vídeo para um tamanho de tela fixo cortando e redimensionando

6

Eu mesmo tentei descobrir isso, mas a miríade de opções me surpreende.

Eu quero usar idealmente ffmpeg ou mencoder (ou qualquer outra coisa, mas esses 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 muito curto, centralize o vídeo. Se não for o tamanho certo, redimensione para cima ou para baixo para torná-lo exatamente o tamanho da tela fixa.

A última coisa que eu 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 as partes extras cortadas, sem barras pretas).

Alguém pode me dizer a linha de comando para executar - ou pelo menos me pegar algum / a maior parte do caminho? Se precisar de múltiplas linhas de comando (execute X para obter a resolução, faça este cálculo e, em seguida, execute Y com a saída desse cálculo) Eu posso roteirizar isso.

    
por Andy Jeffries 18.03.2015 / 16:29

1 resposta

10

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

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

Em versões recentes do FFmpeg, use o crop filter :

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
  • x e y especificam o canto superior esquerdo do retângulo de saída

Imagem original


Imagem original de 320x240

Exemplo 1

Para cortar uma seção de 80 × 60, começando da posição (200, 100):

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

Exemplo 2

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

Isso é 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_w e in_h , conforme mostrado neste primeiro exemplo. A largura e a altura de saída também podem ser usadas com out_w e out_h .

Exemplo 3

Corte 20 pixels do topo e 20 do fundo:

 ffmpeg -i in.mp4 -filter:v "crop=in_w:in_h-40" -c:a copy out.mp4
  • O filtro centralizará automaticamente a cultura se x e y forem omitidos, como neste exemplo.

Pré-visualizando

Você pode obter 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 o recorte sem a necessidade de codificar, visualizar e repetir.

Notas

  • crop filtram a documentação

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

  • Em vez de recortar e recodificar, pense em recortar na reprodução. Isso é possível com qualquer jogador que valha a pena usar.

  • O antigo ffmpeg cria as opções -croptop , -cropbottom , -cropleft , -cropright em vez do filtro crop . Se este for o caso para você, então obtenha um ffmpeg moderno. O desenvolvimento é muito ativo e não há razão para usar uma antiguidade.

por Geppettvs D'Constanzo 20.06.2015 / 06:14