2016-04-29 6 views
1

Я хотел бы вставить неподвижные изображения в последовательность mp4 с PHP на стороне сервера, где будет перемещаться позиция размещенного изображения, например, я помещал изображение в фоторамку с цвет цветности (или заданные координаты) в комнате, и положение этой фоторамки будет перемещаться в видео (если возможно ..). Очень похоже на видео «День друзей» в Facebook. См. Это example link.Вставить изображение в видео MP4 от PHP

Есть ли класс или функция, которые позволили бы мне это сделать?

Отметить этот предыдущий вопрос, но он казался неубедительным? Inserting an image inside a video at particular position via PHP and a video extension

Заранее благодарим за вашу помощь!

+0

Нет ответа, как это сделать с помощью PHP, но, надеюсь, мой ответ был полезен с некоторыми советами. –

+0

Большое спасибо за подробный ответ, а также ссылку на образец инструмента. Я рассмотрю использование FFmpeg за ваши действия, а также, если мой клиент согласится на кадры неподвижных изображений с вставленным изображением, поэтому нам не нужно применять перспективы/искажения. – Hofuzz

+0

PS: Если вам не нужно изображение для перемещения (например, TV Newsreader + thumbnail), вы можете использовать ** [связанный ответ] (http://video.stackexchange.com/a/12111) ** для размещения изображения в одной позиции за х раз. Если есть движение, как автомобиль с логотипом, тогда вам нужны неподвижные изображения (хватит) и проверяйте каждый кадр, пока изображение должно быть помещено. Это то, где PHP становится неудобным (но при этом зависит от готового видеовхода). Для этого вам нужно что-то вроде C++/C# или Java или AS3. –

ответ

1

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

Прежде чем я покажу вам проверку реальности, давайте предположим, что задача действительно проста: "...Insert still images into a mp4 sequence by PHP". Что вам нужно?

Try PHP:
Если вы готовите свой входной кадры, чтобы иметь что-то вроде зеленого цвета коробки, где изображение должно быть вставлено, то вы можете рассмотреть этот PHP method для замены зеленых пикселей с пользовательским фото.

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

Попробуйте FFmpeg:
Сначала у FFmpeg установлен на вашем сервере (есть даже FFmpeg для PHP связи, т.е. посылать команды и получать результат). Это будет использоваться для извлечения из исходного, наложения изображений и последующего кодирования нового выходного видео. Вы можете увидеть this answer для наложения изображений в определенных положениях.

В нижеприведенном фрагменте указаны два входных изображения (vid_frame1.png - это видео захват, которому необходимо вставить изображение, over_image1.png - это накладываемое изображение). overlay=75:200 - изображение с надписью наложения при 75px поперек (x) и 200px вниз (y).

ffmpeg -i vid_frame1.png -i over_image1.png -filter_complex "[0:v][1:v] overlay=75:200" new_frame1.png 

Как вы можете видеть, вы должны указать позицию так, в двигающемся видео (где позиция размещения будет меняться с течением времени), вам необходимо следить за ожидаемое положение изображения в каждом кадре. В 24 FPS видео, что означает 24 уникальных положения в секунду, которые могут стать утомительными. Вы выполняете приведенную выше команду 24 раза, каждый раз изменяя позицию overlay.

Примечание: При установке FFmpeg и использовать его с PHP, то вы могли бы сделать stdinput/stdoutput процесс. Это означает, что вы можете напрямую выводить на видеофайл, а не выводить PNG с «отредактированным фреймом». Видео генерируется по мере запуска вашей программы, и когда она заканчивается, есть полный видеофайл. Это слишком долго объяснять, но вы можете получить информацию об этом.

Проверка реальности ...
Что вы говорите, называется «динамическим видео». Вам нужна система для решения таких задач, как отслеживание пикселей, искажение перспективы и размытость движения среди других. Эта система будет серверным приложением (с использованием Java? Или C#?). Вот один пример dynamic editing tool. Также попробуйте кодировать что-то вроде этого distortion tool (найдено here), поэтому, если мы возьмем эту идею зеленого блока, теперь вы просто найдете четыре угла зеленого блока в исходном видеокадре и поместите эти искажения в каждый угол, и у вас есть персистирующая искажения и т. д. Для motion blur через PHP (я никогда не пробовал это, но) есть поиск Google ...