我试图用avconv制作一堆png到video中,png的编号就像filename_<number>
所以我通常只使用这个命令:
avconv -r 10 -i filename_%d.png -b:v 1000k test.mp4
我现在想从文件的一个子集创buildvideofilename_8
– filename_50
可以说,所以我已经复制这些文件到一个新的目录,并尝试相同的命令,但现在我得到的错误:
filename_%d.png: No such file or directory
我认为这是因为编号不是从1开始的?
我怎样才能做到这一点?
avconv -r 10 -start_number 8 -i filename_%d.png -b:v 1000k test.mp4
您将需要最新的9.x版本的avconv作为-start_number
选项; 它不是在版本0.8.x. 或者,您可以使用最新版本的ffmpeg 。 或者将文件重命名为0到4之间的数字,因为默认情况下它会检查这些名称。
您可以将文件与cat连接起来,然后使用image2pipe demuxer在avconv中读取它们。 像cat filename* | avconv -f image2pipe -i - ...
cat filename* | avconv -f image2pipe -i - ...
看一下这个; 根据ffmpeg这是他们如何做,它的工作原理
img1.jpg, img2.jpg, img3.jpg, ...
那么你可以运行:
ffmpeg -f image2 -i img%d.jpg /tmp/a.mpg
请注意, %d
被替换为图片编号。
img%03d.jpg
表示序列img001.jpg
, img002.jpg
等
使用'-start_number'选项来声明序列的起始号码。 如果你的序列不是以img001.jpg
开始的,但是仍然是按照数字顺序的话,这很有用。 以下示例将从img100.jpg
开始:
ffmpeg -f image2 -start_number 100 -i img%d.jpg /tmp/a.mpg
如果您有大量图片需要重命名,您可以使用以下命令来减轻负担。 该命令使用bourne shell语法以符号方式将当前目录中匹配* jpg的所有文件以img001.jpg
, img002.jpg
等顺序链接到/tmp
目录。
x=1; for i in *jpg; do counter=$(printf %03d $x); ln -s "$i" /tmp/img"$counter".jpg; x=$(($x+1));