FFMpeg将jpeg图像转换为视频

克涅蒂奇

我正在尝试拍摄以1秒为间隔拍摄的一组图像,以形成延时视频。我认为使用ffmpeg会很容易,但是我遇到了隐秘的错误。

所有图像均为yuv420 jpegs,取自android相机。它们被保存为单独的jpeg文件,并具有相同的大小和格式。它们以7位数字的名称序列开头,从零开始(例如,从“ 0000000.jpg”到“ 0001000.jpg”)。

这是我的字符串(为清楚起见,已删除文件夹名称):

avconv -r 1 -f image2 -i %07d.jpg -vcodec libx264 -crf 18 -preset slower video.mp4

似乎很棒,我看到很多人说对他们有用的帖子。

但是ffmpeg给我这个(粗体表示错误)

ffmpeg版本0.8.5-6:0.8.5-1,版权所有(c)2000-2012 Libav开发人员
  建于2013年1月13日12:05:48使用gcc 4.7.2
***此程序已弃用***
仅出于兼容性目的提供该程序,并且在以后的版本中将其删除。请改用avconv。
[mjpeg @ 0x233aea0]已覆盖8
输入来自'%07d.jpg'的#0 image2:
  时长:00:00:00.04,开始:0.000000,比特率:N / A
    流#0.0:视频:mjpeg,yuvj420p,640x480 [PAR 1:1 DAR 4:3],25 tbr,25 tbn,25 tbc
文件“ video.mp4”已存在。覆盖?[y / N] y
[缓冲区@ 0x233b340] w:640 h:480 pixfmt:yuvj420p
[libx264 @ 0x2339fa0]使用SAR = 1/1
[libx264 @ 0x2339fa0]使用cpu功能:MMX2 SSE2Fast FastShuffle SSEMisalign LZCNT
[libx264 @ 0x2339fa0]配置文件主要,级别3.1
[libx264 @ 0x2339fa0] 264-核心123 r2189 35cf912-H.264 / MPEG-4 AVC编解码器-Copyleft 2003-2012-http://www.videolan.org/x264.html-选项:cabac = 1 ref = 8解块= 1:0:0分析= 0x1:0x131 me =嗯subme = 9 psy = 1 psy_rd = 1.00:0.00 mixed_ref = 0 me_range = 16 chroma_me = 1网格= 2 8x8dct = 0 cqm = 0死区= 21,11 fast_pskip = 1 chroma_qp_offset = -2线程= 1 sliced_threads = 0 nr = 0抽取= 1隔行扫描= 0 bluray_compat = 0 constrained_intra = 0 bframes = 3 b_pyramid = 0 b_adapt = 2 b_bias = 0 direct = 3 weightb = 0 open_gop = 1 weightp = 2 keyint = 250 keyint_min = 25 scenecut = 40 intra_refresh = 0 rc_lookahead = 60 rc = crf mbtree = 1 crf = 18.0 qcomp = 0.60 qpmin = 0 qpmax = 69 qpstep = 4 ip_ratio = 1.25 aq = 1:1.00
输出#0,mp4到“ video.mp4”:
  元数据:
    编码器:Lavf53.21.1
    流#0.0:视频:libx264,yuvj420p,640x480 [PAR 1:1 DAR 4:3],q = -1--1、25 tbn,25 tbc
流映射:
  流#0.0->#0.0
按ctrl-c停止编码
[mjpeg @ 0x233aea0]已覆盖8
帧= 0 fps = 0 q = 0.0 Lsize = 0kB时间= 10000000000.00比特率= 0.0kbits / s    
视频:0kB音频:0kB全局标头:0kB混合开销610.000000%

导入行(显示为红色)是说“ [mjpeg @ 0x233aea0]读过8 ”的行。

这使我认为也许是它试图将图像读取为运动jpeg而不是纯jpeg文件,并且由于某种原因失败了。我尝试过使用/不使用“ -f image2”,结果相同。而且我也尝试使用av​​conv,结果相同。

我应该注意图像是有效的,如果我将它们全部转换为* .png(一个昂贵且耗时的过程),那么整个过程就可以了。但是我宁愿只使用jpeg,而无需进行中间转换。毕竟,这就是ffmpeg的目的,就是进行转码。

有没有人有使用ffmpeg将* .jpg转换为视频的好方法?

slhck

[mjpeg @ 0x233aea0] overread 8ffmpeg尝试逐块读取JPEG图像(或MJPEG流中的帧)时抛出的错误,但仍有剩余位。

在这种情况下,即使您的图像在其他查看器中可能无法正常显示,这也是FFmpeg无法(或不会)处理的。要解决此问题,您需要将图像重新保存为以前尝试的PNG或JPEG。您可以使用ImageMagick进行这种批量转换,例如:

for f in *.JPG; do mogrify "$f"; done

这将以相同的名称重新保存JPEG文件。请注意,您将在此过程中失去质量,所以这不是理想的选择,我会选择PNG作为中间产物,因为它们是无损的。

顺便说一句:使用最新版本的FFmpeg始终是一个好主意,您可以下载为静态版本(只需下载,提取,使用)或自己编译Ubuntu随附的软件包总是过时的,并且-取决于您的Ubuntu版本-甚至不是“真正的” FFmpeg,而是Libav分支(可以使用,但应该知道其中的区别)。

当您使用的%07d.jpg语法时,请不要忘记图像需要具有顺序名称ffmpeg,而不会遗漏数字。有关更多选项,另请参见复用器的文档image2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章