2013-03-22 51 views
-1

我拥有超过10,000个视频的文件夹。对于我想要创建随机缩略图图像的每个视频。Bash脚本为目录中的所有视频文件生成缩略图

我的视频文件在目录/视频 缩略图目录/大拇指

所有的视频被命名为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"); 

有人在意帮助我吗?

+6

回复:“它效率不够”:你有没有调查过这是为什么?因为我认为大部分时间都花在'ffmpeg'本身,在这种情况下,从PHP切换到Bash并不会真正起作用。 – ruakh 2013-03-22 01:28:20

+0

不是很好的建议......但mencoder也有一个视频输出到PNG选项。 – 2013-03-22 01:32:21

回答

0

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

0

你可以试试这个:

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

你应该得到的ffmpeg线做ü想要什么,并用OK效率。与较小的电影文件夹中的脚本把它包...

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之间,这是以秒为单位的时间快照