Pasé las 24 horas resolviendo este problema, pero me estoy quedando un poco atascado.
Información previa: estoy ejecutando un servidor Ubuntu 18.04 con una tarjeta DeckLink Duo 2 en el interior.
Objetivo: capturar video desde DeckLink Duo 2 y escribirlo en output.avi
Lo que he probado hasta ahora:
Instalé los controladores BMD DeckLink 10.11.4 en mi servidor Ubuntu y verifiqué que el servidor puede ver la tarjeta:
redacted@redacted:~$ BlackmagicFirmwareUpdater status
0: /dev/blackmagic/io0 [DeckLink Duo 2] 0xd5 OK
1: /dev/blackmagic/io2 [DeckLink Duo 2] 0xd5 OK
2: /dev/blackmagic/io1 [DeckLink Duo 2] 0xd5 OK
3: /dev/blackmagic/io3 [DeckLink Duo 2] 0xd5 OK
Compilé ffmpeg con decklink y la siguiente configuración:
ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 7 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
configuration:
--prefix=/home/redacted/ffmpeg_build
--pkg-config-flags=--static
--extra-cflags='-I/home/redacted/ffmpeg_build/include -I/home/redacted/ffmpeg_sources/BMD_SDK/include'
--extra-ldflags=-L/home/redacted/ffmpeg_build/lib
--extra-libs='-lpthread -lm'
--bindir=/home/redacted/bin
--enable-gpl
--enable-libass
--enable-libfdk-aac
--enable-libfreetype
--enable-libmp3lame
--enable-libopus
--enable-libvorbis
--enable-libvpx
--enable-libx264
--enable-libx265
--enable-nonfree
--enable-decklink
A continuación, hago una verificación básica para ver si mi DeckLink Duo 2 aparece en ffmpeg:
[decklink @ 0x5574cc33ef00] Blackmagic DeckLink input devices:
[decklink @ 0x5574cc33ef00] 'DeckLink Duo (1)'
[decklink @ 0x5574cc33ef00] 'DeckLink Duo (2)'
[decklink @ 0x5574cc33ef00] 'DeckLink Duo (3)'
[decklink @ 0x5574cc33ef00] 'DeckLink Duo (4)'
dummy: Immediate exit requested
Esto confirma que ffmpeg ve la tarjeta.
Así que ahora quiero ejecutar un comando de captura, sin embargo, no importa qué comando ejecute, FFmpeg no comienza a capturar. Por ejemplo, ejecutando un muy básico:
"ffmpeg -format_code Hi50 -f decklink -i 'DeckLink Duo (1)' out.avi"
devoluciones
redacted@redacted:~$ ffmpeg -format_code Hi50 -f decklink -i 'DeckLink
Duo (1)' out.avi
ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 7 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
configuration: --prefix=/home/redacted/ffmpeg_build --pkg-config-flags=--static -
-extra-cflags='-I/home/redacted/ffmpeg_build/include -
I/home/redacted/ffmpeg_sources/BMD_SDK/include' --extra-ldflags=-
L/home/redacted/ffmpeg_build/lib --extra-libs='-lpthread -lm' --
bindir=/home/redacted/bin --enable-gpl --enable-libass --enable-libfdk-aac --
enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --
enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree --enable-
decklink
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
[decklink @ 0x5638a755d000] Found Decklink mode 1920 x 1080 with rate 25.00(i)
No importa lo complicado que haga el comando inicial, con formatos de video, formatos de audio, tamaños personalizados, códecs, etc. Todo regresa igual.
Básicamente, permanece atascado en esta posición, con el comando ejecutándose para siempre. Que yo sepa, se supone que FFmpeg debe comenzar el proceso de codificación inmediatamente después. No es asi.
Puedo confirmar que un comando de recodificación normal como:
redacted@redacted:~$ ffmpeg -i video.mov out.avi
funciona bien Entonces FFmpeg en un nivel básico funciona.
También puedo confirmar que FFmpeg puede 'hablar con DeckLink y configurar el modo correcto, puedo confirmar que una imagen 'fluye' a través de la tarjeta, ya que puedo verla en el bucle de salida de mi monitor (ver imagen) tan pronto como coloque cualquiera de los comandos FFmpeg, sin embargo, FFmpeg no comienza a codificar/capturar.
Creo que hice algo mal con la configuración/compilación de FFmpeg, quizás durante la compilación, pero no puedo entender qué es lo que hice mal.
Cualquier sugerencia es muy apreciada.
Gracias,
Rik
EDITAR: Ejecutar el comando con -loglevel trace según lo solicitado
redacted@redacted:~$ ffmpeg -loglevel trace -raw_format yuv422p10 1 -an
-
format_code Hp25 -f decklink -i 'DeckLink Duo (2)' output.avi
ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 7 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
configuration: --prefix=/home/redacted/ffmpeg_build --pkg-config-flags=--static
-
-extra-cflags='-I/home/redacted/ffmpeg_build/include -
I/home/redacted/ffmpeg_sources/BMD_SDK/include' --extra-ldflags=-
L/home/redacted/ffmpeg_build/lib --extra-libs='-lpthread -lm' --
bindir=/home/redacted/bin --enable-gpl --enable-libass --enable-libfdk-aac --
enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --
enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree --enable-
decklink
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Splitting the commandline.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging
level) with argument 'trace'.
Reading option '-raw_format' ... matched as AVOption 'raw_format' with
argument 'yuv422p10'.
Reading option '1' ... matched as output url.
Reading option '-ac' ... matched as option 'ac' (set number of audio
channels) with argument '2'.
Reading option '-format_code' ... matched as AVOption 'format_code' with
argument 'Hp25'.
Reading option '-f' ... matched as option 'f' (force format) with argument
'decklink'.
Reading option '-i' ... matched as input url with argument 'DeckLink Duo
(2)'.
Reading option 'output.avi' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option loglevel (set logging level) with argument trace.
Successfully parsed a group of options.
Parsing a group of options: input url DeckLink Duo (2).
Applying option ac (set number of audio channels) with argument 2.
Applying option f (force format) with argument decklink.
Successfully parsed a group of options.
Opening an input file: DeckLink Duo (2).
[decklink @ 0x55cef7de7300] Trying to find mode for frame size 0x0, frame
timing 0/0, field order 0, direction 0, mode number 0, format code Hp25
[decklink @ 0x55cef7de7300] Found Decklink mode 1920 x 1080 with rate 25.00
[decklink @ 0x55cef7de7300] Using 2 input audio channels
Logré arreglar esto. Resulta que la tarjeta estaba activa, pero se había congelado por alguna razón. reiniciar la máquina, algo que debería haber hecho al principio solucionó el problema. Piensa todavía no son perfectos. Pero mi problema está resuelto. Gracias
gian
Rik Rokens
gian
Rik Rokens