У меня есть ноутбук с процессором 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, что было бы отлично для моей цели.
Поэтому я был бы очень признателен, если бы у кого-нибудь из вас были какие-либо подсказки относительно того, как мне настроить мою видеокарту, систему или что-то еще, чтобы улучшить возможности воспроизведения, то есть воспроизведение в реальном времени с моими необработанными кадрами (без преобразования или понижения частоты дискретизации до просмотр).
Это также влияет на мою способность редактировать видео, так как я не могу сказать, что я смотрю в реальном времени, что очень неудобно при редактировании. Я не хочу снижать частоту дискретизации на первом этапе редактирования, так как я хочу сначала почувствовать полное видео и выбрать, какие разделы замедлять для замедленного воспроизведения, а какие разделы уменьшать для обычного воспроизведения в реальном времени. .
Хотя это правда, что видео 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 кадров в секунду со скоростью 0,25 их реальной скорости, видя каждый кадр, но со скоростью 30 кадров в секунду. Это то, что я делаю (GoPro 3+, 720p, 120 кадров в секунду), но это немного сложно.
Я использую редактор видеоряда Blender. Это не интуитивно понятно, но хороший туториал может изменить мир, я узнал из туториала Майкикала Мейерса:
После того, как вы прошли через основы, это так же просто, как
Кроме того, для редактирования реальной скорости я использую 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
Доктор Мэйхем