web-dev-qa-db-ja.com

ファイル名が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そして、ファイル名を変更せずにビデオを作成する機会があるのだろうか。

そうでない場合-トリックを行う別のツールを知っていますか?

2
DaHopi

ファイルセレクターに起因するエラーについては、あなたは正しいと思います。マニュアルの引用:

      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
1