Cambiar FPS al exportar video en PowerPoint con VBA y FFmpeg

¿Necesitas exportar un video desde PowerPoint con un número de fotogramas por segundo específico, como 24, 25, 29.97 o 60 FPS? Aunque la interfaz no permite fijarlo, puedes controlarlo con un macro VBA o, en su defecto, reconvertir el archivo con FFmpeg o HandBrake.

Índice

Cambiar el FPS al exportar video desde PowerPoint

PowerPoint exporta videos MP4 o WMV con una configuración predeterminada de fotogramas por segundo que, en la práctica, suele rondar los ~30 FPS. Esta cadencia funciona bien para la mayoría de presentaciones, pero no siempre es la adecuada. Si vas a publicar en entornos cinematográficos (24 FPS), en regiones con estándar PAL (25 FPS), o buscas ultra fluidez (50/60 FPS), querrás fijar un valor distinto.

La interfaz de PowerPoint no ofrece un selector de FPS, pero el modelo de objetos sí: el método CreateVideo incluye el parámetro FramesPerSecond. Con un breve macro puedes exportar con el FPS que tú elijas y, además, ajustar resolución y calidad.

Por qué importa el FPS

  • Consistencia visual: La mezcla de material a 24, 25, 29.97 o 60 FPS puede generar “tirones” al publicar o montar.
  • Compatibilidad de plataforma: Algunas plataformas estandarizan a 24/25/30/60 FPS; si subes en otro valor, re-convierten.
  • Tamaño de archivo: A mayor FPS, más fotogramas por segundo se codifican; si mantienes calidad constante, el peso puede aumentar.
  • Legibilidad: Animaciones sutiles y efectos de transición se benefician de 50/60 FPS; para vídeos tipo “diapositiva + voz”, 24/25/30 suelen ser suficientes.

Solución nativa con VBA

Lo más cómodo es automatizar la exportación con un macro. PowerPoint 2019 admite el método ActivePresentation.CreateVideo con estos parámetros clave:

ParámetroQué haceValores típicosNotas prácticas
FileNameRuta y nombre del MP4 de salida.C:\Videos\miVideo.mp4Evita rutas sincronizadas si ves errores; usa una carpeta local y nombres cortos.
UseTimingsAndNarrationsRespeta tiempos/narraciones grabados por diapositiva.True / FalseSi es False, aplica DefaultSlideDuration a las diapositivas sin tiempos.
DefaultSlideDurationSegundos por diapositiva si no hay tiempos grabados.5, 8, 10…Útil para presentaciones autoejecutables sin locución.
VertResolutionAltura del video en píxeles (la anchura se calcula por aspecto).480, 720, 1080, 1440, 2160Selecciona según destino: 1080p suele ser el equilibrio ideal; 2160p genera archivos mucho mayores.
FramesPerSecondFPS de exportación24, 25, 29.97, 30, 50, 60Algunas instalaciones redondean a enteros; si 23.976 no se respeta, usa 24.
QualityCalidad de codificación1–100Valores altos = mejor calidad y mayor peso; 85–100 suele rendir bien.

Paso a paso para habilitar macros

  1. Abre tu presentación y guarda como Presentación habilitada para macros (.pptm): Archivo > Guardar como > .pptm.
  2. Activa la pestaña Desarrollador: Archivo > Opciones > Personalizar cinta y marca Desarrollador.
  3. En Desarrollador > Macros, escribe un nombre (p. ej., ExportarVideoFPS) y haz clic en Crear.

Código mínimo listo para usar

Copia y pega el siguiente procedimiento entre Sub ... End Sub y ejecútalo con F5. El archivo se guardará en tu Escritorio, evitando problemas comunes con rutas redirigidas a OneDrive.

Sub ExportarVideoFPS()
    Dim destino As String
    ' Obtiene la ruta real del Escritorio (funciona tanto si está en OneDrive como local)
    destino = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\Test.mp4"

    If ActivePresentation.CreateVideoStatus <> ppMediaTaskStatusInProgress Then
        ActivePresentation.CreateVideo _
            FileName:=destino, _
            UseTimingsAndNarrations:=True, _   ' Usa tiempos y narraciones grabados
            DefaultSlideDuration:=10, _        ' Segundos por diapositiva si no hay tiempos
            VertResolution:=1080, _            ' 480, 720, 1080, 1440, 2160...
            FramesPerSecond:=25, _             ' 24, 25, 29.97, 30, 50, 60
            Quality:=100                       ' 1–100
    End If

    MsgBox "Creando video..."
End Sub

