120 кадров в секунду 720p с воспроизведением в реальном времени на Ubuntu? + редактирование?

У меня есть ноутбук с процессором i7, 1,73 ГГц, 8 ГБ ОЗУ, Ubuntu 10.04 с графической картой ATI Mobility Radeon HD 5800 Series. У меня включен compiz (который может быть одним из виновников проблемы ниже).

Я записал несколько коротких видеороликов в разрешении 720p со скоростью 120 кадров в секунду (GoPro Hero 3), сохраненных на моем локальном жестком диске. Видео в формате mp4 имеют размер от 30 МБ до 500 МБ, поэтому они довольно маленькие.

Я пробовал разные плееры, ни один из них не отвечает в режиме реального времени. На самом деле время отклика настолько плохое, что я получаю несколько кадров довольно быстро в начале, но затем только нечетные кадры каждую секунду до 5 секунд, и звук кажется склеенным! Одно из моих 8 ядер уходит в землю (100%), остальные практически не используются, при этом процесс видеоплеера работает на 98%. Так что, очевидно, это мой ограничивающий фактор (не может многопоточность?).

(mplayer, xine оба пытаются играть в реальном времени, но пропускают много кадров; vlc воспроизводит звук, но показывает импрессионистский рендеринг, а затем довольно рано застревает на одном кадре; avidemux воспроизводит каждый кадр, но со скоростью примерно 1/6 скорости в реальном времени. ; cinelerra воспроизводит только некоторые кадры и довольно медленно; kdenlive не позволяет мне создать проект 120fps; Kino конвертирует и даунсэмплирует; Lives не может следовать; OpenShot воспроизводит звук нормально, но застревает на первом кадре)

Воспроизведение стандартного видео 1080p со скоростью 30 кадров в секунду использует около 65% ресурсов одного ядра. Я ожидал, что при воспроизведении 120 кадров в секунду будут пропадать кадры, но не до такой степени, что я вижу только один раз в несколько секунд. На самом деле я думал, что он будет воспроизводить примерно 1 из 4, что было бы отлично для моей цели.

Поэтому я был бы очень признателен, если бы у кого-нибудь из вас были какие-либо подсказки относительно того, как мне настроить мою видеокарту, систему или что-то еще, чтобы улучшить возможности воспроизведения, то есть воспроизведение в реальном времени с моими необработанными кадрами (без преобразования или понижения частоты дискретизации до просмотр).

Это также влияет на мою способность редактировать видео, так как я не могу сказать, что я смотрю в реальном времени, что очень неудобно при редактировании. Я не хочу снижать частоту дискретизации на первом этапе редактирования, так как я хочу сначала почувствовать полное видео и выбрать, какие разделы замедлять для замедленного воспроизведения, а какие разделы уменьшать для обычного воспроизведения в реальном времени. .

Вы смотрели, что делает ваша машина, например, запустите top, чтобы увидеть нагрузку. Вам нужно выяснить, где узкое место — это ввод-вывод, ЦП или что-то еще.

Ответы (4)

Хотя это правда, что видео 720p содержит только половину данных канала 1080p, другая вещь, которую вы должны понимать, заключается в том, что, когда вы выдвигаете систему за ее пределы, она может тратить много времени, пытаясь обработать кадры, которые она не может. не закончу вовремя. В зависимости от того, как настроен проигрыватель, он может сдаться и попытаться догнать кадр, а не закончить рендеринг кадра и отстать еще дальше.

Из-за этого, как только вы отстаете, вы можете обнаружить, что ему гораздо труднее догнать. Вы также сталкиваетесь с проблемами при поддержании достаточно быстрой передачи данных, поскольку уровень сжатия звучит так, как будто он может быть выше (сложнее декодировать), а ЦП настолько занят, что не может работать над перемещением данных, чтобы быть готовым к читать.

Вероятно, вам следует перекодировать видео на более низкую частоту кадров и работать с перекодированной копией, чтобы принять решения о редактировании, а затем только в конце заменить видео с высокой частотой кадров. В конце концов, единственная разница, которую видео со скоростью 120 кадров в секунду будет иметь для конечного вывода, — это везде, где вы в конечном итоге сделаете эффект замедленного движения, поскольку у вас не будет никакого дисплея (включая экран вашего компьютера), который может фактически загружать 120 кадров в секунду. буфер изображения. Даже экраны с частотой 240 Гц не отображают столько кадров из источника.

Есть несколько вещей, которые следует учитывать. Спецификация MP4 не предназначена для воспроизведения файлов с высокой частотой кадров, поскольку файлы сильно сжаты и ограничены использованием одного ядра для распаковки. Даже если бы у вас было 12 ядер, файл не распаковывался бы быстрее.

Самый простой способ решить вашу проблему — либо закодировать MP4 в другой кодек, либо отредактировать и выгрузить сэмплы по мере необходимости.

Как сказал @mivk выше, если это в основном для целей замедленной съемки, вы можете кодировать MP4 в кодек анимации, Photo-JPEG или Cineform. У этих кодеков больше шансов воспроизвести файл ближе к реальному времени, но даже в этом случае у них все равно будут трудности.

Это может дать вам достаточно воспроизведения в реальном времени, чтобы вы могли перейти в свой редактор, применить эффекты замедленной съемки, а затем экспортировать файл в 24/30/60 FPS, что у вас не должно возникнуть проблем с воспроизведением на вашем компьютере.

