Valeria, miembro de este gran staff, nos ha hecho el favor de escribir este post porque conoce a la perfección dicho tema.
Solución:
Esta respuesta fue escrita en 2009. Desde 2013, un formato de video mucho mejor que H.264 está ampliamente disponible, a saber, H.265 (mejor porque comprime más para la misma calidad o brinda mayor calidad para el mismo tamaño). Para usarlo, reemplace el códec libx264 con libx265 y empuje más la palanca de compresión aumentando el valor de CRF; agregue, digamos, 4 o 6, ya que un rango razonable para H.265 puede ser de 24 a 30. Tenga en cuenta que más bajo Los valores de CRF corresponden a más alto bitrates, y por lo tanto producir más alto videos de calidad.
ffmpeg -i input.mp4 -vcodec libx265 -crf 28 output.mp4
Para ver esta técnica aplicada con el formato H.264 anterior, consulte esta respuesta, que se cita a continuación para su conveniencia:
Calcula la tasa de bits que necesitas dividiendo el tamaño de tu objetivo (en bits) por la duración del video (en segundos). Por ejemplo, para un tamaño de destino de 1 GB (un gigabyte, que es de 8 gigabits) y 10000 segundos de vídeo (2 h 46 min 40 s), utilice una tasa de bits de 800000 bit / s (800 kbit / s):
ffmpeg -i input.mp4 -b 800k output.mp4
Otras opciones que pueden valer la pena considerar es configurar el factor de velocidad constante, que reduce la velocidad de bits promedio, pero conserva una mejor calidad. Varíe el CRF entre 18 y 24, cuanto más bajo, mayor es la tasa de bits.
ffmpeg -i input.mp4 -vcodec libx264 -crf 20 output.mp4
Mencionaste querer reducir para que quepan más videos en un dispositivo móvil, que también es mi caso de uso. Todas las respuestas aquí son para reducir la calidad de compresión, pero nadie ha mencionado la reducción del tamaño del cuadro de video. Es mucho más rápido, de 3 a 5 veces más rápido que recomprimir en mi experiencia. Consulte los documentos de ffmpeg sobre escalado para obtener más información.
ffmpeg -i input.mkv -vf "scale=iw/2:ih/2" half_the_frame_size.mkv
ffmpeg -i input.mkv -vf "scale=iw/3:ih/3" a_third_the_frame_size.mkv
ffmpeg -i input.mkv -vf "scale=iw/4:ih/4" a_fourth_the_frame_size.mkv
Probé la mayoría de las otras respuestas propuestas a esta pregunta. Las conclusiones de los datos de prueba se encuentran a continuación. Estas son las respuestas propuestas que probé:
(BR) Modifique la tasa de bits, usando:
ffmpeg -i $infile -b $bitrate $newoutfile
(CR) Varíe el factor de tasa constante, usando:
ffmpeg -i $infile -vcodec libx264 -crf 23 $outfile
(SZ) Cambie el tamaño de la pantalla de video (por ejemplo, a la mitad de su tamaño de píxel), usando:
ffmpeg -i $infile -vf "scale=iw/2:ih/2" $outfile
(BL) Cambie el perfil H.264 a “línea de base”, usando:
ffmpeg -i $infile -profile:v baseline $outfile
(DF) Use el procesamiento ffmpeg predeterminado, usando:
ffmpeg -i $infile $outfile
DATOS
- “tamaño”: tamaño de píxel porcentual del video convertido en relación con el original.
- “tasa de bits”: tasas de bits de videos originales y convertidos.
- “definición”: tamaño de píxel de los videos.
- “convertir” – tiempo para convertir el video en segundos.
Calculé la tasa de bits objetivo para (BL) usando el método propuesto.
=== Archivo A – Cómo el nodo está ayudando a impulsar Angular-Fnbixa7Ts6M.mkv ===
original BR CR SZ BL DF
-------- --- -- -- -- --
size 64152 kb 214% 76% 40% 83% 76%
bitrate 411 kb/s 883 313 165 342 313
definition 1920x1080 1920x1080 1920x1080 960x540 1920x1080 1920x1080
convert -- 648 509 225 427 510
=== Archivo B – Usando GraphQL con Angular _ By – Lee Costello-OGyFxqt5INw.mkv ===
original BR CR SZ BL DF
-------- --- -- -- -- --
size 410301 kb 33% 109% 28% 143% 109%
bitrate 2687 kb/s 880 2920 764 3843 2920
definition 3840x2160 3840x2160 3840x2160 1920x1080 3840x2160 3840x2160
convert -- 2307 3188 1116 2646 3278
CONCLUSIONES
-
El método (SZ) es definitivamente el método más rápido. Fue de 2 a 4 veces más rápido. Esto puede ser un gran problema en los videos de alta definición, ya que todos los otros métodos tardaron más en convertirse que la duración real del video. Por ejemplo, el método (CR) tardó 53 minutos en convertir el video de 21 minutos.
-
El método (SZ) es definitivamente el mejor método si la definición del video es mayor que la definición de la pantalla que lo mostrará. Por ejemplo, si su teléfono solo puede mostrar una imagen de 1080p, enviarle un video de 3840×2160 es un desperdicio. Lo mejor sería reducir la mitad de su tamaño a 1080p.
-
Algunas de las respuestas propuestas en realidad AUMENTARON el tamaño de algunos videos. Por ejemplo, el método (BR) duplicó con creces el tamaño de la muestra de 1080p. Sin embargo, hizo que el tamaño de 2160p fuera un tercio. Para la muestra de alta definición, los métodos (CR), (BL) y (DF) AUMENTARON el tamaño del video.
Respuesta correcta (o mejor)
Siempre es mejor reducir primero la resolución al máximo admitido por la pantalla de destino.
Si desea reducir aún más el tamaño del archivo, dependerá de sus elecciones personales. Puede reducir el contenido de la información o aumentar la compresión.
-
Puede bajar más la resolución si eso no es algo que le preocupe.
-
Si el video no incluye escenas de acción rápida, es posible que desee reducir la velocidad de fotogramas.
-
Si tiene un procesador potente y el espacio es el único problema, puede aumentar la tasa de compresión.
-
La tasa de bits es una combinación de múltiples factores. Por lo tanto, es posible que solo decirle a ffmpeg que reduzca la velocidad de bits no le dé los resultados que desea.
-
Otra forma de reducir el contenido de información es reducir la profundidad del color. Aún no se discutió cómo hacer esto.
Si entiendes que te ha sido provechoso nuestro artículo, sería de mucha ayuda si lo compartes con más desarrolladores y nos ayudes a dar difusión a este contenido.