Bash脚本为目录中的所有视频文件生成缩略图

时间:2013-03-22 01:22:59

标签: linux bash ffmpeg

我有一个包含10,000多个视频的文件夹。对于每个视频,我想创建一个随机缩略图。

我的视频文件位于目录/视频中 缩略图位于目录/ thumbs

所有视频都命名为ID.mp4,其中ID是视频文件的任意名称。 我希望拇指是ID.jpg。

我目前使用这个与php一起生成缩略图,但效率不高,无法为所有这些视频执行。

$video = "/videos";
$image = "/thumbs";
$time = rand(1,300);
shell_exec("ffmpeg -i $video -an -ss $time -f mjpeg -t 1 -r 1 -y -s 620x370 $image 2>&1");

有人愿意帮我这个吗?

3 个答案:

答案 0 :(得分:0)

是的,shell可以帮助你,同时,你可以同时运行许多脚本,只检查转换前jpg是否可用。

答案 1 :(得分:0)

你可以试试这个:

for f in $MOVIEDIR
do
 ffmpeg -i "$f" -t 2 -r 0.5 "$f"%d.jpg
done

你应该让ffmpeg行做你想要的并且效率很高。用较小的电影文件夹将其包装在脚本中......

答案 2 :(得分:0)

我用这段代码做了......

testApp="avconv"; which $testApp >/dev/null 2>&1 || { echo "$testApp not found, try 'apt-get install libav -y'"; exit 1; }
for f in *.mp4 ; do f2=${f%.*}; r1=$((RANDOM%300+30)); [ -f "$f2.jpg" ] || { avconv -ss $r1 -i "$f" -vsync 1 -r 1 -an -y -vframes 1 -timelimit 1 -vf scale='-1':'640',crop=640:480 "$f2.jpg"; }; done

相同的代码

testApp="avconv"; which $testApp >/dev/null 2>&1 || { echo "$testApp not found, try 'apt-get install libav -y'"; exit 1; }
for f in *.mp4 ; do
   f2=${f%.*}; r1=$((RANDOM%300+30))
   [ -f "$f2.jpg" ] || { 
      avconv -ss $r1 -i "$f" -vsync 1 -r 1 -an -y -vframes 1 -timelimit 1 -vf scale='-1':'640',crop=640:480 "$f2.jpg"
   }
done

F =文件名

f2 =没有扩展名的文件名

r1 =随机整数,介于20-300之间,这是快照的时间(秒)