我正在尝试将一组jpg(每5秒拍摄一次的相机屏幕截图)编译为mp4。 ffmpeg命令工作正常,但生成的mp4缺少某些图像。我注意到,当jpg“帧”在jpg序列中从1变为3时,会创建“孔”(请参见以下file
的结果,其中第一个jpg显示frames 1
,而{{1 }}(第二个):
frames 3
然后用$ file 20190110060113.jpg
20190110060113.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 1280x720, frames 1
$ file 20190110060119.jpg
20190110060119.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 1280x720, frames 3
播种:
ffmpeg
下面是我用来从jpg编译mp4的命令:
ffmpeg -i 20190110060113.jpg -i 20190110060119.jpg
ffmpeg version 3.2.10-1~deb9u1~bpo8+1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 4.9.2 (Debian 4.9.2-10)
configuration: --prefix=/usr --extra-version='1~deb9u1~bpo8+1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --disable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
libavutil 55. 34.101 / 55. 34.101
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.101 / 57. 56.101
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libavresample 3. 1. 0 / 3. 1. 0
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
Input #0, image2, from '20190110060113.jpg':
Duration: 00:00:00.04, start: 0.000000, bitrate: 13395 kb/s
Stream #0:0: Video: mjpeg, gray(bt470bg/unknown/unknown), 1280x720 [SAR 1:1 DAR 16:9], 25 tbr, 25 tbn, 25 tbc
Input #1, image2, from '20190110060119.jpg':
Duration: 00:00:00.04, start: 0.000000, bitrate: 21463 kb/s
Stream #1:0: Video: mjpeg, yuvj422p(pc, bt470bg/unknown/unknown), 1280x720 [SAR 1:1 DAR 16:9], 25 tbr, 25 tbn, 25 tbc
At least one output file must be specified
出于好奇,我调查并发现相机实际上有两种模式(白天和黑夜)。夜间拍摄的图像具有ffmpeg -r 25 -f image2 -s 1280x720 -i /data/camipjpg/%*.jpg -vcodec libx264 -crf 25 -pix_fmt yuv420p /data/camipmgpg/20190110.mp4
,而“白天”模式下的图像具有frames 1
。
ffmpeg是否可以处理这种jpg更改以组合这些不同类型的jpg?
以下是输出:
frames 3
提前向您寻求帮助。
答案 0 :(得分:1)
使用-framerate
代替-r
。这是您遇到的主要问题。这是image demuxer的正确选项。 -r
可以用作输出选项,但是如果与图像多路分配器一起代替-framerate
使用,可能会引入奇怪的行为。
最新版本的ffmpeg
不会出现此问题,并且不会向您发送frame changed from...
邮件。开发处于活跃状态,并且您的ffmpeg
很旧,因此无论如何我建议进行更新。 Downloading很简单,但您也可以根据需要compile。
您不需要声明输入宽度x高度,但是如果这样做,则应将-video_size
而不是-s
与图像多路分配器一起使用。不需要-f image2
。您的glob语法略有错误。经过这些调整,您的命令可能如下所示:
ffmpeg -framerate 25 -pattern_type glob -i "/data/camipjpg/*.jpg" -c:v libx264 -crf 25 -vf format=yuv420p -movflags +faststart /data/camipmgpg/20190110.mp4