Ошибка, которую вы видите, ожидается, если вы используете графический процессор NVIDIA потребительского уровня, в котором максимальный размер одновременного сеанса NVENC равен 2 на уровне прошивки и драйвера. См. NVIDIA GPU Matrix для получения дополнительной информации об этом.
Есть два способа преодолеть это ограничение:
1. Явно выберите видеопоток, который вы хотите кодировать , с помощью опций -map
, чтобы только два видеопотока кодировались в любой момент времени за сеанс. В приведенном ниже примере явно выбираются только первый и второй видеопоток:
E:\video>ffmpeg -loglevel error -y -i E:\video\19_12_2018\Files\MEDIA\media_data.mxf -map 0:v:0 -map 0:v:1 -map:0:a -c:v h264_nvenc -acodec copy nvidia_output.mp4
Было бы здорово, если бы вы предоставили вывод ffprobe для входного файла, с которым вы работаете, и таким образом мы можем подскажите, что делать с другими видеопотоками. Альтернативой такому может быть использование программного кодера (такого как x264), если это необходимо.
2. Переопределите вышеупомянутый предел количества сеансов NVENC, приведенный выше: Это потребует от вас исправления драйвера NVIDIA, как описано в в этом репозитории. Инструкции для Linux также доступны здесь .
Вот шпаргалка:
frame
- это место, где вид равен (с уважение к суперпредставлению) bounds
- это место, где представлению разрешено рисовать (по отношению к себе) Некоторые дополнительные пояснения:
Если вы позиционируете представление в его superview, вы почти всегда изменяете источник кадра.
Если вы обрезаете то, где рисует UIView, вы почти всегда изменяете его границы.
Обратите внимание, что вам разрешено иметь границы, которые больше, чем рамка. То есть вы можете рисовать «вне линий» того, где вы находитесь.
Кадр находится в системе координат суперпредставления, границы - в системе координат представления. С моей точки зрения, удобно иметь и то и другое. Кадр кажется более полезным из двух,