Notas: puedes ajustar FramesPerSecond a los valores que necesites. En algunos equipos los valores no enteros (p. ej., 23.976 o 29.97) pueden redondearse; si no se respetan, emplea el entero más cercano (24 o 30). Para verificar el FPS final, examina las propiedades del archivo o usa un analizador como MediaInfo.

Versión mejorada con selector de carpeta y espera

Este ejemplo te permite elegir el nombre y la carpeta de destino, y espera a que termine la exportación. Mantiene la interfaz receptiva con DoEvents.

Option Explicit

Sub ExportarVideoFPSInteractivo()
    Dim dlg As FileDialog
    Dim destino As String
    Dim nombre As String
    Dim ruta As String
    Dim fps As Double
    Dim altura As Long
    Dim calidad As Long

    ' Parámetros interactivos
    fps = Val(InputBox("FPS de salida (24, 25, 29.97, 30, 50, 60):", "FPS", "25"))
    If fps <= 0 Then Exit Sub

    altura = CLng(Val(InputBox("Altura del video (480, 720, 1080, 1440, 2160):", "Resolución vertical", "1080")))
    If altura <= 0 Then Exit Sub

    calidad = CLng(Val(InputBox("Calidad 1–100 (100 = máximo):", "Calidad", "100")))
    If calidad <= 0 Then Exit Sub

    ' Elegir carpeta de destino
    Set dlg = Application.FileDialog(msoFileDialogSaveAs)
    With dlg
        .InitialFileName = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\Exportado.mp4"
        .Title = "Guardar video"
        .FilterIndex = 1
        If .Show <> -1 Then Exit Sub
        destino = .SelectedItems(1)
    End With

    ' Asegura extensión .mp4
    If LCase$(Right$(destino, 4)) <> ".mp4" Then destino = destino & ".mp4"

    ' Lanza la exportación si no hay otra en curso
    If ActivePresentation.CreateVideoStatus <> ppMediaTaskStatusInProgress Then
        ActivePresentation.CreateVideo _
            FileName:=destino, _
            UseTimingsAndNarrations:=True, _
            DefaultSlideDuration:=10, _
            VertResolution:=altura, _
            FramesPerSecond:=fps, _
            Quality:=calidad
    Else
        MsgBox "Ya hay una exportación en progreso.", vbExclamation
        Exit Sub
    End If

    ' Espera hasta que finalice (no hay porcentaje disponible en el objeto)
    Do While ActivePresentation.CreateVideoStatus = ppMediaTaskStatusInProgress
        DoEvents
        PausaSegundos 1
    Loop

    Select Case ActivePresentation.CreateVideoStatus
        Case ppMediaTaskStatusDone
            MsgBox "Video creado correctamente en:" & vbCrLf & destino, vbInformation
        Case ppMediaTaskStatusFailed
            MsgBox "La exportación ha fallado. Revisa la ruta de destino y los permisos.", vbCritical
        Case Else
            MsgBox "La exportación se ha detenido.", vbExclamation
    End Select
End Sub

Private Sub PausaSegundos(ByVal s As Single)
    Dim t As Date
    t = Now + TimeSerial(0, 0, s)
    Do While Now < t
        DoEvents
    Loop
End Sub

Valores recomendados según uso

EscenarioFPS sugeridoResolución sugeridaComentarios
Cinemático / estilo tráiler241080pAspecto “film look”, transiciones suaves con tiempos más largos.
Difusión en regiones PAL251080pMantiene paridad con contenidos a 50 Hz.
Web general / e-learning301080pEquilibrio entre fluidez y tamaño; óptimo para screencasts.
Animaciones con mucho movimiento50 o 601080p o 1440pMayor claridad en efectos rápidos; tamaño de archivo superior.
Material legado NTSC29.971080pÚtil si integras capturas históricas a 29.97.

Alternativa sin VBA

Si no quieres habilitar macros, puedes exportar con los valores por defecto desde PowerPoint y fijar el FPS deseado mediante un transcodificador. FFmpeg y HandBrake son opciones populares.

FFmpeg en una línea

Este comando reescribe el archivo a 23.976 FPS, H.264 y audio AAC. Ajusta -r, -crf y -preset según tus necesidades.

ffmpeg -i entrada.mp4 -r 23.976 -vsync cfr -c:v libx264 -pixfmt yuv420p -crf 18 -preset medium -c:a aac -b:a 192k salida23.976.mp4
  • -r: FPS de salida (colócalo después de -i para forzar la velocidad del flujo generado).
  • -vsync cfr: genera una cadencia constante de fotogramas (menos sorpresas en reproductores exigentes).
  • -crf: control de calidad (menor valor = mejor calidad; 18–20 es un punto de partida sólido).
  • -preset: velocidad de codificación (más lento = mejor compresión).

