我有16 000名jpg是从一个webcan screeb抓我让运行于一年的指示进入后一年。我想找到一种方式来抓住每一个4号的图像这样,然后我就可以把它们放进另一个目录,所以我以后可以把它们变成一部电影。是有一个简单的bash脚本或其他方式在linux下,我可以做到这一点。

他们命名的。..

frame-44558.jpg

frame-44559.jpg

frame-44560.jpg

frame-44561.jpg

由于从一个福利局需要的帮助。


似乎已经奏效。夫妇中的错误我origonal员额。实际上有280,000个图像和名称。/home/baldy/Desktop/webcamimages/webcam_2007-05-29_163405.jpg /home/baldy/Desktop/webcamimages/webcam_2007-05-29_163505.jpg /home/baldy/Desktop/webcamimages/webcam_2007-05-29_163605.jpg

我跑了。cp$(ls|awk'{nr++;如果(nr%10==0)print$0}')../newdirectory/

这似乎已复制了图像。70-900每天看起来它。

现在我运行 mencoder mf://*.jpg-mf w=640:h=480:fps=30:type=jpg-孤儿和易受感染儿童lavc-lavcopts禁=msmpeg4v2-nosound-o../输出msmpeg4v2.avi

我会让你知道怎样的电影作品。

更新:电影没有工作。只有图像从2007年在它即使目录已于2008年。webcam_2008-02-17_101403.jpg webcam_2008-03-27_192205.jpg webcam_2008-02-17_102403.jpg webcam_2008-03-27_193205.jpg webcam_2008-02-17_103403.jpg webcam_2008-03-27_194205.jpg webcam_2008-02-17_104403.jpg webcam_2008-03-27_195205.jpg

我怎么可以修改我的mencoder线,以便它使用的所有图片吗?

有帮助吗?

解决方案

一个简单的方法是:

$ touch a b c d e f g h i j k l m n o p q r s t u v w x y z
$ mv $(ls | awk '{nr++; if (nr % 4 == 0) print $0}') destdir

其他提示

创建一个脚本move.sh 其中包含:

#!/bin/sh
mv $4 ../newdirectory/

使它可执行并且然后做这个文件夹:

ls *.jpg | xargs -n 4 ./move.sh

这需要列表的文件,通过四个在一段时间到move.sh,然后忽略了第三个移动的第四次进入一个新的文件夹。

这将工作,甚至如果这些数字是不完全的顺序(例如如果一些框架的数字是失踪,然后使用国防部4算赢得不工作)。

作为建议,应使用

seq -f 'frame-%g.jpg' 1 4 number-of-frames

生成列表的文件,因为'ls'将会失败280k文件。所以最终解决方案将是这样的:

for f in `seq -f 'frame-%g.jpg' 1 4 number-of-frames` ; do
  mv $f destdir/
done
seq -f 'frame-%g.jpg' 1 4 number-of-frames

...将打印的名字的文件需要。

一个简单的方法在perl(可能很容易地适应bash)是全局的文件名一阵然后获得序列号,并删除那些不可分割的,由4

这样的事情将打印所需文件:

ls -1 /path/to/files/ | perl -e 'while (<STDIN>) {($seq)=/(\d*)\.jpg$/; print $_ if $seq && $seq % 4 ==0}'

你可以替换打印通过一个移动...

这将工作,如果这些文件的编号顺序,即使数量的数字是非常喜欢 file_9.jpg 随后通过 file_10.jpg )

给麦思通的需要注意关于排序:

ls | sed -n '1~4 p' | xargs -i mv {} ../destdir/

我喜欢这个方案是,一切都在做什么,它的目的是要做到,所以感觉unix给我。

只是迭代过列表的文件:

files=( frame-*.jpg )
i=0
while [[ $i -lt ${#files} ]] ; do
  cur_file=${files[$i]}
  mungle_frame $cur_file
  i=$( expr $i + 4 )
done

这是漂亮的俗气的,但是它应该完成工作。假设你在目前的cd会成目录包含所有的文件:

mkdir ../outdir
ls | sort -n | while read fname; do mv "$fname" ../outdir/; read; read; read; done

sort -n 有没有假设你的文件并不都具有同样数量的数字;否则 ls 将在词汇以便在那里 frame-123.jpg 来之前 frame-4.jpg 我不认为那是你想要什么。

请小心点,回你的文件,然后再尝试我的解决方案,等等。我不想对你负责丢失一年的数据。

注意,这个方案也处理文件与空中的名称,不同于大多数的其他人。我知道这不是样本的部分文件名,但它很容易写壳的命令不处理空间安全,所以我想这样做,在这个例子。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top