【问题标题】:Bash script to generate thumbnail for all video files in directory用于为目录中的所有视频文件生成缩略图的 Bash 脚本
【发布时间】:2015-03-17 19:35:49
【问题描述】:

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

我的视频文件在目录 /videos 缩略图位于目录 /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");

有人愿意帮助我吗?

【问题讨论】:

  • 回复:“效率不够”:你调查过这是为什么吗?因为我假设大部分时间都花在ffmpeg 本身上,在这种情况下,从 PHP 切换到 Bash 并不会真正产生影响。
  • 不是很好的建议...但是 mencoder 也有一个视频输出到 png 选项。

标签: linux bash ffmpeg


【解决方案1】:

你可以试试这个:

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

你应该让 ffmpeg 行做你想做的事,而且效率还可以。用较小的电影文件夹将其包装在脚本中......

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-02-19
        • 2018-10-29
        • 1970-01-01
        • 2017-10-14
        • 2013-01-17
        • 2012-09-01
        • 2018-10-19
        • 2012-05-31
        • 1970-01-01
        相关资源
        最近更新 更多