Cómo instalar FFmpeg en Windows: una guía completa
Para instalar FFmpeg en Windows, extrae una compilación para Windows y agrega a tu PATH la carpeta
que contiene ffmpeg.exe. El archivo ZIP contiene una carpeta con la versión en su nombre,
por lo que esa carpeta suele estar a mayor profundidad que C:\FFmpeg\bin.
Esta guía localiza la ruta real, permite usar FFmpeg desde tu cuenta y comprueba su funcionamiento
creando e inspeccionando un video corto.
Requisitos previos
Usa Windows 11 en una PC x64 y Windows PowerShell 5.1. Necesitas una conexión a Internet y espacio para el ZIP y sus archivos extraídos. Esta instalación permanece dentro de tu perfil de usuario y cambia solo tu PATH de usuario; no requiere una terminal con privilegios de administrador.
Los comandos siguientes se deben pegar en PowerShell, no en el Símbolo del sistema. Mantén abierta
la misma ventana de PowerShell durante la instalación para que $bin siga disponible.
Detente si un bloque informa de un error. No necesitas cambiar la directiva de ejecución de scripts
para pegar estos comandos.
Instala la compilación ZIP
Paso 1: Descarga FFmpeg
Abre la página oficial de descargas de FFmpeg y sigue el enlace
«Windows builds from gyan.dev». FFmpeg publica código fuente; Gyan proporciona los programas
compilados para Windows. En la página de compilaciones de Gyan,
busca release builds y descarga ffmpeg-release-essentials.zip junto con el archivo
.sha256 que aparece a su lado. Guárdalos en tu carpeta Descargas con esos nombres,
incluido ffmpeg-release-essentials.zip.sha256. Si tu navegador muestra la suma de verificación como texto,
guarda la página como un archivo de texto sin formato con ese nombre de archivo.
Si la descarga del ZIP es lenta, sigue el enlace «mirror @ github» de la página y selecciona el ZIP
essentials de la misma versión. Renombra ese ZIP que incluye la versión en su nombre como
ffmpeg-release-essentials.zip para estos comandos y usa la suma de verificación de esa misma versión
que figura en la página de compilaciones de Gyan.
El ZIP essentials incluye ffmpeg, ffprobe y el codificador
libx264 que se usa más adelante. El ZIP funciona con el extractor integrado de
PowerShell, así que no necesitas 7-Zip. La compilación probada es la de Gyan
9.0.2-essentials_build; el enlace de descarga puede ofrecer una versión más reciente cuando
lo visites.
La compilación essentials es estática. Si eliges una compilación compartida, conserva las DLL de FFmpeg correspondientes junto con sus ejecutables. «Full» agrega bibliotecas externas; eso no significa que la necesites para la codificación habitual en H.264. Actualmente, Gyan requiere Windows 10 o posterior; esta guía cubre Windows 11 x64, no versiones anteriores de Windows ni compilaciones nativas para ARM64.
Verifica el ZIP y localiza su directorio bin
Pega este bloque en PowerShell. Si guardaste la descarga en otra ubicación, cambia primero
$archive. El bloque comprueba el SHA-256 con el archivo del distribuidor, extrae
el contenido en %LOCALAPPDATA%\Programs\FFmpeg y guarda el directorio real de los ejecutables en
$bin. No permite usar un destino existente, incluido uno que haya quedado
tras una extracción interrumpida. Elige otro destino en lugar de sobrescribir una instalación.
$bin = & {
$ErrorActionPreference = 'Stop'
$archive = Join-Path $env:USERPROFILE 'Downloads\ffmpeg-release-essentials.zip'
$destination = Join-Path $env:LOCALAPPDATA 'Programs\FFmpeg'
if (Test-Path -LiteralPath $destination) {
throw 'The installation folder already exists. Choose a new destination.'
}
$expected = (Get-Content -Raw -LiteralPath "$archive.sha256").Trim()
$actual = (Get-FileHash -LiteralPath $archive -Algorithm SHA256).Hash
if ($expected -notmatch '^[0-9a-fA-F]{64}$' -or $actual -ne $expected) {
throw 'SHA-256 mismatch. Download the ZIP and its checksum again.'
}
Expand-Archive -LiteralPath $archive -DestinationPath $destination
$executables = @(Get-ChildItem -LiteralPath $destination -Filter ffmpeg.exe -File -Recurse)
if ($executables.Count -ne 1) {
throw 'Expected one ffmpeg.exe in the extracted archive.'
}
$executables[0].Directory.FullName
}
$bin
Para el ZIP probado, el resultado termina en
Programs\FFmpeg\ffmpeg-9.0.2-essentials_build\bin. El último componente debe ser bin, y esa
carpeta debe contener tanto ffmpeg.exe como ffprobe.exe.
No agregues a PATH el ZIP, la carpeta externa donde se extrajo ni el nombre del archivo ejecutable.
Get-FileHash compara los bytes descargados con la suma de verificación del distribuidor. Comprobar la coincidencia permite detectar una descarga dañada o que no corresponde; no es una prueba independiente de que los archivos del distribuidor sean confiables. Expand-Archive extrae el ZIP y conserva sus directorios anidados.
Agrega FFmpeg a tu PATH de usuario
PATH es una lista de directorios donde Windows busca comandos. El siguiente bloque agrega
$bin al final de tu PATH de usuario, conserva sus entradas existentes y
evita un duplicado idéntico. El PATH del equipo se aplica a todas las cuentas y normalmente requiere
permisos de administrador para modificarlo; no necesitas editarlo para esta instalación.
& {
$ErrorActionPreference = 'Stop'
if (-not $bin -or -not (Test-Path -LiteralPath (Join-Path $bin 'ffmpeg.exe') -PathType Leaf)) {
throw 'Run the extraction block successfully before changing PATH.'
}
$userPath = [Environment]::GetEnvironmentVariable('Path', 'User')
if (($userPath -split ';') -notcontains $bin) {
$updatedPath = (@($userPath, $bin) | Where-Object { $_ }) -join ';'
[Environment]::SetEnvironmentVariable('Path', $updatedPath, 'User')
}
}
Esto guarda PATH para tu cuenta; no actualiza los programas que ya están en ejecución. Para esta ventana de PowerShell, agrega también el directorio al principio del PATH del proceso:
$env:Path = "$bin;$env:Path"
Un proceso hijo hereda el entorno de su proceso padre. Por lo tanto, abrir otra pestaña en una terminal o un editor existente puede conservar un PATH antiguo. Cierra toda la aplicación de terminal y vuelve a abrirla desde Inicio antes de comprobar la persistencia. Si todavía conserva el entorno antiguo, cierra la sesión de Windows y vuelve a iniciarla. La documentación de Microsoft sobre variables de entorno explica estos niveles de proceso, usuario y equipo. La adición temporal al principio da preferencia a esta copia de forma deliberada; tras un nuevo inicio de sesión, aún se puede encontrar una instalación anterior que aparezca antes en el PATH combinado.
Verificar la instalación
Comprueba los ejecutables seleccionados y sus versiones. Ejecuta esto ahora y de nuevo después de volver a abrir la terminal:
& {
$ErrorActionPreference = 'Stop'
Get-Command ffmpeg, ffprobe -All | Format-List CommandType, Name, Source
ffmpeg -version
if ($LASTEXITCODE -ne 0) { throw 'ffmpeg could not start.' }
ffprobe -version
if ($LASTEXITCODE -ne 0) { throw 'ffprobe could not start.' }
}
Ambas rutas deben apuntar a la carpeta bin extraída, con versiones de
compilación coincidentes. Si aparece más de un resultado para un nombre, el primero es el comando
que selecciona PowerShell. Un alias o una función también pueden tener prioridad sobre un ejecutable.
Codifica un video e inspecciónalo
En PowerShell, ve a una carpeta donde quieras crear un pequeño video de prueba, como Descargas.
Este ejemplo genera un patrón de prueba de un segundo, así que no necesita material de video de
entrada ni GPU. Escribe ffmpeg-check.mp4 en el directorio actual. La comprobación
explícita del archivo detiene una nueva ejecución antes de la codificación;
-n también impide que FFmpeg sobrescriba un archivo existente. Para repetir
la prueba, mueve ese archivo a otra ubicación o elige otro nombre de salida tanto en la comprobación
como en ambos comandos.
& {
$ErrorActionPreference = 'Stop'
if (Test-Path -LiteralPath './ffmpeg-check.mp4') {
throw 'Output already exists. Move it aside or choose a new filename.'
}
ffmpeg -hide_banner -loglevel error -nostdin -n -f lavfi -i "testsrc2=size=320x180:rate=25" -t 1 -c:v libx264 -pix_fmt yuv420p "./ffmpeg-check.mp4"
if ($LASTEXITCODE -ne 0) { throw 'Encode failed. Check the error above before probing the output.' }
ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,width,height,pix_fmt:format=duration -of json "./ffmpeg-check.mp4"
if ($LASTEXITCODE -ne 0) { throw 'ffprobe could not read the output.' }
}
El JSON debe indicar h264, un ancho de 320,
una altura de 180, el formato de píxel yuv420p y una
duración de aproximadamente 1.000000 segundos. Esto comprueba la codificación y
la lectura de un MP4 real, más allá de simplemente iniciar los programas. FFmpeg documenta el
control de sobrescritura, y los
campos seleccionados de ffprobe facilitan la inspección del resultado.
Solución de problemas comunes
FFmpeg no se reconoce
Comprueba si el ejecutable funciona al usar su ruta completa. En la sesión original de PowerShell,
$bin aún contiene ese directorio; en una sesión nueva, asígnale la ruta
mostrada durante la extracción.
& {
$ErrorActionPreference = 'Stop'
& (Join-Path $bin 'ffmpeg.exe') -version
if ($LASTEXITCODE -ne 0) { throw 'The selected ffmpeg.exe could not start.' }
}
Si esto funciona, pero ffmpeg -version no, investiga cómo se localiza el comando:
la entrada bin correcta, el PATH heredado por la terminal y los resultados de
Get-Command -All anteriores. Un error «Unknown encoder» significa que FFmpeg sí se
inició. Comprueba que la compilación seleccionada contenga el codificador que solicitaste;
por ejemplo, ejecuta ffmpeg -hide_banner -encoders y busca libx264.
Errores de DLL faltantes
Extrae de nuevo el archivo comprimido completo en una carpeta nueva y confirma qué ejecutable está
ejecutando PowerShell. Una compilación compartida necesita sus DLL correspondientes; copiar solo
sus archivos .exe pierde esa configuración. No mezcles DLL de distintas
versiones ni descargues DLL individuales de sitios no relacionados. Una compilación estática sigue
dependiendo de componentes del sistema Windows. Instalar el Visual C++ Redistributable más reciente
no es una solución universal cuando se informa de una DLL faltante; sigue los requisitos de
entorno de ejecución documentados para esa compilación.
Problemas de permisos
Mantén la instalación y el archivo de salida de prueba en carpetas donde tu cuenta pueda escribir.
Un error de acceso denegado en Program Files o al cambiar el PATH del equipo no es
motivo para ejecutar todas las conversiones como administrador. Si una PC administrada bloquea la
descarga o la ejecución de ejecutables, usa su proceso aprobado de instalación de software.
La aceleración por hardware requiere una comprobación aparte
El ejemplo usa codificación por CPU. Que una compilación incluya NVENC, QSV u otro componente de
hardware no demuestra que tu PC pueda usarlo: también debe contar con hardware y controladores
compatibles. La documentación de -hwaccels de FFmpeg
explica esa distinción. Haz que la codificación por software funcione antes de diagnosticar un
codificador por GPU.
Si ya usas un gestor de paquetes
La página de compilaciones de Gyan también enumera paquetes de Chocolatey, Scoop y WinGet. Son una alternativa a esta instalación manual; usa el mismo gestor para actualizarlos y desinstalarlos, y comprueba qué compilación instala su paquete. Evita mantener ambos métodos en PATH a menos que quieras elegir entre ellos. La configuración de los gestores de paquetes queda fuera del alcance de esta guía.
Actualizar FFmpeg
Para esta instalación manual, descarga el nuevo ZIP y su suma de verificación; luego repite el
bloque de extracción con un destino diferente, como Programs\FFmpeg-new. Ejecuta los
bloques de PATH con el nuevo valor de $bin y repite la comprobación de
codificación e inspección con un nuevo nombre de archivo de salida. Conserva la carpeta anterior
hasta que la nueva compilación funcione.
Después, busca en Inicio «Editar las variables de entorno de esta cuenta», edita Path en
Variables de usuario y elimina la entrada antigua exacta de bin,
conservando la nueva y todas las entradas no relacionadas. Reinicia la terminal y comprueba
Get-Command de nuevo antes de eliminar la instalación antigua. Para desinstalar una
copia manual, elimina su entrada del PATH de usuario y luego su carpeta extraída.
