Я скачал последнюю статическую сборку ffmpeg, которая поддерживает decklink для Windows.
Когда я попытался выполнить следующую команду:

ffmpeg -y -i RTMPsource -s 720x576 -r 25000/1000 -pix_fmt uyvy422 -f decklink 'Видеозахват Decklink'

Получил следующую ошибку:

[NULL @ 0000000000d46e00] Запрошенный формат вывода 'decklink' не подходит для формата вывода

Как я вижу в документации: «Чтобы включить это устройство ввода ...В Windows вам нужно запустить файлы IDL через widl "
Может кто-нибудь объяснить, что это значит: "нужно запускать файлы IDL через widl" и как это сделать?

1 ответ1

3

Как я вижу в документации: «Чтобы включить это устройство ввода ... В Windows вам нужно запустить файлы IDL через widl ". Может кто-нибудь объяснить, что это значит: "нужно запускать файлы IDL через widl" и как это сделать?

Короткий ответ

Вам не нужно делать что-то подобное в вашем случае. Это ссылка на шаг в процессе создания FFmpeg с нуля с поддержкой DeckLink (что было сделано для вас при создании бинарного файла, с которым вы связаны).

Поиск проблемы

[NULL @ XXXXXXXXXXXXXXXX] Requested output format 'XYZ' is not a suitable output format Это общая ошибка, обычно указывающая на то, что в вашей команде FFmpeg что-то не так (т. Е. Вы указали "неправильные" параметры или комбинацию параметров).

Тем не менее, у вас, скорее всего, есть другая проблема. Несмотря на то, что сборка, на которую вы ссылаетесь, должна поддерживать опцию --enable-decklink (как указано), в ней отсутствует другая опция (--disable-w32threads), которая требуется для поддержки DeckLink (по крайней мере, без патчей). Последней сборкой, поддерживающей этот параметр, была сборка 10 декабря 2016 г. (ffmpeg-20161210-edb4f5d).

К сожалению, эта сборка больше не доступна. Следующим лучшим вариантом будет попробовать сборки v3.2 (например, ffmpeg-3.2-win64-static.zip), которые все еще доступны (на момент написания этой статьи) из более старых 32-битных и 64-битных каталогов Zeranoe.

Примечание. Параметры конфигурации (с помощью которых был создан FFmpeg) перечислены в баннере конфигурации, длинном начальном разделе "конфигурации", который появляется, если вы просто наберете "ffmpeg" в командной строке.


Длинный ответ

Язык определения интерфейса (IDL) - это способ:

[...] описать интерфейс независимым от языка способом, обеспечивающим связь между программными компонентами, которые не используют один язык.

В этом случае Black Magic Design (который выпускает серию карт захвата DeckLink ) предоставляет комплект разработки программного обеспечения (SDK), который содержит несколько файлов IDL, которые, очевидно, необходимы для создания FFmpeg с поддержкой DeckLink.

Поскольку файлы IDL могут использоваться в различных ситуациях, их необходимо запускать через компилятор IDL для создания файлов, которые можно использовать с другими приложениями в данной цепочке инструментов. widl - это компилятор языка определения интерфейсов Wine, который можно использовать вместо midl (компилятор языка определения интерфейсов Microsoft). widl поставляется в комплекте с MinGW-w64, а также доступен в Linux, поэтому я подозреваю, что это как минимум одна из причин, по которой это рекомендуется.

Хотя я не смог найти пример использования widl (кроме страницы руководства, на которую ссылается выше), это старое сообщение на форуме Zeranoe предполагает, что midl можно использовать для обработки требуемых файлов IDL аналогично widl в форме, например:

midl /h DeckLinkAPI.h DeckLinkAPI.idl

где /h - переключатель заголовка для midl (с сопоставимым ключом -h в widl). Полученные файлы будут затем использоваться с параметрами --extra-cflags и --extra-ldflags.

Примечание. В этой более недавней публикации говорится об использовании DeckLinkAPI.h, DeckLinkAPI_i.c и DeckLinkAPIVersion.h (последняя включена в SDK без преобразования). Мне не ясно, являются ли это единственными необходимыми файлами. В посте также упоминается сборка с "--disable-w32threads", как упоминалось выше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .