FFmpeg не транскодирует в реальном времени

FFmpeg не транскодирует в реальном времени

Настраивал для друга сборку записи, похожую на мою, но, похоже, мне не удаётся заставить всё работать в реальном времени, несмотря на достаточное (насколько я могу судить) оборудование.

Характеристики системы: 8600K, GTX 1050ti, 16Gb RAM, 1tb 860 EVO

Тестовая команда (обновлена ​​для простоты):

ffmpeg -y -hide_banner -thread_queue_size 9999 -f dshow -rtbufsize 2147.48M -video_size 1920x1080 -framerate 60 `
-i video="@device_pnp_\\?\usb#vid_07ca&pid_0570&mi_00#7&3886ab1a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" `
-thread_queue_size 9999 -f dshow -rtbufsize 2147.48M -video_size 1920x1080 -framerate 60 `
-i video="@device_pnp_\\?\usb#vid_07ca&pid_0570&mi_00#7&24df76f&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" `
-map 0 -c:v h264_nvenc -r 60 -preset: llhp -pix_fmt yuv420p -b:v 1M -minrate 1M -maxrate 1M -bufsize 1M `
C:\Users\Jordan\Videos\FFmpeg\Left\Left.ts `
-map 1 -c:v h264_nvenc -r 60 -preset: llhp -pix_fmt yuv420p -b:v 1M -minrate 1M -maxrate 1M -bufsize 1M `
C:\Users\Jordan\Videos\FFmpeg\Right\Right.ts

Цель этой команды — записать 2 отдельных синхронизированных выхода. Однако по той или иной причине эта команда не транскодирует видео в реальном времени, что является большой проблемой, когда вы пытаетесь записать, а не просто преобразовать файл. Когда я пропускаю один из двух выходов или уменьшаю вдвое разрешение каждого входа/выхода, все работает в реальном времени. Это заставило бы меня поверить, что где-то в системе есть узкое место, но при мониторинге всего в диспетчере задач ничто даже близко не приближается к пределу (кодер GPU, процессор, оперативная память и SSD загружены менее чем на 30%).

Более того, когда я пытаюсь записать оба потока в одно видео 4K60 через OBS, все работает отлично, как в реальном времени. Поэтому я не понимаю, как перекодирование двух потоков 1080p60 в FFmpeg может быть более интенсивным, чем один поток 4K60 в OBS...

С тех пор я поменял 1050ti на GTX 1080, и никакой разницы в производительности не произошло. Это навело бы меня на мысль, что виноват процессор. Похоже, что FFmpeg на самом деле использует только 1-2 потока... есть ли способ заставить его использовать больше? -потоки, похоже, не оказывают никакого влияния, независимо от того, куда я их вставляю в команду. Что действительно странно, так это то, что у меня очень похожая команда, но я делаю два потока 4K60 вместо двух потоков 1080p60 с GTX 1080 и 6800K... Насколько я могу судить, у 8600K производительность на поток выше, чем у 6800K, поэтому я не уверен, как мне удается выжать так много.

Любая информация будет высоко оценена.

решение1

Проблема была в картах захвата, я вытащил одну из его системы и вставил в свою и смог воспроизвести проблему. Это не воспроизводится ни с одной из моих других карт захвата, а у меня их 4.

Проблема, похоже, вызвана раздутым программным обеспечением потокового движка Avermedia, хранящимся на самой карте. Карта фактически отображается как два устройства, одно без потокового движка в названии и одно с ним, если вы выбираете то, с которым проблемы смягчаются, но все еще присутствуют. В любом случае, поскольку я могу подтвердить, что проблема отсутствует на HD60 Pro от Elgato, мы разместили заказ на 2 из них.

Оглядываясь назад, можно сказать, что раздутое ПО / нетрадиционная прошивка легко объясняют чрезвычайно сложные для диагностики проблемы. К счастью, мы купили Avermedia Live Gamer HD 2s по скидке и можем перепродать их за полный возврат денег, скатертью дорога.

Связанный контент