我下载了最新的静态
ffmpeg 构建它支持 Windows 的 decklink。
当我尝试执行以下命令时:
ffmpeg -y -i RTMPsource -s 720x576 -r 25000/1000 -pix_fmt uyvy422 -f decklink 'Decklink 视频捕获'
收到以下错误:
[NULL @ 0000000000d46e00] 请求的输出格式“decklink”不是合适的输出格式
正如我所见 文档:“要启用此输入设备...在 Windows 上,您需要通过 widl 运行 IDL 文件”
有人可以解释一下“需要通过 widl 运行 IDL 文件”是什么意思以及如何做到这一点吗?
答案1
正如我在文档中看到的:“要启用此输入设备...在 Windows 上,您需要通过 widl 运行 IDL 文件”。有人可以解释一下“需要通过 widl 运行 IDL 文件”是什么意思以及如何做到这一点吗?
简短答案
在您的情况下,您不需要做任何类似的事情。这是引用从头开始构建 FFmpeg 并支持 DeckLink 的过程中的一个步骤(在创建您链接到的二进制文件时已为您完成)。
故障排除
[NULL @ XXXXXXXXXXXXXXXX] Requested output format 'XYZ' is not a suitable output format
是一个通用错误,通常表示您的 FFmpeg 命令有问题(即您指定了“错误”的选项或选项组合)。
话虽如此,你很可能遇到了不同的问题。尽管你链接到的构建应该支持启用甲板链接选项(如所列),缺少另一个选项(--disable-w32threads),DeckLink 支持需要(至少没有补丁)。支持该选项的最后一个版本显然是 2016 年 12 月 10 日的版本(ffmpeg-20161210-edb4f5d)。
不幸的是,这个版本似乎不再容易获得。下一个最佳选择是尝试 v3.2 版本。
注意:配置选项(FFmpeg 构建的选项)列在配置横幅中,如果您在命令行中输入“ffmpeg”,就会出现较长的初始“配置”部分。
长答案
一个接口定义语言(IDL)是一种方式:
[...] 以一种与语言无关的方式描述界面,使不共享一种语言的软件组件之间能够进行通信。
在这种情况下,Black Magic Design(生产DeckLink系列采集卡)提供软件开发工具包(SDK)具有许多 IDL 文件,这些文件显然是在构建支持 DeckLink 的 FFmpeg 时必须使用的。
由于 IDL 文件可用于多种情况,因此需要通过 IDL 编译器运行它们来生成可与给定工具链中的其他应用程序一起使用的文件。维德尔是个葡萄酒接口定义语言编译器,可以代替米德尔(Microsoft 接口定义语言编译器)。widl 与MinGW-w64,并且可以在 Linux 上使用,所以我怀疑这至少是它被推荐的部分原因。
虽然我找不到 widl 的示例用法(除了上面链接的手册页),但是一个旧的 Zeranoe 论坛帖子建议可以使用 midl 以类似于 widl 的方式处理所需的 IDL 文件,例如:
midl /h DeckLinkAPI.h DeckLinkAPI.idl
其中 midl 的标题开关是哪里/h
(可比较的开关-h
在 widl 中)。然后,生成的文件将与--extra-cflags
和--extra-ldflags
选项一起使用。
注意:Zeranoe 的一篇更近期的文章指出了 DeckLinkAPI.h、DeckLinkAPI_i.c 和 DeckLinkAPIVersion.h 的使用(后者包含在 SDK 中,无需转换)。我不清楚这些是否是唯一需要的文件。该文章还顺便提到了使用“--disable-w32threads”进行构建,如上所述。
答案2
带有 Decklink 支持的 ffmpeg 无法分发,因此您必须自行构建。在 Windows 10 上,由于有几个 git 存储库(一个用于 ffmpeg,另一个用于 decklink api 文件和一个 bash 脚本),因此这并不难。我已在 [https://ianmorrish.wordpress.com/2019/04/02/ffmpeg-with-decklink-support-for-windows/] 但已包括以下基本步骤:
- 启用适用于 Linux 的 Windows 子系统可选组件(控制面板、程序和功能、打开或关闭 Windows 功能。)
- 转到 Windows 应用商店应用并搜索 Ubuntu 并安装它。
- 从 Windows 命令启动 Ubuntu,输入以下命令(有些命令会花费很长时间)
- sudo apt-get 更新
- sudo apt-get 安装 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
- 创建目录 ffmpeg
- 光盘 ffmpeg
- git 克隆https://github.com/rdp/ffmpeg-windows-build-helpers.git
- cd ffmpeg-windows-build-helpers
- sudo ./cross_compile_ffmpeg.sh –disable-nonfree=n
- 等待很长时间(数小时),如果得到好的结果,将会有关于在哪里找到文件的消息
- cd /sandbox/cross_compilers/mingw-w64-x86_64/x86_64-w64-mingw32/
- cp bin/* /mnt/c/ffmpeg/
现在您应该可以在 Windows 资源管理器中的 c:\ffmpeg 下看到文件