Таким образом, конечной целью является создание сценария php, который, при наличии списка изображений, автоматически создаст видео слайд-шоу с переходами и текстовыми наложениями, а также, возможно, аудиодорожкой.
I ' У меня есть опыт в кодировании PHP, но у него нет опыта работы с командной строкой.
У нас есть выделенный сервер, и у меня есть хостинговая компания, чтобы установить для меня ffmpeg.
Поэтому я решил начать просто и медленно построить до конечной цели. Но я действительно борюсь. Я потратил пару дней, пробуя разные вещи с очень небольшим успехом.
Я нашел этот пост с несколькими отличными примерами https://superuser.com/questions/833232/create-video-with-5-images-with-fadein-out-effect-in-ffmpeg, но я не могу получить ни одного из них работать. Это заставляет меня думать, что я делаю что-то в корне неправильно.
Так что это работает для меня - я получаю симпатичное небольшое 30 se c видео слайд-шоу из 6 изображений, отображаемых в течение 5 секунд каждое:
$ffmpeg="/usr/bin/ffmpeg";
exec($ffmpeg.' -f concat -safe 0 -i input.txt -c:v libx264 -r 30 -pix_fmt yuv420p -y out.mp4 2>&1', $output);
var_dump($output);
и это input.txt
file /home/webvivre/public_html/videos/test/i1.jpg
duration 5
file /home/webvivre/public_html/videos/test/i2.jpg
duration 5
file /home/webvivre/public_html/videos/test/i3.jpg
duration 5
file /home/webvivre/public_html/videos/test/i4.jpg
duration 5
file /home/webvivre/public_html/videos/test/i5.jpg
duration 5
file /home/webvivre/public_html/videos/test/i6.jpg
duration 5
Но это (в основном взято из примера в ссылке выше - меняются только имена изображений и местоположение ffmpeg) не работает для меня:
$code="/usr/bin/ffmpeg -y -loop 1 -i i1.jpg -loop 1 -i i2.jpg -loop 1 -i i3.jpg -filter_complex \" [0:v]zoompan=z='min(zoom+0.0015,1.5)':d=125,trim=duration=5,blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))',setpts=PTS-STARTPTS[v0]; [1:v]zoompan=z='min(zoom+0.0015,1.5)':d=125,trim=duration=5,blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))',setpts=PTS-STARTPTS[v1]; [2:v]zoompan=z='min(zoom+0.0015,1.5)':d=125,trim=duration=5,blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))',setpts=PTS-STARTPTS[v2]; [v0][v1][v2] concat=n=3:v=1:a=0, format=yuv420p[v]\" -map '[v]' -c:v libx264 -pix_fmt yuvj420p -q:v 1 out.mp4 2>&1";
exec($code,$output);
var_dump($output);
Это вывод:
array(25) { [0]=> string(67) "ffmpeg version 2.8.15 Copyright (c) 2000-2018 the FFmpeg developers" [1]=> string(56) " built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)" [2]=> string(1147) " configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --extra-ldflags='-Wl,-z,relro ' --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --disable-crystalhd --enable-gnutls --enable-ladspa --enable-libass --enable-libcdio --enable-libdc1394 --enable-libfdk-aac --enable-nonfree --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libx264 --enable-libx265 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect" [3]=> string(40) " libavutil 54. 31.100 / 54. 31.100" [4]=> string(40) " libavcodec 56. 60.100 / 56. 60.100" [5]=> string(40) " libavformat 56. 40.101 / 56. 40.101" [6]=> string(40) " libavdevice 56. 4.100 / 56. 4.100" [7]=> string(40) " libavfilter 5. 40.101 / 5. 40.101" [8]=> string(40) " libavresample 2. 1. 0 / 2. 1. 0" [9]=> string(40) " libswscale 3. 1.101 / 3. 1.101" [10]=> string(40) " libswresample 1. 2.101 / 1. 2.101" [11]=> string(40) " libpostproc 53. 3.100 / 53. 3.100" [12]=> string(38) "[mjpeg @ 0x183c720] Changeing bps to 8" [13]=> string(32) "Input #0, image2, from 'i1.jpg':" [14]=> string(61) " Duration: 00:00:00.04, start: 0.000000, bitrate: 33777 kb/s" [15]=> string(128) " Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 1000x750 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 25 tbn, 25 tbc" [16]=> string(38) "[mjpeg @ 0x18427c0] Changeing bps to 8" [17]=> string(32) "Input #1, image2, from 'i2.jpg':" [18]=> string(61) " Duration: 00:00:00.04, start: 0.000000, bitrate: 41896 kb/s" [19]=> string(132) " Stream #1:0: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 1000x750 [SAR 300:300 DAR 4:3], 25 fps, 25 tbr, 25 tbn, 25 tbc" [20]=> string(38) "[mjpeg @ 0x1849fa0] Changeing bps to 8" [21]=> string(32) "Input #2, image2, from 'i3.jpg':" [22]=> string(61) " Duration: 00:00:00.04, start: 0.000000, bitrate: 34776 kb/s" [23]=> string(132) " Stream #2:0: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 1000x750 [SAR 300:300 DAR 4:3], 25 fps, 25 tbr, 25 tbn, 25 tbc" [24]=> string(81) "Cannot find a matching stream for unlabeled input pad 1 on filter Parsed_blend_10" }
И для справки, это информация, предоставленная мне хостинговой компанией после установки ffmpeg для меня:
svr01~ # ffmpeg
ffmpeg version 2.8.15 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36)
configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --extra-ldflags='-Wl,-z,relro ' --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --disable-crystalhd --enable-gnutls --enable-ladspa --enable-libass --enable-libcdio --enable-libdc1394 --enable-libfdk-aac --enable-nonfree --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libx264 --enable-libx265 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
Hyper fast Audio and Video encoder
Если кто-то может просто подтолкнуть меня в правильном направлении, чтобы заставить работать выше, я был бы очень благодарен. Я просто знаю, что в итоге это станет чем-то очень простым.