在 Ubuntu 18.04 上使用 DeckLink 进行 FFmpeg 视频捕获不起作用

在 Ubuntu 18.04 上使用 DeckLink 进行 FFmpeg 视频捕获不起作用

我已经花了 24 个小时来解决这个问题,但是遇到了一些困难。

预先信息:我正在运行一个装有 DeckLink Duo 2 卡的 Ubuntu 18.04 服务器。

目标:从 DeckLink Duo 2 捕获视频并将其写入 output.avi

到目前为止我已经尝试过:

我已经在我的 Ubuntu 服务器上安装了 BMD DeckLink 驱动程序 10.11.4(我也尝试编译 11.2,但 ffmpeg 无法编译它)并验证服务器可以看到该卡:

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

我已经使用 decklink 和以下配置编译了 ffmpeg:

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

接下来我进行基本检查,看看我的 DeckLink Duo 2 是否出现在 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

这确认 ffmpeg 可以看到该卡。

所以现在我想运行一个捕获命令,但是,无论我运行什么命令,FFmpeg 都不会开始捕获。例如,运行一个非常基本的命令:

"ffmpeg -format_code Hi50 -f decklink -i 'DeckLink Duo (1)' out.avi"

返回

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)

使用 -loglevel trace 运行命令不会产生太多结果。

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

无论我将初始命令弄得多么复杂,包括视频格式、音频格式、自定义大小、编解码器等,它们都返回相同的结果。

它基本上停留在这个位置,命令仍然永远运行。据我所知,FFmpeg 应该会立即启动编码过程。但事实并非如此。

我可以确认正常的重新编码命令例如:

redacted@redacted:~$ ffmpeg -i video.mov out.avi

运行良好。所以 FFmpeg 在基本层面上是可以运行的。

我还可以确认 FFmpeg 可以“与 DeckLink 对话”并设置正确的模式,我可以确认图片“流过”卡,因为我可以看到它出现在我的显示器的输出循环中,但是,只要我输入任何 FFmpeg 命令,FFmpeg 就不会开始编码/捕获。

我认为我在 FFmpeg 的配置/编译方面做错了什么,也许是在编译过程中,但我无法弄清楚我做错了什么。

非常感谢您的任何建议。

谢谢,

里克

相关内容