Если вы снимали со скоростью 120 кадров в секунду, вероятно, вы хотите получить эффект замедленного движения. Таким образом, воспроизведение на самом деле должно быть на вашей обычной скорости 24/25/30 кадров в секунду, чтобы получить эффект.

Нет такой вещи, как воспроизведение со скоростью 120 кадров в секунду. Максимум, о котором я знаю, будет 60p.

Какую частоту кадров для этих видео сообщают ffmpeg или mediainfo. Если они сообщают о 120 кадрах в секунду или каком-то другом странном значении, то вы, вероятно, могли бы переупаковать видео в контейнер, который рекламировал бы правильный кадр в секунду. Что-то вроде ffmpeg -r 30 -i INFILE .... -r 30 OUTFILE.

Обновите , чтобы уточнить после просмотра комментариев:

При просмотре отснятого материала в замедленном режиме нет трансформации или потерь. (Возможно, как раз наоборот, поскольку у вас больше шансов увидеть каждый кадр).

Кадр есть кадр, независимо от скорости воспроизведения.

Преобразования вступают в игру только тогда, когда вы решите пропустить кадры, чтобы добиться более высокой (не очень медленной) скорости, или удвоить некоторые кадры, чтобы еще больше усилить эффект замедленного движения. Отснятый материал со скоростью 120 кадров в секунду предназначен либо для воспроизведения с нормальной скоростью вашего фильма (24p, 60i, ... любая скорость, подходящая для вашего носителя), либо для обработки путем удвоения/пропуска кадров для достижения точной скорости, которую вы хочу.

Вы поступили правильно, снимая на очень высокой скорости, чтобы добиться эффекта замедленного движения, имея при этом достаточно кадров, чтобы при необходимости более точно настроить конечную скорость.

Ваш проигрыватель поступает правильно, показывая снятый вами эффект замедленного движения именно так, как вы его сняли.

Очень долгое время (с конца 1920-х годов) была только 1 возможная скорость воспроизведения: 24 кадра в секунду и никак иначе. Позже, с телевидением, для инженерного удобства было добавлено еще несколько скоростей: 25/50i и 30/60i (для стран с 50 Гц и 60 Гц). Теперь это было расширено до 48p, 50p и 60p, но это все. Нет такой вещи, как воспроизведение со скоростью 120 кадров в секунду.

Я думаю, что это «нормально», что видеомагнитофон со скоростью 120 кадров в секунду пытается воспроизводить видео со скоростью 120 кадров в секунду. Это не очень удобно (часто экраны обновляются 60 раз в секунду), но не в этом дело. Было бы странно, если бы видео, записанное с определенной частотой кадров, попыталось бы воспроизвести с другой. Если ОП хочет замедленное движение, ему нужно поместить 120 кадров в секунду через какую-либо программу редактирования, где оно интерпретируется как 30 кадров в секунду. Это материал для другого вопроса.
@ Барт и все, точно. Я думал, что это то, что я объяснил в своем первоначальном посте. Вся цель состоит в том, чтобы отредактировать необработанные кадры для эффектов замедления или понижения разрешения. Но чтобы выбрать, что мне нужно, чтобы сначала можно было просмотреть его без преобразований, чтобы я не потерял качество.

Если я правильно понял, вы хотите смотреть видео со скоростью 120 кадров в секунду со скоростью 0,25 их реальной скорости, видя каждый кадр, но со скоростью 30 кадров в секунду. Это то, что я делаю (GoPro 3+, 720p, 120 кадров в секунду), но это немного сложно.

Я использую редактор видеоряда Blender. Это не интуитивно понятно, но хороший туториал может изменить мир, я узнал из туториала Майкикала Мейерса:

После того, как вы прошли через основы, это так же просто, как

  • добавьте свой MP4 прямо из GoPro
  • удалить звуковую дорожку (бесполезно на данный момент)
  • установите «Диапазон кадров», чтобы он заканчивался последним кадром в вашем видео
  • установите «Разрешение» на 1280x720
  • установите «Частота кадров» на 30 кадров в секунду или 29,97 кадров в секунду в зависимости от вашей камеры (у меня используется 29,97, не знаю почему)
  • установите «Выход» в // (будет записан файл типа 00000-59829.???) выберите свой выбор настроек «Кодирования» (см. Учебник)
  • нажмите «Анимация» и подождите некоторое время, выходное видео будет замедленным со скоростью 30 кадров в секунду.

Кроме того, для редактирования реальной скорости я использую HandBrake для повторной выборки видео, потому что я не нашел, как сказать Blender сделать это. Вот скрипт, который я использовал для всех видео в каталоге:

time for f in *.MP4; do HandBrakeCLI -i $f -o ${f}_30.mkv -f mkv -q 4 -r 29.97 --cfr; HandBrakeCLI -i $f -o ${f}_60.mkv -f mkv -q 4 -r 59.940 --cfr; HandBrakeCLI -i $f -o ${f}_120.mkv -f mkv -q 4 -r 119.88 --cfr; done

РЕДАКТИРОВАТЬ : нашел более быстрый способ, используя ffmpeg, как описано в https://trac.ffmpeg.org/wiki/How%20to%20speed%20up%20/%20slow%20down%20a%20video

ffmpeg -i GOPR0604.MP4_120.mkv -q 4 -filter:v "setpts=4.0*PTS" GOPR0604.MP4_120_slowmo.mkv