avconv:将随机命名的图像序列转换为视频

时间:2015-01-28 09:13:09

标签: ffmpeg avconv

我的文件名为alice.pngbob.pngcharlie.png(有数百个),我想制作视频。我尝试的是

 avconv -i alice.png -i bob.png -i charlie.png -r 25 -b:v 12M -y out.mp4

但是我只是在电影中拍摄了第一张图像,其余部分被忽略了。

有很多教程如何使用-i %03d.png和类似的通配符,但有没有办法没有它们,在命令行上传递这些文件? mencodermf://alice.png,bob.png,charlie.png选项,所以我正在寻找类似的东西。

将文件名写入外部文件也可以。

1 个答案:

答案 0 :(得分:0)

为了做到这一点,你需要先生成硬链接,然后再删除它们。没有这种方法,就没有办法做你想做的事。

执行以下操作:

  1. 创建一个临时目录。
  2. 运行ln -t DIR file1 file2 file3 ...
  3. 切换到该目录并运行sequential-rename脚本(见下文)
  4. 改回来,并使用普通的%00d技巧转换这些链接。
  5. 删除临时目录。
  6. <强>逐次重命名

    #!/bin/sh
    # Sequential rename - rename screen shot images sequentially
    #http://www.askdavetaylor.com/sequentially_rename_files_linux_mac_script.html
    
    SAVEIFS=$IFS
    IFS=$(echo -en "\n\b")
    
    if [ $# -ne 1 ] ; then
      echo "Usage: $(basename $0) replacement-pattern-"
      exit 1
    fi
    
    pattern="$1"
    count="1"
    
    for filename in $(ls * | sort)
    do
      if [ $count -eq 1000 ]; then
        eval "rename \"s/^$pattern(\\\\d\\\\d\\\\d)\\\\.jpeg/${pattern}0\\\\1.jpeg/g\" $pattern???.jpeg"
      fi
      if [ $count -eq 100 ]; then
        eval "rename \"s/^$pattern(\\\\d\\\\d)\\\\.jpeg/${pattern}0\\\\1.jpeg/g\" $pattern??.jpeg"
      fi
      if [ $count -eq 10 ]; then
        eval "rename \"s/^$pattern(\\\\d)\\\\.jpeg/${pattern}0\\\\1.jpeg/g\" $pattern?.jpeg"
      fi
      newname="${pattern}${count}.jpeg"
      echo "renaming \"$filename\" to $newname"
      mv "$filename" "$newname"
      count=$(( $count + 1 ))
    done
    
    IFS=$SAVEIFS
    
    exit 0