Convirtiendo a 3gp con FFmpeg y MEncoder
Semana santa, ha llegado y por fin vacaciones (otra vez) pues estos días me espera un viaje tradicional a la casa de mis abuelos (debería emanciparme?) y preparaba grandes cantidades de música y vídeos para pasar el rato y matar el aburrimiento
Al principio intenté con WinFF (un front-end para FFmpeg) pero al menos el que tengo, no tenia ningún preset para vídeos 3gp, por lo tanto empecé a investigar como hacerlo y encontré esto pero mis vídeos se distorsionaban y necesito mantener el aspect ratio
agregando un padding o más comunmente conocido como “letterboxing”.
Para comenzar, pasarle como parámetro la relación de aspecto del video que deseamos convertir no funciona, no calcula el padding que agregará como si lo hace con otros codecs, por lo tanto debemos calcularlo nosotros mismos, para eso inicialmente utilicé esta calculadora donde introduces la resolución original del vídeo, te muestra que aspect ratio tiene, e introduces el ancho o alto al que deseas convertirlo y calcula el que desconoces para mantener el aspect ratio.
Debo mencionar que mis vídeos tienen una relación de aspecto de 16:9 y el alto equivalente para un ancho de 352px es 198px, sin embargo, y la resolución de qcif es 352×288 por lo tanto tengo un excedente de 90px los cuales sin duda, distorsionarán la imagen horriblemente. El cálculo es casi instantáneo, 45px arriba y abajo, existen 2 formas de hacerlo con FFmpeg pero si usas Ubuntu, probablemente no tengas disponible los filtros asi que toca hacerlo de la forma antigua.
ffmpeg entrada.avi -strict experimental -s 352x198 -padtop 45 -padbottom 45 -padcolor 000000 -vcodec h263 -acodec aac -ac 1 -ar 8000 -r 25 -ab 32 -y salida.3gp
Algo importante a mencionar es que no se debe configurar la salida con una resolución qcif (352×288) porque al agregar el padding tendríamos un vídeo de 352×378.
Si tu vídeo tiene una relación de aspecto de 4:3 tambien será distorsionado aunque en menor medida, asi que también debe aplicarse el letterboxing. En este caso el excedente solamente es 24px y se soluciona agregando un padding de 12px arriba y abajo.
ffmpeg entrada.avi -strict experimental -s 352x264 -padtop 12 -padbottom 12 -padcolor 000000 -vcodec h263 -acodec aac -ac 1 -ar 8000 -r 25 -ab 32 -y salida.3gp
Como ya lo mencioné antes, esta es la forma “anticuada” de hacerlo, porque ahora FFmpeg incluye el filtro pad, en el cual simplemente coloca el vídeo en una porción de la salida, dejando lo demás como letterboxing.
ffmpeg entrada.avi -strict experimental -s qcif -vf 'pad=352:298:0:45:000000' -vcodec h263 -acodec aac -ac 1 -ar 8000 -r 25 -ab 32 -y salida.3gp
Lo explico brevemente, el vídeo tendra una resolución qcif (352×288) y dentro ese área colocar el video en un área de 352×298 a una altura de 45px desde arriba.
El filtro pad tiene la siguiente sintaxis:
pad=alto:ancho:x:y:color
FFmpeg es un dolor de cabeza para convertir vídeos 3gp, ya que tienes que estar calculando resoluciones las equivalentes y el padding. MEncoder facilita esta tarea también con un filtro.
mencoder entrada.avi -o salida.3gp -ofps 14 -oac libfaac -ovc lavc -lavcopts vcodec=h263 -lavfopts format=3gp -vf expand=aspect=11/9,scale=352:288
Así, independientemente de la relación de aspecto del vídeo de entrada, siempre tendra la que deseamos en el archivo de salida.
Finalmente, pido disculpas por el post tan largo, pero de alguna forma tenia que exponer todo lo que he pasado para tener un vídeo 3gp como lo quería, y que al final ni lo estoy usando porque me decanté por mp4 con codec mpeg4 y audio mp3 con una relación de aspecto 4:3, para el cual el proceso es prácticamente el mismo. Espero que a alguien le sea útil
hasta pronto (o tal vez no tanto)
Hola, llegué aquí buscando información sobre la opción -strict experimental de ffmpeg, no sabía en qué parte ponerlo, pero gracias a tu explicación ya lo coloqué de forma correcta y en este momento ya estoy convirtiendo un video de flv a mp4 para ver si se puede reproducir en un HTC Touch Pro 2. Gracias.