使用PHP创建视频文件

使用PHP创建视频文件,php,video-capture,video-processing,Php,Video Capture,Video Processing,我有一个使用不同资源(如图像、音频文件)创建视频文件的场景 我想做的是,从特定文件夹中查找音频文件并将其设置为背景音乐,然后从特定文件夹中获取图像并逐个显示这些图像 所以基本上我有图像和音频文件,我想用PHP创建一个视频文件 有谁能建议一下这个项目的启动点吗?我已经从视频中捕获图像并使用Ffmpeg转换视频,因此我想到了Ffmpeg,但我认为它不允许创建视频。Ffmpeg将允许您从静态图像创建视频 例如,要创建帧速率为10fps的视频,请从images 001.jpg。。。。999.jpg: f

我有一个使用不同资源(如图像、音频文件)创建视频文件的场景

我想做的是,从特定文件夹中查找音频文件并将其设置为背景音乐,然后从特定文件夹中获取图像并逐个显示这些图像

所以基本上我有图像和音频文件,我想用PHP创建一个视频文件


有谁能建议一下这个项目的启动点吗?我已经从视频中捕获图像并使用Ffmpeg转换视频,因此我想到了Ffmpeg,但我认为它不允许创建视频。

Ffmpeg将允许您从静态图像创建视频

例如,要创建帧速率为10fps的视频,请从images 001.jpg。。。。999.jpg:

ffmpeg -r 10 -b 1800 -i %03d.jpg test1800.mp4
您可以多路复用流(音频和视频),如(为比特率添加相关的编解码器选项等)


我不打算详细介绍,因为ffmpeg是一个难题(参数在不同版本之间以不兼容的方式变化,这取决于编译的方式),找到一个适合您的速率/压缩/分辨率设置是一个反复尝试的过程。

Phil的解决方案是正确的方法。通过在ffmpeg上记录自己需要做什么(这很混乱,我不能责怪他不想做你的家庭作业),然后从php内部调用它

粗略的谷歌搜索会发现php包装(例如)。如果没有最新/足够完整的,请坚持从php发出所需的shell命令

ImageMagick convert -delay 100 -quality 75 photo1.jpg photo2.jpg movie.mpg


在Ubuntu下,您需要PHP5、ffmpeg和访问ffmpeg二进制文件,这可以通过以下方式轻松实现:

apt-get install php5 ffmpeg
我使用此php函数从一个gif图像和一个mp3文件生成mp4视频,源图像和输出视频文件均为720x576像素:

function mix_video($audio_file, $img_file, $video_file) {
    $mix = "ffmpeg -loop_input -i " . $img_file . " -i " . $audio_file . " -vcodec mpeg4 -s 720x576 -b 10k -r 1 -acodec copy -shortest " . $video_file;
    exec($mix);
}
示例用法:

$audio_file = "/path/to/mp3-file";
$img_file = "/path/to/img-file";
$video_file = "/path/to/video-file";

mix_video($audio_file, $img_file, $video_file);

您是否需要创建幻灯片,或者输入的图像真的打算作为视频帧?作为视频帧。。我的最终输出应该是一个视频文件,比如flv或mp4。背景音乐中的音频和图像一个接一个地显示..而“一个接一个”意味着每个图像都应该在几秒钟内可见?(对于视频帧,合同为1/25秒。)ffmpeg可以将帧图像转换为视频。是否有其他替代解决方案?第一个命令不是创建视频幻灯片,而是创建了一个视频文件,但仅包含从文件夹中获取的最后图像。所以没有视频播放,因为它只有一个图像要显示:(您需要按照上面的指定命名文件;001.jpg到999.jpgi已经按照该模式命名了文件名,生成的文件只有视频中的第一个图像和显示0秒的曲目长度。imagemagick创建视频,但是是否有任何选项可以添加图像过渡,如淡入、淡出等……fmpeg版本2.7.6-0ubuntu0.15.10.1版权所有(c)2000-2016使用gcc 5.2.1(Ubuntu 5.2.1-22ubuntu2)20151010构建的FFmpeg开发人员提供输出:无法识别的选项“循环输入”。
function mix_video($audio_file, $img_file, $video_file) {
    $mix = "ffmpeg -loop_input -i " . $img_file . " -i " . $audio_file . " -vcodec mpeg4 -s 720x576 -b 10k -r 1 -acodec copy -shortest " . $video_file;
    exec($mix);
}
$audio_file = "/path/to/mp3-file";
$img_file = "/path/to/img-file";
$video_file = "/path/to/video-file";

mix_video($audio_file, $img_file, $video_file);