Variantes útiles de FFmpeg

# Reusar audio sin recodificar si ya está en AAC
ffmpeg -i entrada.mp4 -r 30 -vsync cfr -c:v libx264 -pixfmt yuv420p -crf 19 -preset slow -c:a copy salida30.mp4

Producir 60 FPS para animaciones muy fluidas

ffmpeg -i entrada.mp4 -r 60 -vsync cfr -c\:v libx264 -pix\fmt yuv420p -crf 20 -preset medium -c\:a aac -b\:a 160k salida\60.mp4 

HandBrake con interfaz gráfica

  1. Abre el archivo exportado desde PowerPoint.
  2. En Video, marca Constant Framerate y elige la opción de FPS deseada.
  3. Selecciona el códec H.264/H.265, calidad Constant Quality 20–22 (H.264) como punto de partida.
  4. Guarda y convierte.

HandBrake es ideal si no te sientes cómodo con la línea de comandos.

Diagnóstico de errores de exportación

Si la exportación falla o PowerPoint no avanza, suele deberse a la ruta de guardado o a un proceso que bloquea el archivo de destino. A continuación, los síntomas más frecuentes y cómo corregirlos.

SíntomaCausa probableSolución
Error al iniciar la exportaciónRuta en Escritorio sincronizado con OneDrive, permisos o nombre demasiado largo.Exporta a una carpeta local como C:\Temp\ o usa SpecialFolders("Desktop") en el macro. Acorta el nombre del archivo.
Estado “InProgress” indefinidoExportación pesada o archivo de salida en uso por otro proceso.Cierra reproductores que apunten a ese archivo y espera a que finalice. Cambia de carpeta y vuelve a intentarlo.
FPS final no coincideEl valor fraccional se redondeó; el reproductor informa aproximado.Usa 24/25/30/60 si 23.976/29.97 no se respetan. Verifica con una herramienta de análisis en lugar del reproductor.
Macro no se ejecutaMacros deshabilitadas por la directiva de seguridad.Habilita macros para ese archivo o firma digitalmente tu macro. Alternativamente, usa la ruta de FFmpeg.
Cuelgues o artefactos en videoControladores gráficos o fuentes/medios enlazados problemáticos.Actualiza controladores, incrusta fuentes o reemplaza medios dañados. Quita animaciones excesivas en la diapositiva afectada.

Comprobación del FPS real

  • En Windows, ve a Propiedades > Detalles del archivo MP4 (puede mostrar redondeos).
  • Utiliza un analizador especializado para ver el valor exacto y si el flujo es CFR o VFR.

Buenas prácticas de exportación

  • Constancia de formato: Exporta todo el proyecto al mismo FPS para evitar tirones en montaje.
  • Sonido sincronizado: Con narraciones, activa UseTimingsAndNarrations:=True para preservar pausas y transiciones.
  • Resolución y relación de aspecto: Diseña en 16:9 si vas a 1080p o 2160p; evita mezclar formatos verticales.
  • Tipografías incrustadas: Archivo > Opciones > Guardar > Incrustar fuentes para evitar sustituciones.
  • Pruebas cortas: Antes de lanzar un render de 30 minutos, exporta 2–3 diapositivas para validar FPS y peso de archivo.

Flujos de trabajo avanzados

Exportar por lotes múltiples presentaciones

Si tienes varias presentaciones, este macro recorre una carpeta y exporta cada .pptx/.pptm a MP4 con el mismo FPS, resolución y calidad.

Option Explicit

Sub ExportarCarpetaAFPS()
Dim fldr As FileDialog, ruta As String
Dim fps As Double, altura As Long, calidad As Long```
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
fldr.Title = "Carpeta con presentaciones"
If fldr.Show <> -1 Then Exit Sub
ruta = fldr.SelectedItems(1)

fps = Val(InputBox("FPS:", "FPS", "30"))
altura = CLng(Val(InputBox("Altura (480/720/1080/1440/2160):", "Resolución", "1080")))
calidad = CLng(Val(InputBox("Calidad 1–100:", "Calidad", "95")))

Dim fso As Object: Set fso = CreateObject("Scripting.FileSystemObject")
Dim carpeta As Object: Set carpeta = fso.GetFolder(ruta)
Dim archivo As Object

Dim pres As Presentation, salida As String

For Each archivo In carpeta.Files
    If LCase$(fso.GetExtensionName(archivo.Path)) = "pptx" Or LCase$(fso.GetExtensionName(archivo.Path)) = "pptm" Then
        Set pres = Presentations.Open(archivo.Path, WithWindow:=msoFalse)
        salida = fso.BuildPath(carpeta.Path, fso.GetBaseName(archivo.Path) & "_" & Replace(CStr(fps), ".", "_") & "fps.mp4")

        If pres.CreateVideoStatus <> ppMediaTaskStatusInProgress Then
            pres.CreateVideo salida, True, 10, altura, fps, calidad
            Do While pres.CreateVideoStatus = ppMediaTaskStatusInProgress
                DoEvents
                PausaSegundos 1
            Loop
        End If
        pres.Close
    End If
Next archivo

MsgBox "Exportación por lotes finalizada.", vbInformation
```
End Sub

