Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Command line ffmpeg图像到具有不同开始时间和持续时间的视频_Command Line_Video_Ffmpeg_Php_Exec - Fatal编程技术网

Command line ffmpeg图像到具有不同开始时间和持续时间的视频

Command line ffmpeg图像到具有不同开始时间和持续时间的视频,command-line,video,ffmpeg,php,exec,Command Line,Video,Ffmpeg,Php,Exec,我最近了解到FFMPEG的存在,并试图在我的wordpress网站上使用它 在这个网站上,我正在开发一个html/php/js表单页面,允许用户上传图片,并设置图片何时显示以及显示多长时间 现在我的代码只显示了整个视频的一个图像 <?php if (isset($_POST['button'])) { echo shell_exec('ffmpeg -t '.$cap_1.' -i /myurl/beach-1866431.jpg -t '.$cap_2.' -i /myurl/orla

我最近了解到FFMPEG的存在,并试图在我的wordpress网站上使用它

在这个网站上,我正在开发一个html/php/js表单页面,允许用户上传图片,并设置图片何时显示以及显示多长时间

现在我的代码只显示了整个视频的一个图像

<?php if (isset($_POST['button'])) { 
echo shell_exec('ffmpeg -t '.$cap_1.' -i /myurl/beach-1866431.jpg -t '.$cap_2.' -i /myurl/orlando-1104481-1.jpg -filter_complex "scale=1280:-2" -i /myurl/audio.mp3 -c:v libx264 -pix_fmt yuv420p -t 30 -y /myurl/'.$v_title.'.mp4 2>&1');
 } ?>
和ffmpeg命令-

shell_exec('ffmpeg -f concat -safe 0 -i /path/file.txt -filter_complex "scale=1280:-2" -i /path/audio.mp3 -c:v libx264 -pix_fmt yuv420p -t 30 -y /path/'.$v_title.'.mp4 2>&1');
编辑2

使用建议的concat方法,我的代码现在看起来如下--

编辑3

我几乎让它按需工作,使用了两个命令,一个用于图像和淡入淡出,另一个用于组合音频。我遇到的唯一问题是更改每个图像显示的时间--


此答案解决了您广泛的多重问题中的
ffmpeg
特定问题

本例将拍摄任意大小的图像,将其放入1280x720框中,在图像之间淡入淡出,同时播放音频。无论图像或音频何时结束,视频都将结束:以最短的为准

ffmpeg \
-i audio1.mp3 \
-i audio2.wav \
-loop 1 -t 5 -i image1.jpg \
-loop 1 -t 5 -i image2.png \
-loop 1 -t 5 -i image3.jpg \
-filter_complex \
"[2:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=out:st=4:d=1[v1]; \
 [3:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
 [4:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
 [0:a][1:a]amerge=inputs=2[a];
 [v1][v2][v3]concat=n=3:v=1:a=0,format=yuv420p[v]" \
-map "[v]" -map "[a]" -ac 2 -shortest -movflags +faststart output.mp4

您的问题本质上是三个问题:1)如何将图像与
ffmpeg
?,2)如何在PHP脚本中实现该命令,以及3)如何在PHP脚本中的命令中添加换行符?这个网站上有大量的
ffmpeg
concat答案()。对于PHP,在尝试编写脚本之前,应该先让
ffmpeg
命令在cli中工作。是在显示特定图像期间还是在整个视频期间播放
3251.mp3
?由于引入了音频,所有其他段也需要音频,同样,每个音频段都需要相应的视频段。因此,除非在整个视频中播放
3251.mp3
,否则您需要为每个图像生成无声音频,并为
3251.mp3
生成或提供相应的视频片段。请参阅anullsrc制作静音音频的示例链接。假设在整个视频中播放.mp3音频(无循环)@LordNeckbeard@LordNeckbeard我尝试完全按照您的示例进行操作,但遇到了此错误--流说明符:v'位于filtergraph描述[0:v][4:a][1:v][1:a][2:v][4:a][3:v][4:a]concat=n=4:v=1:a=1不匹配streamsthanks,不过我已经在更新的代码中做到了这一点。我遇到的问题是设置每个图像的显示时间。@Rich此命令在一个命令中完成所有操作,而不是在多个命令中完成。要控制图像持续时间,请更改相应的
-t
值(不要忘了调整淡入度值)。不过,我不是指持续时间。例如,我的音频剪辑是25秒,我希望图片1在剪辑的6秒标记处显示,图片2在12秒左右显示,以此类推@lordneckbeard@Rich我没有从你的问题中得到你想要的。所以,为了澄清,你想要每个图像的持续时间=音频持续时间/图像数量?不。。。我有一个表单,可以让用户上传照片和语音。在这个表单上,对于他们上传的每一张图片,都有要输入1的输入字段。图片显示的是视频中的什么时间2。这幅画能展示多久。。。。所以我现在唯一缺少的就是1号。视频长度将全部基于用户使用的音频。
shell_exec('ffmpeg -f concat -safe 0 -i /path/file.txt -filter_complex "scale=1280:-2" -i /path/audio.mp3 -c:v libx264 -pix_fmt yuv420p -t 30 -y /path/'.$v_title.'.mp4 2>&1');
<?php if (isset($_POST['button'])) { 
echo shell_exec('ffmpeg \
-loop 1 -framerate 24 -t 10 -i goldmetal.jpg \
-i 3251.mp3 \
-loop 1 -framerate 24 -t 10 -i cash-register-1885558.jpg \
-loop 1 -framerate 24 -t 10 -i ice-1915849.jpg \
-filter_complex "[0:v][1:a][2:v][3:v]concat=n=4:v=1:a=1[v][a]" -map "[v]" -map "[a]" -c:v libx264 /path/'.$v_title.'.mp4 2>&1');
 } ?>
