unix - 将多个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 过滤器代替 pad + overlay。
- 这假设
$database
与 的高度相同$uploaded
。 - 这假设
$audio
是 AAC。否则,更改-c:a copy
为-c:a aac
.
推荐阅读
- vue.js - 已安装 Vue Native 但 npm start 不起作用得到错误
- c# - 在 ASP.NET Core 3.1 框架中使用 IDataProtectionProvider 时如何指定加密密钥?
- c++ - 我是否想使用 virtual destructor=default 来正确处理具有虚拟功能的类?
- python - threshold_multiotsu 从不加载
- spring-boot - 在 Spring Boot 应用程序中创建一个类的 bean?
- python - dd 从 bash 返回 0,但如果使用 subprocess.run() 运行则返回错误
- npm - npm 删除每次安装的依赖项
- excel - 使用 Excel 宏仅将过滤后的数据导出到 csv 文件中
- r - 时间序列预测的平均 mse 优化标准(R 的 fable 包中的“amse”)
- swift - 在范围内找不到类型 SwiftUI 'Color'