将命令的输出作为参数传递给另一个命令而不使用临时文件

将命令的输出作为参数传递给另一个命令而不使用临时文件

我正在尝试将数千个视频文件从一种格式(vob)转换为另一种格式(mkv)。每个源视频被分割成 < 8 个按顺序编号的 1GB *.vob 文件。遗憾的是,视频转换程序只能接受单个串联的 vob 文件,该文件可以通过以下方式轻松创建:

cat *.vob > full_movie.vob

(其中 full_movie.vob 的大小通常为 6-7 GB)

视频格式转换程序的形式为:

video_convert -i full_movie.vob  many_arguments -o full_movie.mkv

由于这些文件都位于网络驱动器上,因此网络流量是最大的瓶颈。我想以某种方式避免创建并随后销毁所有临时 full_movie.vob 文件的中间步骤(即使它们本地存储在我的笔记本电脑 SSD 上,我不想通过写入 >100TB 来磨损它)。

有什么方法可以获取cat *.vob命令的输出并将其保存在 RAM 中(而不是存储为文件)并以某种方式将其推入 video_convert 程序参数中?如果我必须将临时文件放在服务器上,那么网络流量和时间就会增加一倍。

这可能是圆孔中的方钉......

答案1

您的video_convert程序是否可以选择处理标准输入而不是文件?如果是这样,则只需将 的输出通过管道传输cat *.vob到其中即可。顺便说一句,许多程序允许您使用-文件名来指示标准输入,或者如果您不提供文件名,则默认使用标准输入。或者你可以使用/dev/stdin.例如

cat *.vob | video_convert many_arguments -o full_movie.mkv
cat *.vob | video_convert -i -  many_arguments -o full_movie.mkv
cat *.vob | video_convert -i /dev/stdin  many_arguments -o full_movie.mkv

video_convert请注意,如果需要查找输入中的特定位置,则使用 stdin 将不起作用。仅当它可以处理连续的数据流时它才有效。同样适用于使用流程替代或者命名管道又名 fifo,如 @muru 评论中提到的 - 它们也不可查找。

相关内容