Convierta un video a un tamaño de pantalla fijo recortando y redimensionando

14

He tratado de resolver esto por mí mismo, pero la gran cantidad de opciones me desconcierta.

Quiero usar idealmente ffmpegomencoder (o algo más, pero esos dos que sé que tengo trabajando) para convertir cualquier video entrante a un tamaño de pantalla fijo.

Si el video es más ancho o demasiado corto para él, entonces recorte el video en el centro. Si no es el tamaño correcto, cambie el tamaño hacia arriba o hacia abajo para que sea exactamente el tamaño de pantalla fijo.

Lo último que necesito es 720x480 en un XVid AVI con una pista de audio MP3.

He encontrado muchas páginas que muestran cómo cambiar el tamaño a una resolución máxima, pero necesito que el video sea exactamente esa resolución (con partes adicionales recortadas, sin barras negras).

¿Alguien puede decirme la línea de comando para ejecutar, o al menos conseguirme la mayor parte del camino? Si necesita ser varias líneas de comando (ejecute X para obtener la resolución, haga este cálculo y luego ejecute Y con la salida de ese cálculo), puedo escribir eso.

Andy Jeffries
fuente

Respuestas:

22

Algo como esto debería funcionar con los parámetros adecuados para cada caso:

Nota: La respuesta original se publicó en este enlace: ¿Cómo puedo recortar un video con ffmpeg? que originalmente publiqué y edité varias veces para actualizarlo a las opciones más recientes en las versiones más recientes de ffmpeg. Muchas gracias a slhck , Jonathan. , Anton Rudeshko , Lord Neckbeard y futuros mantenedores.


En versiones recientes de FFmpeg, use el cropfiltro :

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

Donde las opciones son las siguientes:

  • out_w es el ancho del rectángulo de salida
  • out_h es la altura del rectángulo de salida
  • xy yespecifique la esquina superior izquierda del rectángulo de salida

Imagen original

imagen original
Imagen original de 320x240

Ejemplo 1

80x60

Para recortar una sección de 80 × 60, comenzando desde la posición (200, 100):

ffmpeg -i in.mp4 -filter:v "crop=80:60:200:100" -c:a copy out.mp4
  • El audio se copia en este ejemplo, por lo que se evita volver a codificar.

Ejemplo 2

cuarto inferior derecho

Para recortar el cuarto inferior derecho:

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

Esto es lo mismo que:

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

Que es lo mismo que:

ffmpeg -i in.mp4 -filter:v "crop=240:120:240:120" -c:a copy out.mp4
  • Puede consultar el tamaño de la imagen de entrada con in_wy in_hcomo se muestra en este primer ejemplo. El ancho y la altura de salida también se pueden usar con out_wy out_h.

Ejemplo 3

20 píxeles desde la parte superior y 20 desde la parte inferior

Recorte 20 píxeles desde la parte superior y 20 desde la parte inferior:

 ffmpeg -i in.mp4 -filter:v "crop=in_w:in_h-40" -c:a copy out.mp4
  • El filtro se centrará automáticamente el cultivo si xy yse omiten, tal como en este ejemplo.

Vista previa

Puede tomar un cultivo (je je) y obtener una vista previa en vivo con ffplay:

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

De esta manera, puede experimentar y ajustar su recorte sin la necesidad de codificar, ver y repetir.

Notas

  • crop filtro de documentación

  • El codificador predeterminado para MP4 es libx264(video H.264) o mpeg4( video MPEG-4 Parte 2) dependiendo de su ffmpegcompilación. Consulte FFmpeg Wiki: Guía de codificación de video H.264 para obtener más información.

  • En lugar de recortar y volver a codificar, considere recortar en la reproducción. Esto es posible con cualquier jugador que valga la pena usar.

  • Antigua ffmpegconstruye usada -croptop, -cropbottom, -cropleft, -croprightopciones en lugar del cropfiltro. Si este es el caso para usted, entonces obtenga un modernoffmpeg . El desarrollo es muy activo y no hay razón para usar una antigüedad.

Geppettvs D'Constanzo
fuente
Puntos adicionales para la vista previa con los ffplayque hace que el uso ffmpegpara recortar el tamaño de la pantalla de video sea viable en la práctica.
SpeedCoder5