Ffmpeg грузит процессор на 100
Но он использует% 15-20 процессора, мне нужно сделать 16 потоков на том же сервере, но я не могу.
Я не могу сделать конфигурацию, например, просто загрузить .ts файлы, клонирующие m3u8?
Поехали?
Для теста я использовал известный мультик про кролика Big Bucks Bunny, длиной 10 минут и размером 150Мб.
Железо
- AMD Ryzen 5 1600 (12 потоков) + 16GB DDR4 (Windows 10)
- Intel Core i7 4770 (8 потоков) + 32GB DDR3 (Windows 10)
- Intel Core i5 3570 (4 потока) + 8GB DDR3 (Windows 10)
- Intel Xeon E5-2650 V2(16 потоков) + 32GB DDR3 (Windows 10)
Командная строка с параметрами
Также см
Лучше сконцентрироваться на использовании различных опций ffmpeg, которые позволят получить тот же результат, при этом используя меньше ресурсов. Тем не менее, есть способы использовать меньше ресурсов, если вам действительно нужно выполнить конкретную задачу с помощью ffmpeg, и он использует слишком много ресурсов.
Вы можете уменьшить приоритет ffmpeg Процесс процессора:
- Терминальный метод: используйте nice Команда для изменения приоритета процесса: nice -n 8 ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov , В Linux номер приоритета ( nice формат команды nice -n ) колеблется от -20 до 20. Чем больше целое число, тем ниже приоритет; нейтральное значение равно 0. Если вы используете команду, которую я дал вам, и установите ее на 8, ЦП даст процессу меньше времени, что выглядит как "энергопотребление". Если это число слишком велико или два низко, вы можете изменить его.
- Метод с графическим интерфейсом: это не рекомендуется, поскольку он дает меньше контроля над точным числом и не вступает в силу, как только начинается процесс. Однако это более приемлемо. С ffmpeg работает, откройте системный монитор. Прокрутите вниз до процесса с именем ffmpeg щелкните левой кнопкой мыши, чтобы выбрать, щелкните правой кнопкой мыши и установите приоритет "Низкий" или "Очень низкий".
Если вы также беспокоитесь об использовании памяти, знайте, что нельзя сказать, что процесс занимает столько памяти и продолжает работать. Ядро автоматически контролирует выделение памяти для процессов. Существует способ клеточных процессов, с timeout сценария, так что когда процесс и любые дочерние процессы занимают слишком много памяти (установленный вами предел), они благополучно завершаются и отображается уведомление. Однако, если процессу дается только столько памяти (скажем, ядром), и он запрашивает больше памяти, чего не может иметь, происходит сбой.
Некоторые полезные вещи, которые нужно знать о:
Используя знания Cgroups, вы можете делать много забавных вещей, таких как управление перестановкой процесса.
-re (вход) Чтение ввода с собственной частотой кадров. В основном используется для имитации устройства захвата или живого потока ввода (например, при чтении из файла). Не следует использовать с реальными устройствами захвата или живыми входными потоками (где это может привести к потере пакетов). По умолчанию ffmpeg пытается прочитать входные данные как можно быстрее. Эта опция будет замедлять чтение входных данных до исходной частоты кадров входных данных. Это полезно для вывода в реальном времени (например, прямой эфир).
2. Затем перекодируйте его
Вывод первой команды будет огромным, и большинство тупых игроков не могут обработать RGB H.264, поэтому вы можете перекодировать его:
Используйте самый медленный пресет, к которому у вас есть терпение: ultrafast , superfast , veryfast , faster , fast , medium , slow , slower , veryslow , По умолчанию medium ,
я добавил -vf format=yuv420p чтобы вывод работал с тупыми плеерами, такими как QuickTime и Windows Media Player. Вы можете пропустить это, если загружаете его на YouTube или воспроизводите только на VLC, MPV, MPlayer или любом другом проигрывателе на основе FFmpeg.
3 ответа
1. Сделайте вывод RGB без потерь первым
При этом используется самая быстрая предустановка кодирования x264: ультрабыстрая.
Выход будет без потерь, потому что -crf 0 используется.
Результаты
Время кодирования: 55минут
Размер видео: 75мб
За качество говорить не буду, потому что подбор оптимальных параметров кодирования это задача дня заврашнего, а сегодня я преследовал цель добиться вменяемого времени кодирования и мне кажется это получилось. Я опасался, что склеенные кусочки склеятся плохо и будут дерганья в этих моментах, но нет, результат шел ровно, без каких-то рывков.
Отдельно отмечу, что для 1080p требуется около гигабайта оперативной памяти на поток, поэтому памяти должно быть много. Также замечу, что под конец стадо бежит со скоростью самого медленного барана и в то время как Ryzen и i7 уже давно закончили кодирование, Xeon и i5 еще продолжали пыхтеть над своими кусочками. Т.е. более длинное видео в целом кодировалось бы с большим общим fps за счет того, что более быстрые ядра успели бы сделать больше работы.
Запуская конвертацию на одном Ryzen 5 1600 с многопоточностью, максимум что я имел было около 1.5 fps. Здесь же, учитывая, что последние 10 минут кодирования — это добивка последних кусочков медленными ядрами, можно сказать, что получилось около 5-6 fps, что уже не так мало для такого продвинутого кодека. Вот и все, чем я хотел поделиться, надеюсь кому-нибудь это может пригодиться.
ffmpeg.exe это исполняемый файл, который является частью Видео-исполнитель Программа, разработанная PerformerSoft LLC, Программное обеспечение обычно о 26.52 MB по размеру.
Расширение .exe имени файла отображает исполняемый файл. В некоторых случаях исполняемые файлы могут повредить ваш компьютер. Пожалуйста, прочитайте следующее, чтобы решить для себя, является ли ffmpeg.exe Файл на вашем компьютере - это вирус или троянский конь, который вы должны удалить, или это действительный файл операционной системы Windows или надежное приложение.
Реализация
Сразу скажу, что реализация сделана под Windows. В теории ничего не мешает сделать тоже самое и под другие ОС, но я делал под то, что стояло у меня.
- Web-сервер с PHP
- ffmpeg
- rav1e
Также упомяну про безопасность, которой нет. Все, что я делал — я делал внутри локальной сети, поэтому никаких проверок и авторизаций не сделано, а возможностей для нанесения вреда злоумышленниками — полно. Поэтому, если это будет тестироваться не в защищенных сетях, вопросами безопасности нужно озаботится самостоятельно.
2. FFmpeg — готовые бинарники я качал с Zeranoe builds
3. rav1e — также можно скачать бинарник из релизов проекта rav1e
- Получаем кусочек, сохраняем его в папку
- Генерим CMD файл с командой для кодирования и удаление самого CMD файла в конце
- Запускаем CMD файл
- Есть исходный файл, есть файл результата и есть CMD файл — кодирование еще идет
- Есть исходный файл, есть файл результата и CMD файла нет — кодирование завершено
Скрипт сообщает сколько у него всего потоков и сколько использовано, чтобы кодировщик решал, присылать ему еще кусочки или нет. Также скрипт сообщает о том, какие кусочки сейчас в работе и какие готовы, чтобы кодировщик мог скачать готовые и удалить их с сервера.
Лежит где угодно. Важный момент: как вы видите, командная строка для кодирования прописывается именно в этом файле и эти пути должны быть едины на всех серверах. Поэтому на каждом сервере я скопировал файлы:
- c:\Apps\OneDrive\commands\bin\ffmpeg\ffmpeg.exe — из Zeranoe builds
- c:\Apps\OneDrive\commands\bin\ffmpeg\rav1e.exe — из проекта rav1e
Файл для запуска скрипта кодирования, лежит рядом со скриптом. Путь к PHP настраиваете сами.
encoding.cmd:
Ffmpeg.exe безопасный или это вирус или вредоносная программа?
Первое, что поможет вам определить, является ли тот или иной файл законным процессом Windows или вирусом, это местоположение самого исполняемого файла. Например, такой процесс, как ffmpeg.exe, должен запускаться из C: \ Program Files \ video performer \ video performer.exe, а не в другом месте.
Для подтверждения откройте диспетчер задач, выберите «Просмотр» -> «Выбрать столбцы» и выберите «Имя пути к изображению», чтобы добавить столбец местоположения в диспетчер задач. Если вы обнаружите здесь подозрительный каталог, возможно, стоит дополнительно изучить этот процесс.
Еще один инструмент, который иногда может помочь вам обнаружить плохие процессы, - это Microsoft Process Explorer. Запустите программу (не требует установки) и активируйте «Проверить легенды» в разделе «Параметры». Теперь перейдите в View -> Select Columns и добавьте «Verified Signer» в качестве одного из столбцов.
Если статус процесса «Проверенная подписывающая сторона» указан как «Невозможно проверить», вам следует взглянуть на процесс. Не все хорошие процессы Windows имеют метку проверенной подписи, но ни один из плохих.
Наиболее важные факты о ffmpeg.exe:
Если у вас возникли какие-либо трудности с этим исполняемым файлом, вы должны определить, заслуживает ли он доверия, перед удалением ffmpeg.exe. Для этого найдите этот процесс в диспетчере задач.
Найдите его местоположение (оно должно быть в C: \ Program Files \ video исполнителя) и сравните его размер с приведенными выше фактами.
Кроме того, функциональность вируса может сама влиять на удаление ffmpeg.exe. В этом случае вы должны включить Безопасный режим с загрузкой сетевых драйверов - безопасная среда, которая отключает большинство процессов и загружает только самые необходимые службы и драйверы. Когда вы можете запустить программу безопасности и полный анализ системы.
Могу ли я удалить или удалить ffmpeg.exe?
Не следует удалять безопасный исполняемый файл без уважительной причины, так как это может повлиять на производительность любых связанных программ, использующих этот файл. Не забывайте регулярно обновлять программное обеспечение и программы, чтобы избежать будущих проблем, вызванных поврежденными файлами. Что касается проблем с функциональностью программного обеспечения, проверяйте обновления драйверов и программного обеспечения чаще, чтобы избежать или вообще не возникало таких проблем.
Согласно различным источникам онлайн, 75% людей удаляют этот файл, поэтому он может быть вредным, но рекомендуется проверить надежность этого исполняемого файла самостоятельно, чтобы определить, является ли он безопасным или вирусом. Лучшая диагностика для этих подозрительных файлов - полный системный анализ с Reimage, Если файл классифицируется как вредоносный, эти приложения также удалят ffmpeg.exe и избавятся от связанных вредоносных программ.
Однако, если это не вирус, и вам необходимо удалить ffmpeg.exe, вы можете удалить Video Performer со своего компьютера, используя программу удаления, которая должна находиться по адресу: C: \ Program Files \ Video Performer \ uninstall.exe. Если вы не можете найти его деинсталлятор, то вам может потребоваться удалить Video Performer, чтобы полностью удалить ffmpeg.exe. Вы можете использовать функцию «Установка и удаление программ» на панели управления Windows.
- 1. в Меню Пуск (для Windows 8 щелкните правой кнопкой мыши в нижнем левом углу экрана), нажмите Панель управления, а затем под Программы:
o Windows Vista / 7 / 8.1 / 10: нажмите Удаление программы.
o Windows XP: нажмите Установка и удаление программ.
- 2. Когда вы найдете программу Видео-исполнительщелкните по нему, а затем:
o Windows Vista / 7 / 8.1 / 10: нажмите Удалить.
o Windows XP: нажмите Удалить or Изменить / Удалить вкладка (справа от программы).
- 3. Следуйте инструкциям по удалению Видео-исполнитель.
Наиболее распространенные ошибки ffmpeg.exe, которые могут возникнуть:
• "Ошибка приложения ffmpeg.exe."
• «Ошибка ffmpeg.exe».
• «Возникла ошибка в приложении ffmpeg.exe. Приложение будет закрыто. Приносим извинения за неудобства».
• «ffmpeg.exe не является допустимым приложением Win32».
• «ffmpeg.exe не запущен».
• «ffmpeg.exe не найден».
• «Не удается найти ffmpeg.exe».
• «Ошибка запуска программы: ffmpeg.exe.»
• «Неверный путь к приложению: ffmpeg.exe.»
Аккуратный и опрятный компьютер - это один из лучших способов избежать проблем с Video Performer. Это означает выполнение сканирования на наличие вредоносных программ, очистку жесткого диска cleanmgr и ПФС / SCANNOWудаление ненужных программ, мониторинг любых автозапускаемых программ (с помощью msconfig) и включение автоматических обновлений Windows. Не забывайте всегда делать регулярные резервные копии или хотя бы определять точки восстановления.
Если у вас возникла более серьезная проблема, постарайтесь запомнить последнее, что вы сделали, или последнее, что вы установили перед проблемой. Использовать resmon Команда для определения процессов, вызывающих вашу проблему. Даже в случае серьезных проблем вместо переустановки Windows вы должны попытаться восстановить вашу установку или, в случае Windows 8, выполнив команду DISM.exe / Online / Очистка-изображение / Восстановить здоровье, Это позволяет восстановить операционную систему без потери данных.
Чтобы помочь вам проанализировать процесс ffmpeg.exe на вашем компьютере, вам могут пригодиться следующие программы: Менеджер задач безопасности отображает все запущенные задачи Windows, включая встроенные скрытые процессы, такие как мониторинг клавиатуры и браузера или записи автозапуска. Единый рейтинг риска безопасности указывает на вероятность того, что это шпионское ПО, вредоносное ПО или потенциальный троянский конь. Это антивирус обнаруживает и удаляет со своего жесткого диска шпионское и рекламное ПО, трояны, кейлоггеры, вредоносное ПО и трекеры.
Загрузите или переустановите ffmpeg.exe
Информация об операционной системе
Ошибки ffmpeg.exe могут появляться в любых из нижеперечисленных операционных систем Microsoft Windows:
Когда я записываю видео примерно с 5 сеансов Xvfb, загрузка моего процессора очень высока, и из-за этого возникают задержки. Также использование памяти составляет около 300 МБ для каждого из процессов ffmpeg.
Какие параметры для ffmpeg я должен использовать, чтобы минимизировать использование ресурсов компьютера (в частности, процессора и памяти) при выполнении захвата видео экрана?
Обновлено май 2022 г .:
Мы рекомендуем вам попробовать это новое программное обеспечение, которое исправляет компьютерные ошибки, защищает их от вредоносных программ и оптимизирует производительность вашего ПК. Этот новый инструмент исправляет широкий спектр компьютерных ошибок, защищает от таких вещей, как потеря файлов, вредоносное ПО и сбои оборудования.
(опциональное предложение для Reimage - Cайт | Лицензионное соглашение | Политика конфиденциальности | Удалить)
3 ответа
По умолчанию FFmpeg будет пытаться перекодировать ввод, даже если вы не используете никаких параметров, связанных с кодированием.
Если вы хотите просто скопировать поток как есть, попробуйте использовать функцию streamcopy:
Копируя входящие потоки, вы можете полностью пропустить процесс кодирования.
Итак, ваша команда будет выглядеть так:
(Не уверен, что это сработает.)
Когда вам нужно перекодировать входящий поток, вы должны добавить некоторые параметры кодирования в команду.
По умолчанию ffmpeg пытается сопоставить исходные параметры и качество, которые не всегда самые оптимальные в реальных приложениях.
«Очень быстрые, сверхбыстрые и сверхбыстрые» пресеты h264 - хорошее начало для повышения производительности.
Вы также можете поиграть с кодированием CRF (коэффициент постоянной скорости), более высокими битрейтами и т. Д.
Хотя этот вопрос уже считается ответом, я полагаю, что в нем нет ответа, который не включает настройку параметров команды и, тем не менее, может использоваться с другими инструментами или командами, а не только с FFmpeg.
Инструмент CPUlimit предназначен именно для этой цели и будет эффективно работать не только для FFmpeg, но и для любых других ресурсоемких процессоров. Процесс, который вы хотите уменьшить использование этого ресурса.
Наиболее важным аргументом CPUlimit является -l , который позволяет вам указать процент CPU, который процессу будет разрешено использовать (в качестве его верхнего предела).
Также обратите внимание, что этот предел зависит от количества процессоров / ядер / потоков, которые есть на машине, например, если на машине установлено 8 процессоров, допустимые значения CPULimit -l будут в диапазоне от 0 до 800 (0 - бесполезно, конечно, и 800 означает не ограничивать процесс вообще, так как 800% означает всю производительность машины).
Пример использования половины емкости для компьютера с 8 процессорами:
Надеюсь, что это поможет для этого конкретного вопроса, а также аналогичные потребности в будущем.
Кроме того, что касается исходного вопроса, если вы пытаетесь ограничить сценарий bash (или все, что разветвляется на дочерний процесс), обязательно добавьте параметр -i или --include-children и укажите местоположение сценария. если это не в PATH.
Чтение ввода с частотой кадров. В основном используется для имитации устройства захвата или живого потока ввода (например, при чтении из файла). Не следует использовать с реальными устройствами захвата или живыми входными потоками (где это может привести к потере пакетов).
По умолчанию FFmpeg пытается читать ввод (ы) как можно быстрее. Эта опция замедлит чтение входных данных до исходной частоты кадров входных данных. Это полезно для вывода в реальном времени (например, прямой эфир).
При запуске транскодинга через OBS c входящим потоком от железки 1280x720@60 и выходящем 1280x720@30 2.5mbit Макбук грузит 40-70% (зависит от того, оставляешь ты на рабочем столе саму программу или сворачиваешь)
Задача уйти от OBS как от софта так такового. Основные претензии в том, что он порой просто закрывается по своей прихоти, вторая причина - если начинаются проблемы с перегрузкой, просто падает канал и нет возможности без нажатия кнопки перезапустить. Интерфейс собственно тоже. Появилась идея использовать ffmpeg напрямую, по крайней мере я думаю OBS его и использует.
Вот строка запуска, которая работает исправно.
/usr/local/Cellar/ffmpeg/2.8.3/bin/ffmpeg -f decklink -i 'UltraStudio Mini Recorder@15' -c:v libx264 -pix_fmt yuv420p -r 30 -aspect 16:9 -g 60 -profile:v baseline -b:v 2100K -f flv -c:a libvo_aacenc -ab 64k -ar 44100 -ac 2 rtmp://.
Но грузить процессор на 100% и через какое-то время вылетает ошибка Decklink buffer overload (с железки идет чистый RAW и её буфер перегружен из-за того что процессор не успевает поток обрабатывать. FPS проседает сразу 10-15) Что я могу в данном запросе модернизировать, чтобы приведет к снижению загрузки
ffmpeg version 2.8.3 Copyright (c) 2000-2015 the FFmpeg developers
built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
configuration: --prefix=/usr/local/Cellar/ffmpeg/2.8.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-decklink --enable-vda
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
Hyper fast Audio and Video encoder
Периодически, я интересуюсь видеокодеками и тем, насколько они становятся эффективнее по сравнению со своими предшественниками. В свое время, когда после H264 вышел HEVC, мне было безумно интересно его пощупать, но мое железо того времени оставляло желать лучшего.
Сейчас же железо подтянулось, но и HEVC давно устарел, ему на смену жаждет придти открытый AV1, обещающий нам до 50% экономии по сравнению с 1080p H264, но если скорость качественного кодирования в HEVC кажется медленноватой (по сравнения с H264), то AV1 со своим ~0.2 fps деморализует полностью. Когда что-то кодируется настолько медленно, то это значит, что даже простой 10 минутный ролик, будет обрабатываться около суток. Т.е. чтобы просто посмотреть подходят ли параметры кодирования или нужно добавить немного битрейта, придется ждать не просто часами, а днями…
И вот, как-то раз, любуясь красивым закатом (кодека H264), я подумал: «А что, если натравить на AV1 все железо которое у меня есть одновременно?»
Я пробовал кодировать AV1 с использованием тайлов и многоядерности, но прирост производительности показался мне не таким уж эффективным на каждое добавленное ядро процессора, давая около полтора FPS при самых быстрых настройках и 0.2 при медленных, поэтому в голову пришла кардинально другая идея.
Посмотрев, что у нас есть на сегодня актуального по AV1, я составил список:
- Встроенный в ffmpeg кодировщик libaom-av1
- Проект rav1e
- Проект SVT-AV1
- Кодировщик разрежет исходное видео на кусочки по n секунд
- На каждом моем компьютере будет web-сервер со специальным скриптом
- Мы кодируем в один поток, а значит сервер может одновременно кодировать столько кусочков, сколько у него процессорных ядер
- Кодировщик будет отправлять кусочки на серверы, и скачивать обратно закодированные результаты
- Когда все кусочки будут готовы, кодировщик склеит их в один и наложит звук из исходного файла
Читайте также: