2010-12-20 15 views

Respuesta

68

ffmpeg proporciona esta funcionalidad. Todo lo que necesita hacer es ejecutar calle detrás como

ffmpeg -i <inputfilename> -s 640x480 -b 512k -vcodec mpeg1video -acodec copy <outputfilename> 

hay nuevas versiones de ffmpeg que necesita para cambiar -b a -b:v:

ffmpeg -i <inputfilename> -s 640x480 -b:v 512k -vcodec mpeg1video -acodec copy <outputfilename> 

para convertir el archivo de vídeo de entrada a un vídeo con un tamaño de 640 x 480 y una velocidad de bits de 512 kilobits/seg usando el códec de video MPEG 1 y simplemente copiando la transmisión de audio original. Por supuesto, puede conectar cualquier valor que necesite y jugar con el tamaño y la velocidad de bits para lograr la compensación de calidad/tamaño que está buscando. También hay un montón de otras opciones que se describen en el documentation

Run ffmpeg -formats o ffmpeg -codecs para una lista de todos los formatos y codecs disponibles. Si no tiene que dirigirse a un códec específico para la salida final, puede lograr mejores relaciones de compresión con una pérdida de calidad mínima utilizando un códec de última generación como H.264.

+2

muchas gracias Usted ha hecho mi día de fiesta feliz :) – Vignesh

+7

-b necesita ser -b:. v de velocidad de grabación vid –

+4

@MrAH, gracias por la actualización. Parece que la interfaz ha cambiado desde que publiqué esto. Solía ​​ser '-b' para bitrate de video y' -ab' para bitrate de audio, pero ha cambiado a '-b: [especificador de flujo]'. –

20

En lugar de elegir velocidades de bits fijas, con el códec H.264, también puede elegir un preset diferente como se describe en https://trac.ffmpeg.org/wiki/x264EncodingGuide. También encontré Video encoder comparison at KeyJ's blog (archived version) una lectura interesante, compara H.264 contra Theora y otros.

La siguiente es una comparación de varias opciones que probé. El video grabado originalmente tenía 673M de tamaño, tomado en un iPad usando RecordMyScreen. Tiene una duración de aproximadamente 20 minutos con una resolución de 1024x768 (con la mitad del video en blanco, así que lo recorté a 768x768). Para reducir el tamaño, reduje la resolución a 480x480. No hay audio

Los resultados, que tienen el mismo 1024x768 como base (y aplicar el recorte, escalado y a filter):

  • Sin opciones especiales: 95M (tiempo de codificación: 1m19s).
  • Con solo -b 512k agregado, el tamaño se redujo a 77M (tiempo de codificación: 1m17s).
  • Con solamente -preset veryslow (y sin -b), se hizo 70M (tiempo de codificación: 6m14s)
  • Con tanto -b 512k y -preset veryslow, el tamaño se convierte 77M (100K más pequeño que acaba de -b 512k).
  • Con -preset veryslow -crf 28, obtengo un archivo de 39M que tomó 5m47s (sin diferencia de calidad visual para mí).

N = 1, así que tome los resultados con un grano de sal y realice sus propias pruebas.

25

Si desea mantener mismo tamaño de pantalla, se puede considerar el uso de factor de CRF: https://trac.ffmpeg.org/wiki/Encode/H.264

Este es el comando que funciona para mí: (en mac es necesario agregar -strict -2 para poder utilizar el códec de audio AAC ..

ffmpeg -i input.mp4 -c:v libx264 -crf 24 -b:v 1M -c:a aac output.mp4 
Cuestiones relacionadas