Grabo mi escritorio con avconv (también conocido como ffmpeg) y luego lo escalo a 720p.
Recientemente agregué a mi script para que puedan seleccionar una ventana con xwininfo y la grabará específicamente.
Sin embargo, si el formato de salida no es divisible por 2, el codificador se vuelve loco y no obtengo mi video.
¿Hay alguna manera de arreglar esto dentro de ffmpeg para que no tenga que hacer un montón de matemática manual en bash para establecer los valores de escala?
¿Es posible hacer que el filtro de escala reste / agregue uno al ancho / alto si son desiguales? (¿redondo?)
¿Es posible aplicar otro filtro después de la escala original que podría lograr esto? (Esto redondearía los videos que tienen un tamaño de entrada desigual y sin escala)
#!/bin/bash
avconv \
-f x11grab -r $fps -s $capturesize -i :0.0$offset \
-vcodec libx264 \
-vf scale=-1:720 \
-pre:v lossless_ultrafast \
-threads 4 \
-y $@
Algunas listas de correo antiguas sugieren una round()
función que puede usar en el filtro, pero parece que no puedo obtener la sintaxis correcta. Si funciona, un scale=round(iw,2):round(ih,2)
filtro aplicado al final resolvería todos mis problemas a la vez. iw
y ih
no parecen funcionar
ceil
lugar, usotrunc
para obtener un número de par más alto como el caso de 16: 9 480pEn realidad, el filtro puede manejarlo directamente. Solo necesita pasar en
-2
lugar de-1
al filtro: por ejemploMe sorprendió descubrir esto en un informe de error de hace 3 años .
fuente
Después de mucho experimentar, parece que el siguiente filtro aplicado después de otros filtros de escala redondeará el ancho y la altura a 2.
Es básicamente una cosa de dividir, redondear, multiplicar, simplemente no tenía la sintaxis correcta.
fuente