Script para procesar los videos.

102 views
Skip to first unread message

Fernando Carpani

unread,
Oct 5, 2015, 6:10:02 PM10/5/15
to open...@googlegroups.com
Hola.
Existe un script (bash, python o lo que sea) que usando ffmpeg baja del
MTS a una versión del MP4? Y el que cambia de la versión editada MP4
"Grande" a la MP4 para publicar?

Alguien me los pueden mandar?

Saludos
FDO.

Guillermo Gabrielli

unread,
Oct 5, 2015, 8:04:42 PM10/5/15
to open...@googlegroups.com
Existe un script (bash, python o lo que sea) que usando ffmpeg baja del MTS a una versión del MP4?

El script para eso está en la computadora de la oficina en el 7mo piso, es un poco complejo porque hace más que estrictamente comprimir. Veo si lo puedo subir a bitbucket o algún lado similar.



 Y el que cambia de la versión editada MP4 "Grande" a la MP4 para publicar?

Existía pero no tiene mucho sentido ahora porque normalmente no se usa una "versión editada MP4 Grande". Para convertir alguna versión antigua editada con el premiere.

El comando básico sería en linux (en windows cambiar /dev/null por NUL):

ffmpeg -y -i Editado.mp4  -c:v libx264 -vf yadif=0:0:0,setfps=fps=25 -pass 1 -b:v 500k -an -f mp4  /dev/null 
ffmpeg -i Editado.mp4 -c:v libx264 -vf yadif=0:0:0,setfps=fps=25,setdar=16/9  -pass 2 -b:v 500k -c:a aac -strict -2 -b:a 128k -movflags +faststart  Destino.mp4

vf establece los filtros de video, el formato es -vf efecto1=opcion1:opcion2,efecto2=opcion1:opcion2... . En particular el filtro yadif es usado para convertir de entrelazado a progresivo.

<Detalle técnico>
 El primer 0 establece que no se duplica el fps. El segundo 0 establece el orden de campos. Todos los videos "HD" hechos con el premiere, así como los originales que hace la cámara tienen el formato Entrelazado, Top Field First. Puede dejarse en -1 y así lo elige automáticamente, pero creo que demora un poquito más. El tercer 0 indica procesar todos los frames, un 1 (procesar solo los entrelazados) debería hacer el mismo efecto, pero no tiene sentido arriesgarse porque sabemos que son todos entrelazados.
El valor por defecto para yadif es 0:-1:0 así que en realidad no habría mucha diferencia en poner simplemente -vf yadif,...
</Detalle técnico>

El filtro de yadif siempre va antes que cualquier otro.

El setdar establece la relacion entre ancho y alto que tendrá el video al reproducirse (16/9). Normalmente no es necesario excepto que el origen este mal, pero no afecta para nada la velocidad así que tiene sentido usarlo siempre.

El setfps=fps=25 asegura que los fps sean 25. Aunque en algún momento grabamos con 50 (ahora usamos 25), no es adecuado usar 50 para web porque toma más ancho de banda y recursos al decodificar.

El las versiones recientes de ffmpeg el codec de video por defecto para mp4 es libx264, así que puede omitirse siempre que no cambie en una versión futura.
 -c:a aac -strict -2 dice usar el codificador AAC interno de ffmpeg, el -strict -2 es necesario porque todavía lo consideran una opción experimental (en cualquier momento lo van a dejar por defecto)

Si se sabe que el ffmpeg utilizado tiene el codificador libfdk_aac, tiene más sentido usar  -c:a aac libfdk_aac pues tiene ligeramente mejor calidad.

 -movflags +faststart hace lo mismo que el qt-faststart, mueve el campo "moov", sea lo que sea, y la metadata al principio del archivo así la reproducción por web puede empezar más rápido. La desventaja tanto del +faststart como del qt-faststart es que es potencialmente más lento editar la metadata pues si aumenta el tamaño de ésta hay que mover todo el vídeo (tip: no editar la metadata si el vídeo está en un pendrive con USB 1.0)

El nombre del archivo destino siempre va al final de todo. Si no tiene extensión mp4 se debe agregar -f mp4 .

