Я записываю несколько часов видео каждый день, которые я ставлю в очередь для кодирования ffmpeg
. Я использую veryslow
предустановку с x265
, так что один час видео может занять до 20 часов или более для кодирования.
Поскольку мой компьютер работает днем и ночью, мне интересно, ffmpeg
есть ли способ приостановить и возобновить кодирование? Я использую Terminal
для OS X.
Если да, могу ли я продолжить кодирование даже после выключения терминала и перезагрузки компьютера? Я думаю, что сеанс терминала восстанавливается при повторном входе в OS X, по крайней мере, история терминала.
ffmpeg
останавливается с ошибкой (decode_band_types: Input buffer exhausted before END element found
илиInvalid NAL unit size
иError writing trailer
/Protocol error
). Может быть, это связано со скачком во времени, я не знаю.В Windows нажатие клавиши «Pause / Break» (самая правая верхняя клавиша) приостановит ее. Enter возобновит.
Если это не работает, нажмите на окно командной строки, чтобы выделить его.
источник
Это не казалось возможным по состоянию на 30 сентября 2015 года . Я бы предложил сегментировать исходный файл, кодировать сегменты и затем сшить получившиеся файлы.
Это не настоящая возможность паузы / возобновления, но частичное разделение позволит вам отдохнуть от кодирования.
Примерный обзор команд для выдачи:
Разбейте полный файл на части
Это должно создать file000.mp4, file001.mp4 и так далее. Из-за того, как работает сегментатор - он обрезает только I-кадры - эти файлы не будут длиться ровно
n
секунды, и видео часть может не воспроизводиться должным образом, но все данные есть, и вы можете конвертировать каждую из частей, напримерПрисоединяйтесь к закодированным частям
Создайте текстовый файл и введите имя каждого отображаемого файла следующим образом
И беги
источник
Я предпочитаю вместо того, чтобы делать паузу, вы даете процессу кодирования наименьший системный приоритет (так называемый « renice »), чтобы вы могли комфортно работать ежедневно, и кодирование будет происходить в фоновом режиме с неиспользованными ресурсами системы. Таким образом, ваша кодировка будет проходить без перерывов 24 часа в сутки, 7 дней в неделю.
поскольку в AFAIK OSX отсутствует команда pidof, вам необходимо знать номер процесса ffmpeg (PID)
затем вы можете перезапустить процесс в фоновом режиме с
При необходимости вы также можете сдать процесс в более агрессивный приоритет.
источник
Приостановка потока также работает в Windows, но не в ctrl+ Z, но в диспетчере ресурсов вы также можете возобновить ее там.
источник
(Это для Linux)
Как вы все, наверное, знаете, нажатие «q» завершает запись файла.
У ffplay есть возможность «p». Почему у ffmpeg нет того же самого? Может быть, потому что это может привести к рассинхронизации между видео и аудио? ...
Я просто ffmpeg-кодирую в x264-aac-mkv с помощью crf (23) и всегда с одинаковыми условиями видео, «прекращаю» (q) записи и объединяю все сегменты в определенном каталоге, где находится этот скрипт, в 1 файл в режиме streamcopy с помощью этого bash-скрипта:
После этого я проверяю полученное объединенное видео и вставляю его в другой каталог. Сегменты удаляются из слияния реж.
Но беспроблемная кнопка «Пауза и Возобновление» действительно приветствуется;)
источник
Это просто идея, но если у вас есть какой-то бюджет, было бы неплохо обновить либо процессор (до 8-го поколения Intel), либо даже лучше, видеокарту (до NVIDIA GTX 1050 или выше), чтобы вы могли кодировать h.265 / HEVC с аппаратным ускорением вместо интенсивного использования процессора
x265
. Ваше кодирование видео будет завершено менее чем за 20 часов, что также сэкономит вам расходы на электроэнергию.источник