我正在尝试使用avconv将一堆png转换成视频,png的编号类似于filename_<number>
所以我通常只使用命令:
avconv -r 10 -i filename_%d.png -b:v 1000k test.mp4
我现在想要从文件的一个子集filename_8
制作一个视频 - filename_50
让我们说,所以我已经将这些文件复制到一个新目录并尝试了相同的命令,但现在我得到了错误:
filename_%d.png: No such file or directory
我认为这是因为编号不是从1开始的?
我怎样才能做到这一点?
答案 0 :(得分:29)
avconv -r 10 -start_number 8 -i filename_%d.png -b:v 1000k test.mp4
-start_number
选项需要avconv的最新9.x版本;它不是0.8.x版本。或者,您可以使用最新版本的ffmpeg。或者将文件重命名为以0到4之间的数字开头,因为它会默认检查这些名称。
答案 1 :(得分:7)
您可以使用cat连接文件,然后使用image2pipe demuxer在avconv中读取它们。与cat filename* | avconv -f image2pipe -i - ...
答案 2 :(得分:5)
检查出来;根据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与序列中的/tmp
目录匹配
img001.jpg
,img002.jpg
等等。
x=1;
for i in *jpg;
do counter=$(printf %03d $x);
ln -s "$i" /tmp/img"$counter".jpg;
x=$(($x+1));