A veces tiene sentido reducir la resolución, pues la fuente tiene demasiado ruido, o porque es difícil por otra razón (digamos el proyector hace un barrido (como en iis 01) o hay luces intermitentes), la fuente es mala o no hay ninguna letra chica, así que no se gana nada con la resolución original.

Esto se hace agregando al vf el filtro scale=ancho:largo (por ejemplo -vf yadif=0:0:0,scale=1280:720). Si se usa el scale y la relación largo/alto no es 16/9 puede ser necesario agregarle el setdar=16/9  (por ejemplo  -vf yadif=0:0:0,scale=640:480,setdar=16/9).
<Detalle técnico>
 Puede cambiarse el algoritmo usado para el scaling agregando la opción sws_flags='algoritmo' donde algoritmo es uno de los descriptos en https://ffmpeg.org/ffmpeg-scaler.html. Por defecto usa el bicubic desde hace tiempo, que es bastante adecuado. (el bilinear lo hace demasiado suave y el lanczos o el sinc lo hacen demasiado "sharp" que es contraproducente a bitrate bajos como los nuestros).
</Detalle técnico>

Por defecto se usa el preset medium  de x264. Puede obtenerse un poco más de calidad a expensas de mayor tiempo de codificación agregando -preset slow (eso cambia varias cosas que pueden consultarse en la ayuda de x264, entre ellas pone -refs 5). Si se usa 1920x1080 y se quiere mantener la compatibilidad con el nivel High@4.0 habría que limitar -refs a 4 (-refs 4) o directamente poner -level:v 4.0 
<Detalle técnico>
De acuerdo a las pruebas que hice con algunos videos cambiar la opción trellis a 2 tiene (bastante) más efecto que subir refs de 4 a 5 (-trellis 2 se activa por defecto cuando se pone -preset slower) en cuanto a la medida matemática SSIM, habría que hacer pruebas visuales entre trellis 1 y 2 para asegurarse pero llevan su tiempo que no tengo...
</Detalle técnico>


En resumen:

más lento 
ffmpeg -y -i Editado.mp4  -c:v libx264 -vf yadif=0:0:0,setfps=fps=25 -pass 1 -preset slow -b:v 500k -an -f mp4  /dev/null 
ffmpeg -i Editado.mp4 -c:v libx264 -vf yadif=0:0:0,setfps=fps=25,setdar=16/9 -pass 2 -preset slow -refs 4 -trellis 2 -b:v 500k -c:a aac -strict -2 -b:a 128k -movflags +faststart  Destino.mp4

aún más lento
ffmpeg -y -i Editado.mp4  -c:v libx264 -vf yadif=0:0:0,setfps=fps=25 -pass 1 -preset slow  -bf 5 -b:v 500k -level:v 4.0 -an -f mp4  /dev/null 
ffmpeg -i Editado.mp4 -c:v libx264 -vf yadif=0:0:0,setdar=16/9 -pass 2 -preset slow -bf 5 -subq 9 -trellis 2 -b:v 500k -c:a aac -strict -2 -b:a 128k -movflags +faststart -level:v 4.0 Destino.mp4


Por último si fuera necesario duplicar el canal de audio izquierdo  se puede hacer agregando: -af pan="stereo| c1=c0 | c0=c0"
Generalmente eso se hace con el kdenlive pues ffmpeg no permite elegir la duración del efecto pan, pero si el kdenlive falla (de hecho falló en el iis 14)  se puede hacer así.


 



--

--- Has recibido este mensaje porque estás suscrito al grupo "OpenFING" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a openfing+u...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.



--
Guillermo Gabrielli

Guillermo Gabrielli

unread,
Oct 5, 2015, 9:34:16 PM10/5/15
to open...@googlegroups.com
en el ultimo comando me faltó el ,setfps=fps=25,

Al script lo subí al bitbucket en https://bitbucket.org/ggf31416/comprimirmts/overview
--
Guillermo Gabrielli

Pablo Perdomo

unread,
Oct 6, 2015, 1:32:42 PM10/6/15
to Openfing - Lista de correo
Me leí todo el mail explicando en detalle cada punto del ffmpeg y la verdad excelente explicación.

Saludos, Pablo

Para acceder a más opciones, visita https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages