我正在编写一个 bash 脚本,用于使用 ffmpeg 以特殊格式对视频进行编码。为了保存生成的视频,我想在编码完成后立即上传视频。因此我想在我的脚本中使用并行处理。
一个简短的例子:
#!/bin/bash
uploading() {
upload $1
}
encoding() {
ffmpeg video video_encoded
uploading $video_encoded
}
如果我的编码比上传功能更快,它将创建一个新的后台进程。这不是我想要的。想要的行为是,如果上传过程仍然存在,我的编码函数应该将所需的参数(例如视频路径)保存在某种队列中,以便上传函数在其末尾检查队列是否为空并推送和弹出按要求。
bash 中可能有这样的事情吗?
先谢谢了!
答案1
有两个脚本。一种用于管理视频编码,另一种用于上传。编码完成后,使用放置文件的假脱机目录(如果仅需要视频本身,则使用符号链接;如果需要存储更多信息,则使用文本文件)。
上传脚本应每 n 秒检查一次 spool 目录中是否有新文件要上传。成功上传后,上传脚本将从假脱机目录中删除文件。
从主/编码脚本生成上传脚本。所有文件上传成功后,您可以安全地终止卸载器脚本(spool 目录为空;非空目录意味着上传尚未完成/成功)。