... делать было нечего

Пока потихоньку собираю трешку, решил попробовать давно задуманное - сделать из коптерного видео картинку-крутилку, на коленке наваял скриптец, прошу ценить и об си ругивать
sovgvd.info/portfolio/rotate/index.php?p=pic_35_64…
Надавите на картинку и повозюкайте мышкой влево-вправо.

Ссылка на гитхаб, пока что наколенная штука, чуть позже будет приличный въюер github.com/SovGVD/video2photoroll

Никакого особого секрета - ffmpeg выдирает кадры из видео и imagemagick склеивает их в длинную картинку, потом эта картинка просто сдвигается на свою ширину, можно даже сервис модный намутить.
Если кто видел еще подобные ролики (пролет вокруг объекта), то кидайты ссылки, хочется покрасивее чего нибудь.
В идеале хочется потом попробовать автоматизировать процесс такой съемки и добавить еще одну ось, чтобы “смотреть” на объект почти с любой стороны.

не полный оборот sovgvd.info/portfolio/rotate/index.php?p=pic_28_64…
и еще sovgvd.info/portfolio/rotate/index.php?p=pic_33_64…
правильная съемка sovgvd.info/portfolio/rotate/index.php?p=dji_34_64…

  • 2112
Comments
STRIMSS

Вот база у нас в таком стиле baza-tour.ru

HATUUL

Вот наш кулибин собирает.
http://360israel.co.il
rcopen.com/member122890

SovGVD

это всё круговые панорамы, а я имел в виду просмотр объекта… т.е. не находится внутри панорамы и крутить её вокру себя, а находится в другой точки и “крутить” сам объект
вот еще для примера sovgvd.info/3d/v/index_4.php давно с другом загонялись, но тут конечно не коптер вокруг объекта а объект на вращающемся стенде, но это всё не суть, главное откуда смотреть =)

fidller

поделись скриптом. тема мега интересная, для зданий более чем

SovGVD

скриптом склеивания кадров?
что-то типа такого вчера на каленке сделал, хотя конечно лучше это через imagemagick делать, с правильным ресайзом

$files=scandir("pictures");
$img=imagecreatetruecolor((count($files)-2)*$w,$h);
$i=0;
foreach ($files  as $fi) {
    if (is_file("pictures/".$fi)) {
	$img_tmp=imagecreatefrompng("pictures/".$fi);
	$x=imagesx($img_tmp);
	$y=imagesy($img_tmp);
	imagecopyresampled ( $img , $img_tmp , $w*$i , 0 , 0 , 0 , $w , $h , $x , $y );
	imagedestroy($img_tmp);
	$i++;
    }
}
imagejpeg($img, "out.jpg", 90);

$w - ширина и $h - высота одного кадра

HATUUL

Эээ.А куда этот скрипт забивать?
ffmpeg ?

SovGVD

Это php скрипт, который тупо картинки склеивает из папки pictures, соответсвено сперва надо эти картинки подготовить руками или ffmpeg или ее чем, что видео превращает в нужное число картинок, я просто видео срезал и каждый первый кадр в секунде взял, получилось ооколо 20 штук, когда давно экспериментил получалось что надо 36 кадров хотябы, чтобы казалось плавно, т.е. по кадру на каждые 10 градусов оборота, т.е. коптером надо облетать объект за 36 секунд или около того, чтобы потом меньше заморочек было с расчётом кадров.

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

HATUUL

Конечно интерестна!
Правда для меня это пока много новых букв,надо понять,что да как.
А проха подойдет ?

SovGVD

Любая камера подойдёт, главное снять видео с пролётом вокруг объекта ровно. То что в примере прыгает заметно и человек не в центре, а руками делать и выравнивать долго и не интересно.

SovGVD

Правильные команды для создания и склеивания
ffmpeg:

  1. для создания смотрим длинну видео и считаем сколько в нем кадров (число секунд + то что после точки)*fps
  2. делим полученное число на 36 (число кадров в ленте, можно больше или меньше)
  3. ffmpeg -i video.mp4 -r полученное_число(можно дробью) /папка/куда/сложим/картинки/image-%3d.png

затем надо получить список всех файлов через пробел и скормить их imagemagick-у (находясь в папке /папка/куда/сложим/картинки/)
echo “image-001.png image-002.png и т.д.” | convert @- -sharpen 0x1.0 -filter Lanczos -distort resize 640x +append …/out.jpg

получим правильно отресайженную картинку с небольшим добавление резкости
примеры из видео которые нашел быстро
уже было sovgvd.info/portfolio/rotate/index.php?p=pic_35_64…
не полный оборот sovgvd.info/portfolio/rotate/index.php?p=pic_28_64…
и еще sovgvd.info/portfolio/rotate/index.php?p=pic_33_64…
надеюсь авторские права не особо нарушил =)

UPD: вот годный пример с видео от DJI sovgvd.info/portfolio/rotate/index.php?p=dji_34_64…

Prikupets

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

Батник должен запускаться из каталога, в который скопированы FFMPEG (в подкаталог ffmpeg, а в нем уже должен быть bin, и в нем ffmpeg.exe) и IMAGEMAGICK (в подкаталог imagemagick, а в нем уже convert.exe). Запуск батника без параметров дает подсказку.

