我有一系列目录,其中包含(主要是)视频文件
test1
1.mpg
2.avi
3.mpeg
junk.sh
test2
123.avi
432.avi
432.srt
test3
asdf.mpg
qwerty.mpeg
我用目录名(基于其他参数)创建一个变量(video_dir
),并将其与find
一起使用以生成基本列表。然后,我根据另一个变量(video_type
)筛选文件类型(因为目录中有时存在非视频文件),并通过egrep
对其进行过滤。然后,我重新整理列表,然后将其保存到文件中。后来mplayer
使用该文件在列表中进行幻灯片显示。我目前使用以下命令来完成该任务。我敢肯定这是一种可怕的方法,但是它对我有用,即使在大目录下也非常快。
video_dir="/test1 /test2"
video_types=".mpg$|.avi$|.mpeg$"
find ${video_dir} -type f |
egrep -i "${video_types}" |
shuf > "$TEMP_OUT"
我现在想添加基于视频文件的分辨率高度过滤出文件的功能。我可以从中得到。
mediainfo --Output='Video;%Height%' filename
这只是返回一个数字。我尝试使用find的-exec功能在每个文件上运行该命令。
find ${video_dir} -type f -exec mediainfo --Output='Video;%Height%' {} \;
但是那只是返回高度列表,而不是文件名,我不知道如何基于比较来拒绝高度,例如<480。我可以为下一个循环做一个准备,但是这似乎是个坏主意。
不是在计算机上,所以未经测试,但可能很近...
您可以将以下内容替换为egrep
,因此您仍在find
命令中(-iname
不区分大小写,-o
表示逻辑或):
find test1 test2 -type f \
/( -iname "*.mpg" -o -iname "*.avi" -o -iname "*.mpeg \) \
NEXT_BIT
然后,NEXT_BIT可以-exec bash
并以状态0或1退出,具体取决于您要包含还是排除当前文件。所以它看起来像这样:
-exec bash -c 'H=$(mediainfo -output ... "$1"); [ $H -lt 480 ] && exit 1; exit 0' _ {} \;
对不起,我明天才能考试。