Para trabajar con precisión, primero convierta el video al flujo de bits RAW YUV (si aún no lo está) mediante:
ffmpeg -i input.mp4 -an -vcodec rawvideo -pix_fmt yuv420p rawbitstream.yuv
Siguiente paso: el select
filtrar toma una expresión , dónde n
es el numero de cuadro
ffmpeg -r 2 -s WxH -i rawbitstream.yuv -filter:v select="mod(n-1\,2)" \
-c:v rawvideo -r 1 -format rawvideo -pix_fmt yuv420p -an odd.yuv
ffmpeg -r 2 -s WxH -i rawbitstream.yuv -filter:v select="not(mod(n-1\,2))" \
-c:v rawvideo -r 1 -format rawvideo -pix_fmt yuv420p -an even.yuv
Tener ffmpeg
no duplicar cuadros, tiene que forzar la mitad de la tasa de cuadros de su entrada, por lo que establece "2" como entrada y "1" en la salida. No olvide reemplazar el WxH con las dimensiones reales de su clip porque el flujo de bits sin formato no tiene un encabezado que lleve esta información.
En lugar de lo anterior, otra posibilidad sería agregar el setpts
Filtro para establecer nuevas marcas de tiempo para la salida. Pero ten cuidado ya que no deja cuadros con precisión. Aquí, 25 es la velocidad de fotogramas de salida real que desea:
ffmpeg -i input.mp4 -filter:v select="mod(n-1\,2)",setpts="N/(25*TB)" \
-c:v rawvideo -r 12.5 -format rawvideo -pix_fmt yuv420p -an odd.yuv
ffmpeg -i input.mp4 -filter:v select="not(mod(n-1\,2))",setpts="N/(25*TB)" \
-c:v rawvideo -r 12.5 -format rawvideo -pix_fmt yuv420p -an even.yuv
Por supuesto, puede elegir otro formato de píxel (cualquiera de ffmpeg -pix_fmts
). Asegúrese de que al leer el archivo sepa el tamaño de píxel y el formato de píxel:
ffmpeg -f rawvideo -s:v 1280x720 -pix_fmt yuv420p input.yuv …