Перед запуском удалите все картинки в выходном каталоге!

Параметры:

  1. input_file_name - входной видео-файл;
  2. output_folder - каталог, куда будет класться длинная картинка и промежуточные кадры;
  3. start_time - время начала вырезанного куска в формате MM:SS;
  4. stop_time - время конца вырезанного куска в формате MM:SS;
  5. output_frames - количество кадров в длинной картинке;
  6. output_width - ширина одного кадра в длинной картинке;
  7. [ffmpeg_options] - необязательные параметры FFMPEG (например, для вырезание участка изображения (crop)).

Пример:

split.cmd C:\Capture\gopr7489.mp4 C:\VideoOut 1:38 1:55 36 640 -vf “crop=iw-200:ih-200:100:200”

Скрипт (split.cmd):

@rem Run without parameters for help!

@set CMD_NAME=%~nx0%
@set DIR=%~dp0%
@set FFMPEG=%DIR%ffmpeg
@set IMAGEMAGICK=%DIR%imagemagick

@if [%6] EQU [] goto Usage
@set inputfile=%1
@set outputdir=%2
@set tStart=%3
@set tStop=%4
@set resultFrames=%5
@set width=%6

@SHIFT
@SHIFT
@SHIFT
@SHIFT
@SHIFT
@SHIFT
@set OPTIONS=
@:loop1
@if [%1] == [] goto end_loop1
@set OPTIONS=%OPTIONS% %1
@SHIFT
@goto loop1

@:end_loop1

@echo OPTIONS=%OPTIONS%

rem goto :Convert

@setlocal ENABLEDELAYEDEXPANSION

@for /F "tokens=1* delims=:" %%a in ("!tStart!") do @set /a tStartSec=%%a*60+%%b
@echo Start=!tStartSec!

@for /F "tokens=1* delims=:" %%a in ("!tStop!") do @set /a tStopSec=%%a*60+%%b
@echo Stop=!tStopSec!

@set /a tLen=tStopSec-tStartSec
@echo Length=!tLen!

@set /a resultFPS=(1000*resultFrames+(tLen/2))/tLen
@set resultFPS=000%resultFPS%
@echo resultFPS*1000=%resultFPS%
@set resultFPS=%resultFPS:~0,-3%.%resultFPS:~-3%
@echo resultFPS=%resultFPS%

@setlocal DISABLEDELAYEDEXPANSION

@%FFMPEG%\bin\ffmpeg.exe -i %inputfile% -r %resultFPS% -ss %tStartSec% -to %tStopSec% %OPTIONS% -f image2 %outputdir%\i%%04d.jpeg

@:Convert
@echo Set current path: %outputdir%
@pushd %outputdir%
@set fileSet=
@setlocal ENABLEDELAYEDEXPANSION
@for %%i in (*.jpeg) do @set fileSet=!fileSet! %%i
@set fileSet=%fileSet:~1%
@echo %fileSet% | %IMAGEMAGICK%\convert @- -sharpen 0x1.0 -filter Lanczos -distort resize 640x +append out.jpg

@for /f "tokens=*" %%a in ('@%IMAGEMAGICK%\identify -format "%%[fx:h]" out.jpg') do @set height=%%a

@echo Height=%height%
@set output_name=out_%resultFrames%_%width%_%height%.jpg
@ren out.jpg %output_name%

@popd

@echo -------------------------------------------------------------
@echo Result image: %outputdir%\%output_name%

@goto Quit

@:Usage
@echo ----------------------------------------------------------------------
@echo This script makes a scrollable picture from video for SovGVD's script.
@echo       Made by Andrey Prikupets, 2014. Many thanks to SovGVD!
@echo    See more: 
@echo ----------------------------------------------------------------------
@echo Usage:
@echo          %CMD_NAME% input_file_name output_folder start_time stop_time output_frames output_width [ffmpeg_options]
@echo Note:
@echo          start_time and stop_time have format: MM:SS
@echo Example:
@echo          %CMD_NAME% C:\Capture\gopr7489.mp4 C:\VideoOut 1:38 1:55 36 640 -vf "crop=iw-200:ih-200:100:200"
@echo Utilities:
@echo          ffmpeg should be copied to: %FFMPEG%
@echo          imagemagic should be copied to: %IMAGEMAGICK%

:Quit
SovGVD

Ух ты, круто =) не думал что батники что-то нормальное умеют
можно на гитхаб утащить github.com/SovGVD/video2photoroll ?

кстати если сюда пихнуть еще и youtube-dl, то можно из видео роликов с ютуба и вимео делать подобные штуки

у меня еще есть идея, кодировать не в длинную jpeg картинку, а в ogv видео и смещать покадрово, вопрос только в том, будет ли выигрышь какой то в размере,

кодирую такой строкой кстати, примерно 1мб на 35ти кадровую картинку выходит:
… convert @- -sharpen 0x1.0 -filter Lanczos -distort resize ШИРИНАx +append -interlace JPEG -quality 80% …/pic_ЧИСЛОКАДРОВ_ШИРИНА_ВЫСОТА.jpg"

Prikupets

Можно делать с ним что хошь 😁