He estado tratando de descubrir cómo rotar videos con FFmpeg. Estoy trabajando con videos de iPhone tomados en modo vertical. 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 necesita usar es una opción vfilter . Según lo que veo, debería verse 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, me sale este error:
No such filter: 'rotate'
Error opening filters!
Hasta donde sé, tengo una compilación de FFmpeg con todas las opciones. Ejecutar ffmpeg -filters 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 son geniales y todo, pero simplemente no me llevarán a donde necesito ir. Necesito la capacidad de rotar videos 90 grados como mínimo. 270 grados sería una excelente opción para tener también. ¿Dónde se han ido las opciones de rotación?
fuente
-vf "vflip,hflip"
-vf "vflip,hflip"
.Respuestas:
Gire 90 en sentido horario:
Para el parámetro de transposición puede pasar:
Usar
-vf "transpose=2,transpose=2"
por 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. Por lo general, puede copiar el audio sin tocarlo, utilizando
-c:a copy
. Para cambiar la calidad del video, configure la tasa de bits (por ejemplo, con-b:v 1M
) o eche un vistazo a la guía de codificación H.264 si desea opciones de VBR.Una solución también es utilizar este script de conveniencia .
fuente
-vcodec libx264
. Pero sería genial si no tuviera que buscar qué codificación usar como ffmpeg ya debería saberlo. ¿Alguna sugerencia?-vf "transpose=2,transpose=2"
cclock_flip
,clock
,cclock
oclock_flip
en lugar de0
,1
,2
o3
.Si no desea volver a codificar su video Y su reproductor puede manejar metadatos de rotación, simplemente puede cambiar la rotación en los metadatos usando ffmpeg:
fuente
ffmpeg -i input.m4v 2>&1 | grep rotate
ffmpeg -i input.m4v -map_metadata 0 -metadata:s:v rotate="90" -codec copy output.m4v
. De esta forma, todos los metadatos globales del archivo de entrada se copiarán como metadatos globales al archivo de salida y solo se cambiarán los metadatos de rotación.rotate=0
.-metadata:s:v rotate="180"
, no funcionó. ¿Se supone que eso funciona?ffmpeg -i input.mp4 -codec copy -map_metadata 0 -metadata:s:v:0 rotate=0 output.mp4
¿Ya lo has intentado
transpose
? Me gusta (de la otra respuesta)Si está utilizando una versión anterior, debe actualizar ffmpeg si desea utilizar la función de transposición, 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.
fuente
Encontré esta página mientras buscaba la misma respuesta. Han pasado seis meses desde que esto se solicitó originalmente y las compilaciones se han actualizado muchas veces desde entonces. Sin embargo, quería agregar una respuesta para cualquier otra persona que se encuentre aquí buscando esta información.
Estoy usando la versión Debian Squeeze y FFmpeg de esos repositorios.
La página MAN para ffmpeg establece el siguiente uso
La clave es que no debe utilizar una variable de grado, sino una variable de configuración predefinida de la página MAN.
fuente
Para rotar la imagen en el sentido de las agujas del reloj, puede usar el filtro de rotación, que indica un ángulo positivo en radianes. Con 90 grados equivalentes a PI / 2, puede hacerlo así:
en sentido antihorario, el ángulo debe ser negativo
El filtro de transposición funcionará igualmente bien durante 90 grados, pero para otros ángulos, esta es una opción más rápida o única.
fuente
*
comporta como una multiplicación:ffmpeg -i in.avi -vf "rotate=-8*PI/40" -q 1 out.avi
(un poco menos de rotación que -PI / 4 = -10 * PI / 40)no funcionará, incluso con la última fuente ...
debe cambiar el orden:
funciona bien
fuente
rotate=PI/2
orotate=90*PI/180
es necesarioSi obtiene el error "El códec es experimental pero los códecs experimentales no están habilitados" use esto:
Pasó conmigo por algún archivo .mov con audio aac.
fuente
-sameq
Option 'sameq' was removed. If you are looking for an option to preserve the quality (which is not what -sameq was for), use -qscale 0 or an equivalent quality factor option. Failed to set value '1' for option 'sameq': Invalid argument
-qscale también da un error.Please use -q:a or -q:v, -qscale is ambiguous
, pero aún funciona.Este script que generará los archivos con la estructura de directorios en "fixedFiles". Por el momento está fijado a archivos MOV y ejecutará una serie de transformaciones dependiendo de la "rotación" original del video. Funciona con videos capturados de iOS en una Mac con Mavericks, pero debe ser fácilmente exportable. Se basa en haber instalado exiftool y ffmpeg .
fuente
[Parsed_pad_2 @ 0x7f8b15c3a580] Input area -420:0:1500:1080 not within the padded area 0:0:1080:1080 or zero-sized
\ n `[Parsed_pad_2 @ 0x7f8b15c3a580] Failed to configure input pad on Parsed_pad_2
\ nError reinitializing filters!
\ nFailed to inject frame into filter network: Invalid argument
\ nError while processing the decoded data for stream #0:0
\ nConversion failed!
La respuesta de Alexy casi funcionó para mí, excepto que estaba recibiendo este error:
Simplemente tuve que agregar un parámetro (-r 65535/2733) al comando y funcionó. El comando completo era así:
fuente
24000/1001
sería más preciso.Una solución adicional con un enfoque diferente de las últimas soluciones mencionadas es verificar si el controlador de su cámara admite los controles de la cámara v4l2 (que es muy común).
En la terminal solo escribe:
Si el controlador de su cámara admite los controles de la cámara v4l2, debería obtener algo como esto (la lista a continuación depende de los controles que admite el controlador de la cámara):
Y si tienes suerte, admite horizontal_flip y vertical_flip .
Entonces todo lo que necesita hacer es establecer el horizontal_flip por:
o el vertical_flip por:
y luego puede llamar a su dispositivo de video para capturar un video nuevo (vea el ejemplo a continuación), y el video se rotará / volteará.
Por supuesto, si necesita procesar un video ya existente, entonces este método no es la solución que está buscando.
La ventaja de este enfoque es que volteamos la imagen en el nivel del sensor, por lo que el sensor del controlador ya nos da la imagen invertida, y eso ahorra a la aplicación (como FFmpeg) cualquier procesamiento adicional e innecesario.
fuente
Desafortunadamente, la versión de Ubuntu de ffmpeg admite videofiltros.
Necesita usar avidemux o algún otro editor para lograr el mismo efecto.
En la forma programática, se ha recomendado mencoder.
fuente
Smartphone: recuperó un video en formato vertical
Desea enviarlo a un lado web que estaba 90 ° a la izquierda (en sentido antihorario, formato horizontal) hmm.
ffmpeg -i input.mp4 -vf "rotate=0" output.mp4
lo hace. Tengo formato vertical de nuevo
debian buster: ffmpeg --version ffmpeg versión 4.1.4-1 ~ deb10u1 Copyright (c) 2000-2019 los desarrolladores de FFmpeg
fuente