stream_loop parameter hide_banner ffmpeg rotation debian video-encoding avconv

ffmpeg - parameter - Girar videos mp4 sin recodificar



ffmpeg wiki (5)

Esta respuesta es simplemente un resumen de los comentarios proporcionados por LordNeckbeard.

Rotando sin codificar

Girar sin volver a codificar no es posible a menos que:

  • tu entrada es MJPEG
  • giras en la reproducción

Gire con la codificación utilizando el ffmpeg correcto

Para entender correctamente los pasos necesarios para esto, uno debe comenzar por leer o al menos hojear esta pregunta:

¿Cuáles son las diferencias y similitudes entre ffmpeg, libav y avconv?

Resumen: avconv es una bifurcación de ffmpeg, el mantenedor de debian eligió avconv, usted debe compilar el ffmpeg correcto desde la fuente.

El siguiente paso sería compilar el ffmpeg correcto de la fuente como se detalla aquí:

Guía de compilación de ffmpeg para Debian

El último paso es usar los comandos que se encuentran en otras publicaciones:

¿Cómo voltear un video 180 ° (vertical / boca abajo) con FFmpeg? o Rotar videos con FFmpeg

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

Estoy buscando una manera de rotar videos grabados con mi Nexus 4 en mi sistema Debian Wheezy. Los videos se graban en modo vertical y me gustaría rotarlos al modo horizontal. Preferiblemente la rotación es conducida por la línea de comando.

He encontrado varias preguntas anteriores que sugieren una buena solución, pero parece que no consigo hacer que funcione.

Para empezar hubo esta pregunta: Rotación de videos con FFmpeg

Pero indica que ffmpeg está desactualizado y que debería usar avconv. Encontré esta pregunta detallando el camino a seguir. https://askubuntu.com/questions/269429/how-can-i-rotate-video-by-180-degrees-with-avconv

Esto me hizo usar el siguiente comando:

avconv -i original.mp4 -vf "transpose=1" -codec:v libx264 -preset slow -crf 25 -codec:a copy flipped.mp4

Sin embargo, esto es laboriosamente lento (la última prueba me llevó más de 6 horas por menos de 3 minutos de grabación) y no da como resultado una película reproducible. También recibo un error en el registro de salida que indica la velocidad de Mb> límite de nivel.

¿Hay algún problema aquí con la recodificación? ¿Debería volver a codificar los videos de mi teléfono a otra codificación más "viable" antes de aplicar las rotaciones? ¿O me estoy perdiendo otro punto importante?

Gracias por adelantado


Hay varias cosas que has tocado en tu pregunta:

  1. Casi no hay posibilidad de que puedas rotar sin volver a codificar. La excepción a esa regla (códec MJPEG) ya se ha señalado, pero es poco probable que la esté utilizando, por lo que va más allá del alcance de esta pregunta. Mencionaré que la razón de esta capacidad es que JPEG se puede convertir a través de metadatos. Por lo tanto, si puede encontrar un contenedor que tenga la rotación de metadatos, podrá rotar, pero ninguno existe (o está lo suficientemente extendido) hasta el momento.
  2. Si le tomó horas para rotar y volver a codificar 3 minutos del video, entonces el problema puede estar en una resolución enorme . Y me refiero enorme ! ¿Puede por favor proporcionar la salida de avprobe original.mp4 para que se pueda determinar?
  3. Los debates de Libav contra FFmpeg son muy contraproducentes (se puede ver por la cantidad de fondos publicados aquí). Básicamente, lo que sucedió fue una división del proyecto con algunos desarrolladores que iban de un lado a otro, el hecho de que el proyecto FFmpeg haya logrado mantener el nombre es solo una casualidad y no tiene sentido decir que un proyecto es original y otro es un error. Las diferencias entre los proyectos son principalmente en el estilo de desarrollo y en la filosofía. Si caracterizas a FFmpeg como más Open Source y Libav como más Software Libre, no estarías tan equivocado. La gente racional espera que, con el tiempo, los desarrolladores lleguen a su punto de vista, y quizás no fusionen los proyectos, sino que cooperen en mayor medida. Cuando Ubuntu salió originalmente, en cada chat de Debian GNU / Linux había mensajes enormes en la línea de "¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡NO es Debian !!!!!!!! otro.

Rotación = 0 solucionado mi problema. Comencé a grabar video en modo vertical, me di cuenta de mi error e inmediatamente volqué mi teléfono a horizontal para continuar grabando. Mi iPhone había marcado el video como retrato de todo el video.

ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=0 output.mp4

Arreglado.


Si solo desea cambiar los metadatos para que los reproductores multimedia que consideran que la bandera reproduzca el archivo rotado, intente algo como:

ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4

como se encuentra en otro lugar en .


FFmpeg y programas similares cambian los metadatos incluso con la opción -map_metadata . exiftool puede leer la matriz de rotación y el indicador de rotación, pero no puede escribirlo.

Para obtener una verdadera rotación sin pérdidas (incluidos los metadatos), no pude encontrar una solución, así que agarré un editor hexadecimal (por ejemplo, HxD ) y analicé los archivos de video rotados.

Rotación sin pérdida verdadera de MP4:

  • abra mp4 con el editor hexadecimal y busque vide para encontrar los metadatos de la pista de video
  • algunas filas arriba (para mis archivos en su mayoría 9, a veces 12) debería ver trak.../tkhd
  • en el medio debe haber un signo @ (HEX 40)
  • En las dos filas anteriores se almacena la matriz de rotación.
  • sin rotación:

    00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40

  • 180 °:

    FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40

  • 90 ° cw:

    00 00 00 00 00 01 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40

  • 90 ° ccw:

    00 00 00 00 FF FF 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40

Modifique el archivo a medida que lo necesite, y debe rotarse en los jugadores que admiten la bandera de rotación (la mayoría de los jugadores actuales lo hacen).

En caso de que su video contenga audio estéreo, esto obviamente no se cambia, por lo que en caso de que quiera que el sonido coincida con la rotación del video (180 °), necesita cambiar los canales izquierdo y derecho.