¿Cómo rotar un vídeo y reproducirlo en un televisor?

¿Cómo rotar un vídeo y reproducirlo en un televisor?

Tengo un vídeo que se origina en un teléfono y que se reproduce sin problemas en un televisor Thomson (a través de USB). El detalle del vídeo es el siguiente:

> avprobe 20170904_065655.mp4
avprobe version 11.3-6:11.3-1~trusty, Copyright (c) 2007-2014 the Libav developers
  built on Apr 13 2015 22:25:55 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '20170904_065655.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2017-09-04 04:58:01
  Duration: 00:01:05.34, start: 0.000000, bitrate: 17094 kb/s
    Stream #0.0(eng): Video: h264 (High), yuv420p, 1920x1080, 17017 kb/s, 30 fps, 90k tbn (default)
    Metadata:
      creation_time   : 2017-09-04 04:58:01
    Side data:
      displaymatrix: rotation of -90.00 degrees
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      creation_time   : 2017-09-04 04:58:01
# avprobe output

El vídeo se gira 90 en sentido antihorario. Por tanto, como señalaaquí, estoy intentando la siguiente línea de comando para rotar el video 90 grados en el sentido de las agujas del reloj:

ffmpeg -i 20170904_065655.mp4 -vf "transpose=1" test.mp4

que, desafortunadamente, rota el vídeo180grados. ¿Hay algún problema con ese comando para rotar el video?

De todos modos, pude rotar el video usando avidemux, pero el nuevo archivo de video guardado ( rotated.mp4) no se podía reproducir en el televisor ("Formato de video no compatible"). Intenté convertir el archivo a diferentes formatos usando comandos como

avconv -i rotated.mp4 -c:v h264 -q:v 3 -c:a libmp3lame out.avi
avconv -i rotated.mp4 -c:v mpeg1video -q:v 3 -c:a libmp3lame out.avi
avconv -i rotated.mp4 -r 25 -vb 20M  -crf 20  output.avi
avconv -i rotated.mp4  -vcodec libx264 -acodec aac -strict -2 -b:a 384k  output.mp4

Pero NADA de eso funcionó. ¿Qué me estoy perdiendo? ¿O hay alguna manera de rotar el video en la línea de comando sin cambiar el formato/codificación real?

el avprobede rotated.mp4es

avprobe version 11.3-6:11.3-1~trusty, Copyright (c) 2007-2014 the Libav developers
  built on Apr 13 2015 22:25:55 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, avi, from 'rotated.mp4':
  Duration: 00:00:30.77, start: 0.000000, bitrate: 6728 kb/s
    Stream #0.0: Video: h264 (High), yuv420p, 1080x1920 [PAR 1:1 DAR 9:16], 30 fps, 30.02 tbn, 60.04 tbc
    Stream #0.1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s

Usando el ffmpeg deaquí el avproberesultado es el siguiente, después de haber aplicado el método de 'Lordneckbeard' a rotated.mp4:

avprobe version 11.3-6:11.3-1~trusty, Copyright (c) 2007-2014 the Libav developers
  built on Apr 13 2015 22:25:55 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.82.104
  Duration: 00:00:30.86, start: 0.000000, bitrate: 10397 kb/s
    Stream #0.0(und): Video: h264 (Constrained Baseline), yuv420p, 1080x1920 [PAR 1:1 DAR 9:16], 8860 kb/s, 30 fps, 15360 tbn, 60 tbc (default)
    Stream #0.1(und): Audio: [1][0][0][0] / 0x0001, 48000 Hz, 2 channels (default)
Unsupported codec with id 0 for input stream 1
# avprobe output

y ni el audio ni el video son compatibles ahora...

Respuesta1

ffmpeg -i input.mp4 -vf "scale=-2:1080,format=yuv420p" -c:a copy output.mp4
  • Debido a que el televisor parece ignorar los datos laterales de rotación, tendrás que volver a codificar el video para rotarlo. ffmpeghará esto automáticamente, por lo que no tienes que hacer nada especial.

  • Si aún no funciona, agréguelo -profile:v baselinepara mayor compatibilidad. Recomiendo también probar -profile:v mainy omitir -profile:v. Si puedes salirte con la tuya, evítalo -profile:v, lo siguiente mejor esprincipal, menos óptimo esbase, pero en realidad no importa mucho para la reproducción de TV local: lo que funcione es mejor.

  • ElescalaEl filtro reducirá la escala del video para que la altura sea 1080; de lo contrario, no reproducirá un video de tamaño 1080x1920.

  • Utilizando elformatoEl filtro garantizará un formato de píxel compatible. Su entrada ya es plana YUV 4:2:0, pero esto es sólo un seguro para otros tipos de entrada.

  • -c:a copyse agregó para transmitir la copia (re-mux) del audio para evitar una recodificación innecesaria. Para entradas que contienen audio que no sea AAC, utilice -c:a aacen lugar de -c:a copy.

  • Los televisores pueden ser exigentes, por lo que esto puede requerir más experimentación. Para probar rápidamente un segmento corto de 60 segundos, puede agregar -t 60.

  • desde elSe usó la etiqueta. Supuse que lo permitiría, es una alternativa aceptable a avconv. Es posible que nada de esto se aplique avconvporque no lo uso y no estoy familiarizado con él. Asegúrese de utilizar una versión reciente de ffmpeg. Para Linux puedes descargar una versión reciente ffmpegenhttps://www.johnvansickle.com/ffmpeg/

Respuesta2

Es posible que el video rotado exceda las capacidades de su televisor.

La rotación cambió la resolución de 1920x1080 a 1080x1920.

Si su televisor es 1080p (full HD), admite 1.920x1.080, y si solo es 720p, entonces 1.280x720.

En ambos casos, la altura del vídeo es superior al máximo. Necesitarías un televisor de 2K o 4K para ver ese vídeo.

información relacionada