Rotar videos con FFmpeg [cerrado]

Resuelto jocull asked hace 13 años • 16 respuestas

He estado intentando descubrir cómo rotar videos con FFmpeg. Estoy trabajando con vídeos de iPhone tomados en modo retrato. Sé cómo determinar los grados de rotación actuales usando MediaInfo (excelente biblioteca, por cierto), pero ahora estoy atascado en FFmpeg.

Por lo que he leído, lo que necesitas usar es una opción de vfilter . Según lo que veo debería quedar así:

ffmpeg -vfilters "rotate=90" -i input.mp4 output.mp4

Sin embargo, no puedo hacer que esto funcione. Primero, -vfilters ya no existe, ahora es solo -vf . En segundo lugar, aparece este error:

No such filter: 'rotate'
Error opening filters!

Hasta donde yo sé, tengo una versión de FFmpeg con todas las opciones. Al ejecutar ffmpeg -filters se muestra esto:

Filters:
anull            Pass the source unchanged to the output.
aspect           Set the frame aspect ratio.
crop             Crop the input video to x:y:width:height.
fifo             Buffer input images and send them when they are requested.
format           Convert the input video to one of the specified pixel formats.
hflip            Horizontally flip the input video.
noformat         Force libavfilter not to use any of the specified pixel formats
 for the input to the next filter.
null             Pass the source unchanged to the output.
pad              Pad input image to width:height[:x:y[:color]] (default x and y:
 0, default color: black).
pixdesctest      Test pixel format definitions.
pixelaspect      Set the pixel aspect ratio.
scale            Scale the input video to width:height size and/or convert the i
mage format.
slicify          Pass the images of input video on to next video filter as multi
ple slices.
unsharp          Sharpen or blur the input video.
vflip            Flip the input video vertically.
buffer           Buffer video frames, and make them accessible to the filterchai
n.
color            Provide an uniformly colored input, syntax is: [color[:size[:ra
te]]]
nullsrc          Null video source, never return images.
nullsink         Do absolutely nothing with the input video.

Tener las opciones para vflip y hflip es genial y todo eso, pero simplemente no me llevarán a donde necesito ir. Necesito poder rotar videos 90 grados como mínimo. 270 grados también sería una excelente opción. ¿A dónde se han ido las opciones de rotación?

jocull avatar Oct 15 '10 03:10 jocull
Aceptado

Girar 90 en el sentido de las agujas del reloj:

ffmpeg -i in.mov -vf "transpose=1" out.mov

Para el parámetro de transposición puedes pasar:

0 = 90° counterclockwise and vertical flip (default)
1 = 90° clockwise
2 = 90° counterclockwise
3 = 90° clockwise and vertical flip

Úselo -vf "transpose=2,transpose=2"para 180 grados.

Asegúrese de utilizar una versión reciente de FFmpeg desde aquí (una compilación estática funcionará bien).

Tenga en cuenta que esto volverá a codificar las partes de audio y video . Generalmente puedes copiar el audio sin tocarlo, usando -c:a copy. Para cambiar la calidad del video, configure la tasa de bits (por ejemplo con -b:v 1M) o consulte la guía de codificación H.264 si desea opciones de VBR.

Una solución también es utilizar este práctico script .

Alexy avatar Mar 05 '2012 17:03 Alexy

Si no desea volver a codificar su video y su reproductor puede manejar metadatos de rotación, puede simplemente cambiar la rotación en los metadatos usando FFmpeg con la bandera con display_rotationlos valores 0, y 90:180270

ffmpeg -display_rotation 90 -i input.mp4 -codec copy output.mp4

Las versiones anteriores de FFmpeg que no admiten el indicador display_rotationpueden modificar los metada usando estos indicadores:

ffmpeg -i input.mp4 -map_metadata 0 -metadata:s:v rotate="90" -codec copy output.mp4
Rodrigo Polo avatar Jul 28 '2015 17:07 Rodrigo Polo

Usar transpose. Me gusta (de la otra respuesta):

 ffmpeg -i input -vf transpose=2 output

Si está utilizando una versión anterior, debe actualizar FFmpeg si desea utilizar la función de transposición, tal como se agregó en octubre de 2011.

La página de descarga de FFmpeg ofrece compilaciones estáticas que puede ejecutar directamente sin tener que compilarlas.

rwilliams avatar Nov 21 '2010 00:11 rwilliams

Para rotar la imagen en el sentido de las agujas del reloj puedes usar el filtro de rotación, que indica un ángulo positivo en radianes. Con 90 grados igual a π /2, puedes hacerlo así:

ffmpeg -i in.mp4 -vf "rotate=PI/2" out.mp4

Para el sentido contrario a las agujas del reloj, el ángulo debe ser negativo.

ffmpeg -i in.mp4 -vf "rotate=-PI/2" out.mp4

El filtro de transposición funcionará igualmente bien para 90 grados, pero para otros ángulos esta es la única opción o la más rápida.

Bijou Trouvaille avatar Apr 11 '2014 05:04 Bijou Trouvaille

Encontré esta página mientras buscaba la misma respuesta. Han pasado seis meses desde que se solicitó esto originalmente y las compilaciones se han actualizado muchas veces desde entonces. Sin embargo, quería agregar una respuesta para cualquiera que venga aquí buscando esta información.

Estoy usando Debian 6.0 (Squeeze) y la versión FFmpeg de esos repositorios.

La página de manual de FFmpeg establece el siguiente uso:

ffmpeg -i inputfile.mpg -vf "transpose=1" outputfile.mpg

La clave es que no debe utilizar una variable de grado, sino una variable de configuración predefinida de la página de manual.

0=90CounterCLockwise and Vertical Flip  (default)
1=90Clockwise
2=90CounterClockwise
3=90Clockwise and Vertical Flip
Zonjai avatar Apr 17 '2011 19:04 Zonjai