¿Cómo limitar el tamaño del archivo con ffmpeg?

10

Quiero codificar un video, que tiene una duración de 60 segundos, a un objetivo o tamaño máximo de 10 MB .

Hay dos enfoques que conozco. Uno se explica en el FFMPEG-Wiki, y el otro que encontré en la documentación. Desafortunadamente, no he encontrado una explicación sobre cuándo usar qué método.

¿Se recomienda alguno de esos métodos? Si no, ¿cuáles son las ventajas y desventajas de cada método?

1) Calcule y establezca Bitrate para que coincida con la duración del video como se explica en el ffmpeg-wiki

(10 MB * 8192 [convierte MB a kilobits]) / 60 segundos = ~ 1365 kbits / s bitrate total 1365k - 128k (bitrate de audio deseado) = 1237k bitrate de video

ffmpeg -y -i input -c:v copy -preset medium -b:v 1237k -pass 1 -c:a copy -b:a 128k -f mp4 /dev/null && \
ffmpeg -i input -c:v libx264 -preset medium -b:v 1237k -pass 2 -c:a libfdk_aac -b:a 128k output.mp4

2) Use el -fs parámetro y deje que ffmpeg lo descubra.

ffmpeg -i input -c:v copy -c:a copy -preset medium -crf 23 -fs 10485760 output.mp4
Daniel
fuente
1
En su primer ejemplo, el primer paso también debe usar libx264como c:v. En el fsejemplo, no está transcodificando el video, ya que -c:v copyse usa. Entonces, presety crftampoco tienen ningún efecto.
Gyan
Esto fue útil para mí: stackoverflow.com/a/34547102/470749
Ryan

Respuestas:

11

El fsparámetro detendrá la codificación una vez que alcance su valor. Entonces, si la salida alcanza la 10MBmarca mientras codifica el 15º segundo, entonces esa es la duración de su archivo de salida.

Si desea asegurarse de que todo el archivo está codificado pero no cruza el tamaño objetivo establecido, utilice el método de velocidad de bits. Para acomodar la sobrecarga de muxing y otros datos dentro del tamaño objetivo, establezca su tasa de bits de video ligeramente más baja, digamos, 1-2%

Gyan
fuente