我想将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
有什么建议吗?
答案 0 :(得分:0)
tar
有两个选项可能在这里有用(我有GNU tar
,所以我提前道歉,假如你实际上没有):
--wildcards
- 允许您使用像*.jpeg
--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
不会...所以假设您希望每个文件的{strong>单独调用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 -"