**Stream specifier ':v' in filtergraph description [0:v][1:a][2:v][3:v]concat=n=4:v=1:a=1[v][a] matches no streams.**
echo shell_exec('ffmpeg \
-loop 1 -t 5 -i '.$thepath .'/'.$v_pix1.' \
-loop 1 -t 5 -i ' .$thepath . '/cash-register-1885558.jpg \
-loop 1 -t 5 -i ' .$thepath . '/ice-1915849.jpg \
-loop 1 -t 5 -i '.$thepath .'/'.$v_pix1.' \
-loop 1 -t 5 -i ' .$thepath . '/ice-1915849.jpg \
-filter_complex \
"[0:v]setpts=PTS-STARTPTS,fade=t=out:st=4:d=1,scale=1280:720,setdar=16/9,setsar=sar=300/300[v0]; \
 [1:v]setpts=PTS-STARTPTS,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1,scale=1280:720,setdar=16/9,setsar=sar=300/300[v1]; \
 [2:v]setpts=PTS-STARTPTS,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1,scale=1280:720,setdar=16/9,setsar=sar=300/300[v2]; \
 [3:v]setpts=PTS-STARTPTS,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1,scale=1280:720,setdar=16/9,setsar=sar=300/300[v3]; \
 [4:v]setpts=PTS-STARTPTS,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1,scale=1280:720,setdar=16/9,setsar=sar=300/300[v4]; \
 [v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" -y '.$thepath .'/fadeout.mp4 2>&1');


echo shell_exec('ffmpeg \
-i '.$thepath .'/fadeout.mp4 \
-i '.$thepath .'/3251.mp3 \
-filter_complex "[0:v:0][1:a:0] concat=n=1:v=1:a=1 [vout] [aout]" -map "[vout]" -map "[aout]" -c:v libx264 -r 1 -y '.$thepath .'/mergetest.mp4 2>&1');
ffmpeg \
-i audio1.mp3 \
-i audio2.wav \
-loop 1 -t 5 -i image1.jpg \
-loop 1 -t 5 -i image2.png \
-loop 1 -t 5 -i image3.jpg \
-filter_complex \
"[2:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=out:st=4:d=1[v1]; \
 [3:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
 [4:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
 [0:a][1:a]amerge=inputs=2[a];
 [v1][v2][v3]concat=n=3:v=1:a=0,format=yuv420p[v]" \
-map "[v]" -map "[a]" -ac 2 -shortest -movflags +faststart output.mp4