12

我试图从一个充满 jpeg 帧的目录中制作视频(无论格式如何)。

我尝试使用 avconv (v0.8),正如互联网上的许多主题所见,以及 libav 文档:

avconv -i samples/*.jpeg output.mpeg

它似乎运行良好并创建了 output.mpeg 文件。

但是任何阅读器(vlc、banshee、totem、...)都无法读取该文件。没有错误,但是当我按下播放时没有任何反应。

如果我检查视频文件大小,它大约是 20kB,而原始视频是 10MB。所以我们可以假设数据没有被存储到文件中(不管输入的帧数如何,它大约是 20kB)

我做了一个处理调试日志的pastebin。我不熟悉编解码器世界,所以我不懂很多东西: http: //pastebin.com/9dfxFWZe

我还尝试了很多与 -s、-r、-b、-vcodec、-f 格式等的组合。但问题仍然存在。

我做错什么了吗?

问我有什么可以帮助你的,我会很快回答的。

谢谢您的帮助 :)

4

3 回答 3

10

avconv 希望您以类似 printf 的语法给出输入文件名。仅使用 shell 通配符(例如 samles/*.jpeg)是不够的。

您的样本似乎被命名为 sample/lapinsnipermin/.jpeg,因此请尝试以下命令行:

avconv -f image2 -i samples/lapinsnipermin/%03d.jpeg output.mpeg

这行得通吗?您可能还想为比特率添加选项(例如 -r 25)。

于 2012-07-22T11:23:53.763 回答
5

我发现最好将 jpg 文件通过管道传输到您想要的位置,这样您就可以使用标准通配符控制选择,试试这样的方法。这也会输出一个视频,您可以在网络和移动设备上使用(即使用标准浏览器标签):

cat samples/*.jpeg | avconv -r 30 -f image2pipe -codec:v mjpeg -i - -pix_fmt yuvj420p -r 30 -c:v libx264 -vf scale=480:300 -y output.mp4
于 2015-01-17T23:59:28.010 回答
5

复活这个,因为它在谷歌搜索解决方案时出现。我终于让它工作了:

knoppix@Microknoppix:~$ avconv -r 1 -i /tmp/photo%d.jpg -r 24 -s 320x240 -vsync cfr /tmp/video.mpg

我无法让 avconv 识别原始名称中的输入文件;这说明了原因:

knoppix@Microknoppix:~$ strace avconv -i /media/sdb1/DCIM/188_0408/IMGP%04d.JPG /tmp/video.mpg 2>&1 | grep 188_0408
execve("/usr/bin/avconv", ["avconv", "-i", "/media/sdb1/DCIM/188_0408/IMGP%0"..., "/tmp/video.mpg"], [/* 36 vars */]) = 0
stat64("/media/sdb1/DCIM/188_0408/IMGP0000.JPG", 0xbf925b00) = -1 ENOENT (No such file or directory)
stat64("/media/sdb1/DCIM/188_0408/IMGP0001.JPG", 0xbf925b00) = -1 ENOENT (No such file or directory)
stat64("/media/sdb1/DCIM/188_0408/IMGP0002.JPG", 0xbf925b00) = -1 ENOENT (No such file or directory)
stat64("/media/sdb1/DCIM/188_0408/IMGP0003.JPG", 0xbf925b00) = -1 ENOENT (No such file or directory)
stat64("/media/sdb1/DCIM/188_0408/IMGP0004.JPG", 0xbf925b00) = -1 ENOENT (No such file or directory)
write(2, "/media/sdb1/DCIM/188_0408/IMGP%0"..., 66/media/sdb1/DCIM/188_0408/IMGP%04d.JPG: No such file or directory

我没有看到设置起始编号的选项,所以我这样做了:

i=0; for file in /media/sdb1/DCIM/188_0408/IMGP28*.JPG; do cp $file /tmp/photo$i.jpg; i=$((i+1)); done

最终结果是我的照片的视频,每秒显示一个;-vsync cfr告诉 avconv 填充输入帧以匹配输出帧率。

于 2013-04-14T00:35:29.240 回答