ffmpeg -i desktop Выходной файл не содержит ни одного потока

Вопрос или проблема

Я пытаюсь записать экран удаленной Windows VM, к которой я получаю доступ через ssh. Я выполняю эту команду ffmpeg -f gdigrab -framerate 30 -i desktop -t 00:00:10 output.mp4, которая возвращает следующую ошибку:

ffmpeg version 7.1-essentials_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers
  built with gcc 14.2.0 (Rev1, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --en
able-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libss
h --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-lib
aom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enabl
e-libharfbuzz --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2
--enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libgme
--enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --en
able-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
  libavutil      59. 39.100 / 59. 39.100
  libavcodec     61. 19.100 / 61. 19.100
  libavformat    61.  7.100 / 61.  7.100
  libavdevice    61.  3.100 / 61.  3.100
  libavfilter    10.  4.100 / 10.  4.100
  libswscale      8.  3.100 /  8.  3.100
  libswresample   5.  3.100 /  5.  3.100
  libpostproc    58.  3.100 / 58.  3.100
[gdigrab @ 000001a87f3af600] Захват всего рабочего стола 1024x768x32 на (0,0)
[gdigrab @ 000001a87f3af600] Не удалось захватить изображение (ошибка 5)
[gdigrab @ 000001a87f3af600] Не удалось найти параметры кодека для потока 0 (Видео: bmp, none, 754987 kb/s): не указан размер
Рекомендуется увеличить значение параметров 'analyzeduration' (0) и 'probesize' (5000000)
Вход #0, gdigrab, из 'desktop':
  Продолжительность: N/A, битрейт: 754987 kb/s
  Поток #0:0: Видео: bmp, none, 754987 kb/s, 30 fps, 1000k tbr, 1000k tbn
Выход #0, mp4, в 'output.mp4':
[out#0/mp4 @ 000001a87f3aeec0] Выходной файл не содержит потоков
Ошибка открытия выходного файла output.mp4.
Ошибка открытия выходных файлов: Неверный аргумент

Если я подключаюсь к удаленному рабочему столу и использую ту же команду, то она отлично работает.

Я также пробовал выполнить ffmpeg.exe -f lavfi -i color=c=black:s=800x600:r=30:d=60 out.mp4, который записывает что-то, но это просто черный экран.

Кто-нибудь знает, что может происходить? Я в недоумении, так как не смог найти больше информации онлайн.

Ответ или решение

Проблема, с которой вы столкнулись, связана с использованием инструмента ffmpeg для захвата экрана удаленной машины Windows через SSH. Давайте разберем вашу ситуацию более подробно и предложим возможные решения.

Подробный анализ ситуации

  1. Команда FFmpeg:
    Вы используете команду:

    ffmpeg -f gdigrab -framerate 30 -i desktop -t 00:00:10 output.mp4

    Эта команда предназначена для захвата всего рабочего стола и записи его в файл output.mp4. Однако, как вы заметили, возникает ошибка, связанная с отсутствием потоков в выходном файле.

  2. Ошибка захвата:
    Из сообщения об ошибке:

    [gdigrab @ ...] Failed to capture image (error 5)

    следует, что ffmpeg не может захватить изображение с вашего рабочего стола. Код ошибки 5 указывает на проблемы с доступом или правами на запись экрана. Обычно это происходит из-за особенностей работы GDI (Graphics Device Interface) в Windows, которые могут не поддерживаться при удаленном подключении по SSH.

  3. Проблема с RDP:
    Вы упомянули, что команда работает, если вы используете удаленное рабочее стол (RDP). Это объясняется тем, что при использовании RDP видеопоток обрабатывается и разрешения экранов адаптируются иначе, чем при использовании SSH. GDI иногда требует активного десктопа, что и вызывает проблему при SSH.

  4. Альтернативное решение:
    Вы также пробовали использовать команду:

    ffmpeg.exe -f lavfi -i color=c=black:s=800x600:r=30:d=60 out.mp4

    Эта команда генерирует черный экран, что указывает на то, что ffmpeg не может захватить контент с рабочего стола.

Рекомендации по решению проблемы

  1. Используйте RDP:
    Наиболее простое решение, если это возможно, — использовать подключение по RDP вместо SSH для выполнения вашей команды. Это обеспечит корректную работу GDI и позволит ffmpeg захватывать изображение рабочего стола.

  2. Смена параметров:
    Если использование RDP недоступно, вы можете попробовать изменить параметры вашей команды, например:

    ffmpeg -f gdigrab -framerate 30 -draw_mouse 0 -i desktop -t 00:00:10 output.mp4

    Параметр -draw_mouse 0 отключает захват курсора мыши, что может помочь в ряде случаев.

  3. Увеличение параметров анализа:
    Также согласно сообщениям об ошибке, рассмотрите возможность увеличения значений для analyzeduration и probesize:

    ffmpeg -f gdigrab -framerate 30 -i desktop -t 00:00:10 -analyzeduration 1000000 -probesize 5000000 output.mp4
  4. Проверка прав доступа:
    Убедитесь, что у вас есть необходимые права воздействия на графическую подсистему удаленной системы. Иногда может потребоваться дополнительная конфигурация безопасности.

  5. Установка дополнительных библиотек:
    Проверьте, установлены ли все необходимые кодеки и библиотеки для работы ffmpeg с видео. Возможно, некоторые из них могут быть недоступны или не совместимы в вашей текущей среде.

Заключение

Проблема, с которой вы сталкиваетесь, связана с захватом экрана через SSH в Windows. Оптимальным решением будет использование RDP для удаленного доступа или корректировка параметров ffmpeg, чтобы попытаться улучшить захват. Если проблемы сохраняются, возможно, стоит ознакомиться с альтернативными инструментами для захвата экрана, которые могут быть более эффективными для удаленных сценариев.

Если у вас есть дополнительные вопросы или вам нужна помощь в дальнейшем, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...