解压缩后的流链



我想有效地将tar中包含的几个jpeg图像.gz转换为x264 mp4电影。

gzip -cd Monitor-1-xx.tar.gz|cpio -i --to-stdout|jpegtopnm|ppmtoy4m -F 4:1| 
>  x264 --crf 24 -o Monitor-1-xx.mp4 --stdin y4m -

这里的问题是,在 cpio 之后,我在单个流中有多个 jpg 文件,而 jpegtopnm 只转换第一个文件。

我想找到一个函数来拆分流(或使其预拆分)。然后我想为每个拆分多次运行 jpegtopnm。这有点像 xargs 首先解压缩到磁盘时所做的。写入磁盘是我试图避免的事情:

mkdir tmpMonitor && cd tmpMonitor && tar -xf ../Monitor-1-xx.tar.gz
find . -iname "*.jpg"|xargs -n1 jpegtopnm|ppmtoy4m -F 4:1| 
    x264 --crf 24 -o ../xx.mp4 --stdin y4m -
cd .. && rm -rf tmpMonitor

有什么建议吗?

tar有几个选项在这里可能有用(我有GNU tar,所以我提前道歉假设你这样做,以防你真的没有):

  1. --wildcards - 允许您使用像 *.jpeg 这样的 glob 来选择要从 tar 中提取的文件
  2. --to-command - 通过管道将每个提取的文件传送到给定的命令。

所以也许是这样的事情?

tar -xzf Monitor-1-xx.tar.gz --wildcards '*.jpeg' 
    --to-command="jpegtopnm|ppmtoy4m -F 4:1| x264 --crf 24 -o ../xx.mp4 --stdin y4m -"

好吧,我对x264了解不多,所以请考虑未经测试的代码。 我使用简单的.txt文件而不是.jpegscat -n而不是jpegtopnm等对此进行了测试。另一件事是,我猜你想要单独的输出文件(每个 jpeg 一个),所以在我看来../xx.mp4不会做......因此,假设您希望为每个文件单独调用jpegtopnm|ppmtoy4m -F 4:1| x264 --crf 24 -o ../xx.mp4 --stdin y4m -,那么您希望-o不同的输出文件名,对吗?- 在这种情况下,以下黑客可能会起作用:

tar -xzf Monitor-1-xx.tar.gz --wildcards '*.jpeg' 
    --to-command="jpegtopnm|ppmtoy4m -F 4:1| x264 --crf 24 -o ../xx-`date +%H%M%S%N`.mp4 --stdin y4m -"

相关内容

  • 没有找到相关文章

最新更新