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
libx264
comoc:v
. En elfs
ejemplo, no está transcodificando el video, ya que-c:v copy
se usa. Entonces,preset
ycrf
tampoco tienen ningún efecto.