ファイル名が yyyy-MM-dd:HH:mm:ss の画像からビデオを作成する方法

ファイル名が yyyy-MM-dd:HH:mm:ss の画像からビデオを作成する方法

画像が多数あり (>11,000)、avconv を使用してタイムラプスとしてビデオを作成したいと考えています。ffmpeg を使用して、次の操作を実行しました。

ffmpeg -r 25 -i "/mnt/stora/dahopi/Pictures/Gartencam/%*.jpg" \
       -vf scale=800:600 -c:v mpeg4 -vtag xvid -qscale:v \
       10 gartencam.avi

しかし、avconv ではこれは機能しません。問題はファイル セレクタにあると思います%*.jpgが、ファイル名を変更せずにビデオを作成できるかどうか疑問に思っています。

そうでない場合、その目的を達成するための別のツールをご存知ですか?

答え1

残念ながら、エラーの原因がファイル セレクタにあるというのは正しいようです。マニュアルを引用します:

      For creating a video from many images:

              avconv -f image2 -i foo-%03d.jpeg -r 12 -s WxH foo.avi

      The syntax "foo-%03d.jpeg" specifies to use a decimal number composed of
      three digits padded with zeroes to express the sequence number. It is the
      same syntax supported by the C printf function, but only formats accepting a
      normal integer are suitable.

必要に応じて、0 より大きい整数から開始することもできます。

  -start_number start
  Specify the first number in the sequence

実際に名前を変更する必要はありません。lnコマンドを使用してシンボリック リンクを作成すると、ディスク上のスペースをほとんど占有しません。

スクリプトを試す前に、写真のバックアップを取ることをお勧めします。

次の bash スクリプトを使用してみてください:

#! /bin/bash
INPUTDIR="$1"
OUPUTDIR="$2"

SORTEDLIST="$(cd "$INPUTDIR" && ls -1 | sort -n)"

COUNT="$(echo -e "$SORTEDLIST"|wc -l)"
echo "Found $COUNT files"

ZEROES="$(echo -e "$COUNT"|wc -c)" # (will count \n)
echo "Using $ZEROES characters to display integers"

COUNTER="0"
for file in $SORTEDLIST; do
    ID="$(printf "%0${ZEROES}d" "$COUNTER")"

    echo "ln -s $INPUTDIR/$file $OUPUTDIR/$ID.jpg"
    ln -s "$INPUTDIR/$file" "$OUPUTDIR/$ID.jpg"

    COUNTER=$((COUNTER + 1))
done

このスクリプトでは、すべての画像が、ビデオに含める画像のみを含むディレクトリ内に配置されていることを前提としています。使用するには、次の手順を実行します。

  • リンクを格納する出力ディレクトリを作成します。mkdir output
  • 実行する./script.sh nameofthefoldercontainingyourimages output

関連情報