Private Sub PausaSegundos(ByVal s As Single)
Dim t As Date
t = Now + TimeSerial(0, 0, s)
Do While Now < t
DoEvents
Loop
End Sub 

Plantilla parametrizable para tu equipo

Si exportas con frecuencia al mismo estándar, crea un módulo con constantes:

Public Const FPS_OBJETIVO As Double = 25
Public Const ALTURA As Long = 1080
Public Const CALIDAD As Long = 100

Y llama a CreateVideo con esas constantes. Así todo el equipo exportará con la misma “receta”.

Preguntas frecuentes

¿Puedo fijar 29.97 FPS exactos?
Sí, el parámetro acepta fracciones; sin embargo, en algunas instalaciones puede redondearse a 30. Si observas redondeo, usa 30 o reescribe con FFmpeg a 29.97.

¿El parámetro VertResolution acepta cualquier valor?
Acepta valores habituales (480, 720, 1080, 1440, 2160). Si introduces uno no estándar, PowerPoint puede ajustar automáticamente a la escala más cercana.

¿Qué pasa si cierro PowerPoint durante la exportación?
Se interrumpe el proceso y el archivo resultante puede quedar corrupto o incompleto. Espera a que CreateVideoStatus deje de estar en progreso.

¿Puedo usar Guardar como > MP4 en lugar de macros?
Sí, pero no podrás fijar el FPS. Es útil para casos “rápidos” con la configuración por defecto.

El Escritorio está en OneDrive y la exportación falla
Usa el método robusto del ejemplo (SpecialFolders("Desktop")) o exporta a una carpeta local (p. ej., C:\Temp\).

¿Cómo mantengo el tamaño del archivo bajo control?
Reduce Quality en CreateVideo o usa -crf más alto en FFmpeg (p. ej., 21–23). Prueba con clips cortos hasta hallar el equilibrio.

Resumen operativo

  • PowerPoint no tiene control de FPS en la interfaz, pero sí en el modelo de objetos con CreateVideo.
  • Un macro de pocas líneas te permite exportar al FPS exacto que necesites (24/25/29.97/30/50/60), regulando también resolución y calidad.
  • Si prefieres no usar macros, exporta con los valores por defecto y reconvierte el archivo a tu FPS objetivo con FFmpeg o HandBrake.
  • Ante errores, revisa la ruta de salida (OneDrive/Escritorio), permisos y nombres de archivo largos; prueba con una carpeta local.

Checklist para no fallar

  • Define FPS objetivo acorde al destino (24/25/30/60).
  • Establece UseTimingsAndNarrations según si tienes locución/tiempos.
  • Elige VertResolution y Quality según calidad/peso deseado.
  • Verifica el FPS real del archivo final con una herramienta confiable.
  • Si hay errores, exporta a C:\Temp\ o usa SpecialFolders("Desktop"), y cierra aplicaciones que usen el archivo objetivo.

Solución paso a paso recomendada

  1. Guarda la presentación como .pptm y habilita la pestaña Desarrollador.
  2. Crea el macro ExportarVideoFPS y pega el código mínimo del ejemplo.
  3. Ajusta FramesPerSecond al valor deseado y VertResolution a 1080.
  4. Ejecuta el macro. Si surge un error, cambia la ruta a una carpeta local no sincronizada.
  5. Comprueba el FPS final y el peso. Si necesitas afinar, reexporta o reconvierte con FFmpeg.

En conclusión: sí, puedes fijar un FPS personalizado directamente desde PowerPoint mediante un macro VBA con CreateVideo(... FramesPerSecond:=...). Si prefieres evitar macros, exporta y reescribe el FPS con un transcodificador externo. Con estas dos vías tendrás control total sobre la cadencia de tus videos sin abandonar tu flujo de trabajo en PowerPoint.

Índice