Cómo cambiar el tamaño de un video para hacerlo más pequeño con FFmpeg

103

¿Es posible cambiar el tamaño de mis videos para hacerlos más pequeños con FFmpeg?

Tengo unas dimensiones de video originales de 1024x576, ahora quiero cambiar el tamaño del video a 720x480 para cumplir con el requisito.

¿Cómo puedo hacer esto?

Alan
fuente
ffmpegpuede estar en desuso, ver aquí y aquí
chiflado sobre
13
@nuttyaboutnatty Los mensajes "en desuso" se aplicaron solo a los " ffmpeg" viejos, muertos, falsos "de la bifurcación de Libav, no ffmpegde FFmpeg que regresó en 15.04.
llogan

Respuestas:

165

El ejemplo más básico es este:

ffmpeg -i input.avi -s 720x480 -c:a copy output.mkv

El uso del scalefiltro proporcionará más flexibilidad:

ffmpeg -i input.avi -filter:v scale=720:-1 -c:a copy output.mkv

Le -1indicará a ffmpeg que elija automáticamente la altura correcta en relación con el ancho proporcionado para preservar la relación de aspecto. -1también se puede usar para el ancho si proporciona una altura determinada.


Una desventaja de la escala cuando se utiliza libx264es que este codificador requiere incluso los valores y la escala puede elegir automáticamente un valor impar que resulta en un error: width or height not divisible by 2. Puede indicarle a la escala que elija un valor par para una altura dada (720 en este ejemplo):

scale="trunc(oh*a/2)*2:720"

... o un ancho dado (1280 en este ejemplo):

scale="1280:trunc(ow/a/2)*2"

Tenga en cuenta que su compilación ffmpeg podría quejarse de no reconocer -cu -filteropciones. También puede no ser compatible scale. En ese caso, debe usar un ffmpeg más nuevo, que puede descargar como una compilación estática, o compilarlo usted mismo .

jimhark
fuente
1
Lo intenté ffmpeg -i output.mkv -filter:v scale=720:-1 -acodec copy -threads 12 output_shrink.mkv(en la versión ffmpeg 0.8.6-6: 0.8.6-0ubuntu0.12.10.1) pero obtuve el errorUnrecognized option 'filter:v'
doug65536
66
Después de buscar en la página de manual de ffmpeg varias veces, encontré que en lugar de -filter:v, la opción parece haber cambiado a -vf.
doug65536
2
@ doug65536 -filter:vy -vfambos están bien. La versión de Ubuntu que estaba usando está rota y desactualizada: no es realmente FFmpeg ffmpeg, sino el binario suministrado por Libav (la bifurcación FFmpeg) con el mismo nombre.
slhck
1
@MightyPork probablemente su compilación ffmpeg está desactualizada, ¿qué problemas suceden? De todos modos, esto realmente me ayudó (con ffmpeg version 2.4.10) a reducir el tamaño de algunos videos masivos para liberar espacio, ¡gracias!
Wilf
44
'-c' es la abreviatura de -codec, ': a' especifica la (s) secuencia (s) de audio, 'copia' especifica el códec de copia, que copia la (s) secuencia (s) (en este caso, audio) sin volver a codificar. Básicamente, las secuencias de audio pasarán. Esto es común cuando solo está manipulando la transmisión de video.
jimhark
14

Utilizo los siguientes comandos para reescalar videos e imágenes. Para ancho y altura fijos -

ffmpeg -i input.avi -vf scale="720:480" output.avi

y si desea conservar la relación de aspecto, simplemente asigne una altura de -1 y se redimensionará automáticamente según el ancho:

ffmpeg -i input.avi -vf scale="720:-1" output.avi

Si desea escalar en función del tamaño de entrada, p. Ej. digamos que reduzca el ancho / alto que la mitad puede hacer:

ffmpeg -i input.avi -vf scale="iw/1:ih/2" output.avi

NOTA :

iw : input width
ih : input height

La construcción estática se puede descargar desde - https://johnvansickle.com/ffmpeg/

Documentación: https://ffmpeg.org/ffmpeg.html#filter_005foption

Aniket Thakur
fuente
No funciona. Atascado en handler_name: Sound Handle
Rushi M Thakker
Obtuve una calidad de video terrible con este comando. Mucho mejor si creo output.mp4, no avi. Entonces la extensión importa.
Sekrett