2

我想有效地将​​ tar.gz 中包含的几个 jpeg 图像转换为 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

有什么建议么?

4

1 回答 1

0

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

  1. --wildcards- 让您可以使用 glob 选择要从 tar 中提取的文件,例如*.jpeg
  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 文件而.jpegs不是cat -n等进行了测试jpegtopnm。另一件事是,我猜你想要单独的输出文件(每个 jpeg 一个),所以在我看来它../xx.mp4不会这样做......所以假设你想要单独的jpegtopnm|ppmtoy4m -F 4:1| x264 --crf 24 -o ../xx.mp4 --stdin y4m -为每个文件调用然后你想要一个不同的输出文件名,-o对吗?- 在这种情况下,以下 hack 可能会起作用:

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 -"
于 2012-12-10T09:53:04.467 回答