FFmpeg DeckLink Windows

0

Descargué la última versión estática de ffmpeg que admite decklink para Windows.
Cuando intenté ejecutar el siguiente comando:

ffmpeg -y -i RTMPsource -s 720x576 -r 25000/1000 -pix_fmt uyvy422 -f decklink 'Decklink Video Capture'

Tengo el siguiente error:

[NULL @ 0000000000d46e00] El formato de salida solicitado 'decklink' no es un formato de salida adecuado

Como veo en la documentación : "Para habilitar este dispositivo de entrada ... En Windows, debe ejecutar los archivos IDL a través de widl"
¿Alguien puede explicar qué significa: "necesita ejecutar los archivos IDL a través de widl" y cómo ¿para hacer esto?

Ivan Kolesnikov
fuente
@Anaksunaman La respuesta en su primer enlace dice exactamente lo que el OP ya sabe. - Ivan, ¿podrías mostrar toda la salida de la línea de comandos, por favor?
slhck
Se proporcionó una respuesta actualizada a la pregunta de los OP con enlaces y explicaciones relevantes.
Anaksunaman

Respuestas:

3

Como veo en la documentación: "Para habilitar este dispositivo de entrada ... En Windows, debe ejecutar los archivos IDL a través de widl". ¿Alguien puede explicar qué significa: "necesita ejecutar los archivos IDL a través de widl" y cómo hacerlo?

Respuesta corta

No debería necesitar hacer algo así en su caso. Esto hace referencia a un paso en el proceso de compilación de FFmpeg desde cero con el soporte de DeckLink (que se hizo para crear el binario al que se vinculó).

Solución de problemas

[NULL @ XXXXXXXXXXXXXXXX] Requested output format 'XYZ' is not a suitable output format es un error genérico, que generalmente indica que tiene algo mal en su comando FFmpeg (es decir, ha especificado las opciones "incorrectas" o la combinación de opciones).

Dicho esto, lo más probable es que tengas un problema diferente . A pesar del hecho de que la compilación a la que se vincula debe admitir la opción --enable-decklink (como se indica), le falta otra opción ( --disable-w32threads ) que requiere la compatibilidad con DeckLink (al menos sin parches). Aparentemente, la última compilación para admitir esa opción fue la compilación del 10 de diciembre de 2016 ( ffmpeg-20161210-edb4f5d ).

Desafortunadamente, esta compilación ya no parece estar fácilmente disponible. La siguiente mejor opción sería probar las compilaciones v3.2 (por ejemplo, ffmpeg-3.2-win64-static.zip ), que todavía están disponibles (a partir de este escrito) en los antiguos directorios de compilación Zeranoe de 32 y 64 bits .

Nota: Las opciones de configuración (con qué opciones se creó FFmpeg) se enumeran en el banner de configuración, la sección de "configuración" inicial larga que aparece si simplemente escribe "ffmpeg" en la línea de comando.


Respuesta larga

Un lenguaje de definición de interfaz (IDL) es una forma de:

[...] describa una interfaz de forma independiente del idioma, permitiendo la comunicación entre componentes de software que no comparten un idioma.

En este caso, Black Magic Design (que produce la serie de tarjetas de captura DeckLink ) proporciona un Kit de desarrollo de software (SDK) que tiene un número de archivos IDL que aparentemente son necesarios para construir FFmpeg con soporte de DeckLink.

Debido a que los archivos IDL se pueden usar en una variedad de situaciones, deben ejecutarse a través de un compilador IDL para generar archivos que se puedan usar con otras aplicaciones en una cadena de herramientas determinada. widl es el compilador del lenguaje de definición de interfaz de Wine , que se puede usar en lugar de midl (el compilador del lenguaje de definición de interfaz de Microsoft). widl se incluye con MinGW-w64 , además de estar disponible en Linux, por lo que sospecho que esta es al menos parte de la razón por la que se recomienda.

Si bien no pude encontrar ejemplos de uso de widl (aparte de la página de manual vinculada anteriormente), esta vieja publicación en el foro de Zeranoe sugiere que midl se puede usar para procesar los archivos IDL requeridos de manera similar a widl en forma de, por ejemplo:

midl /h DeckLinkAPI.h DeckLinkAPI.idl

donde / h es el modificador de encabezado para midl (con el modificador comparable -h en widl). Los archivos resultantes se usarían con las opciones --extra-cflagsy--extra-ldflags .

Nota: Esta publicación mucho más reciente indica el uso de DeckLinkAPI.h, DeckLinkAPI_i.c y DeckLinkAPIVersion.h (este último se incluye en el SDK sin conversión). No me queda claro si estos son los únicos archivos requeridos. La publicación también hace referencia a la construcción con "--disable-w32threads" como se mencionó anteriormente.

Anaksunaman
fuente
Gracias por la brillante respuesta! ¿Pueden ver también la siguiente pregunta: superuser.com/questions/1260874/…
Ivan Kolesnikov
2

ffmpeg con soporte de Decklink no se puede distribuir, por lo que debe crear el suyo propio. No es difícil de hacer en Windows 10 gracias a un par de repositorios git (uno para ffmpeg y el otro para archivos api de decklink y un script bash). He publicado instrucciones con capturas de pantalla en [ https://ianmorrish.wordpress.com/2019/04/02/ffmpeg-with-decklink-support-for-windows/] pero he incluido los pasos básicos a continuación:

  1. Habilite el componente opcional Windows Subsystem for Linux (Panel de control, Programas y características, Active o desactive las características de Windows).
  2. Vaya a la aplicación Tienda Windows, busque Ubuntu e instálelo.
  3. Inicie Ubuntu desde el comando de Windows, escriba los siguientes comandos (algunos tomarán mucho tiempo)
  4. sudo apt-get update
  5. sudo apt-get install subversion ragel curl texinfo g ++ bison flex cvs yasm automake libtool autoconf gcc cmake git make pkg-config zlib1g-dev mercurial unzip pax nasm gperf autogen bzip2 autoconf-4 archive p7zip-full python3-distutils -y
  6. mkdir ffmpeg
  7. cd ffmpeg
  8. git clone https://github.com/rdp/ffmpeg-windows-build-helpers.git
  9. cd ffmpeg-windows-build-helpers
  10. sudo ./cross_compile_ffmpeg.sh –disable-nonfree = n
  11. Espere mucho tiempo (horas) y si obtiene un buen resultado, habrá mensajes sobre dónde encontrar los archivos
  12. cd / sandbox / cross_compilers / mingw-w64-x86_64 / x86_64-w64-mingw32 /
  13. cp bin / * / mnt / c / ffmpeg /

Ahora debería ver los archivos en el Explorador de Windows en c: \ ffmpeg

user22080
fuente