如何从文件名为 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

相关内容