如何解决将多个ffmpeg命令合并为一行,以使整个过程更快
我想将多个命令合并为一个,以便整个处理时间最快。到目前为止,我正在做的是
-
从网络表单上传视频文件,然后将服务器上传到临时目录。
if (move_uploaded_file($_FILES[$param]['tmp_name'],$filePath)) { return $filePath; }
-
在视频周围添加黑色边框(通过ffmpeg命令)-视频再次上传到目录
$command_new = "ffmpeg -i $filePath -vf 'scale=720:1280:force_original_aspect_ratio=decrease,pad=720:1280:(ow-iw)/2:(oh-ih)/2,setsar=1' $video_file"; exec($command_new);
-
优化视频(ffmpeg命令)-视频再次上传到目录
$cmd_new = "ffmpeg -i $video_file -c:v libx264 -crf 28 $optimizeResultFile";
-
将上传的文件与数据库中存在的现有视频文件合并为一个文件,然后将该文件上传到目录中(通过ffmpeg命令)
$command_new = "ffmpeg -i $optimizeResultFile -i $second_video_path -filter_complex '[0:v]pad=iw*2:ih[int];[int][1:v]overlay=W/2:0[vid]' -map [vid] -c:v libx264 -crf 23 -preset veryfast $videomerge";
-
//在该最终合并的视频中添加自定义声音
$cmd_new = "ffmpeg -i $videomerge -i $audio -c:v copy -c:a aac -shortest -map 0:v:0 -map 1:a:0 $with_new_audio";
是否可以只执行一个命令,而不执行多个命令。此过程需要1分钟才能上传最终文件。想更快一点
解决方法
ffmpeg -i $database -i $uploaded -i $audio -filter_complex "[1:v]scale=720:1280:force_original_aspect_ratio=decrease,pad=720:1280:-1:-1,setsar=1[right];[0:v][right]hstack,format=yuv420p[v]" -map "[v]" -map 2:a -c:v libx264 -crf 23 -preset veryfast -c:a copy -shortest -movflags +faststart output.mp4
- 使用hstack filter代替pad + overlay。
- 这假设
$database
与$uploaded
的高度相同。 - 这假设
$audio
是AAC。否则,将-c:a copy
更改为-c:a aac
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。