使用 ffmpeg 将图像转换为视频
Posted
技术标签:
【中文标题】使用 ffmpeg 将图像转换为视频【英文标题】:Turning images into videos with ffmpeg 【发布时间】:2014-03-02 09:58:33 【问题描述】:我在另一个论坛上问过这个问题,但从来没有运气。我在网上找到了以下命令,该命令应该使用 FFmpeg 从图像(每个持续时间为 5 秒)创建视频。
ffmpeg -f image2 -r 1/5 -i img%03d.png -vcodec libx264 out.mp4
我已经运行了它,并且我有两个名为 img001.png 和 img002.png 的图像,但是当我播放 out.mp4 时,它只有 5 秒的剪辑,并且正在播放 img001.png。真正奇怪的是,在我的 Windows Media Player 中,它认为它有 10 秒长(2 张图像 @ 10 秒),但是当仪表到达视频的一半(5 秒)时,它就结束了。
对可能发生的事情有什么建议吗?
我还尝试了一些我在网上找到的其他命令,但都没有成功。他们最终会显示两张图片,但第一张只会闪烁几分之一秒,或者其他一些人会在视频结束时对第二张图片做同样的事情。
我已将 ImageMagick 安装到我的 Windows Vista PC 上的 XAMPP 中。如果需要,我可以提供命令的命令行输出。
编辑:添加命令行输出
C:\xampp\htdocs>ffmpeg -f image2 -r 1/5 -i img%03d.png -vcodec libx264 out.mp4
ffmpeg version N-50911-g9efcfbe Copyright (c) 2000-2013 the FFmpeg developers
built on Mar 13 2013 21:26:48 with gcc 4.7.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libg
sm --enable-libilbc --enable-libmp3lame --enable-libopencore-amrnb --enable-libo
pencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-li
bschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-lib
twolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enabl
e-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 52. 19.100 / 52. 19.100
libavcodec 55. 0.100 / 55. 0.100
libavformat 55. 0.100 / 55. 0.100
libavdevice 54. 4.100 / 54. 4.100
libavfilter 3. 45.103 / 3. 45.103
libswscale 2. 2.100 / 2. 2.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
Input #0, image2, from 'img%03d.png':
Duration: 00:00:10.00, start: 0.000000, bitrate: N/A
Stream #0:0: Video: png, rgb24, 800x600 [SAR 1:1 DAR 4:3], 0.20 tbr, 0.20 tb
n, 0.20 tbc
[libx264 @ 0032cae0] using SAR=1/1
[libx264 @ 0032cae0] using cpu capabilities: MMX2 SSE2Slow SlowCTZ
[libx264 @ 0032cae0] profile High 4:4:4 Predictive, level 3.1, 4:4:4 8-bit
[libx264 @ 0032cae0] 264 - core 130 r2274 c832fe9 - H.264/MPEG-4 AVC codec - Cop
yright 2003-2013 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 de
block=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1
me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chr
oma_qp_offset=4 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 i
nterlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1
b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=1 scenecu
t=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0
qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'out.mp4':
Metadata:
encoder : Lavf55.0.100
Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv444p, 800x600 [SAR 1:1
DAR 4:3], q=-1--1, 16384 tbn, 0.20 tbc
Stream mapping:
Stream #0:0 -> #0:0 (png -> libx264)
Press [q] to stop, [?] for help
frame= 2 fps=0.0 q=2621023.0 Lsize= 37kB time=00:00:10.00 bitrate= 30.0
kbits/s
video:36kB audio:0kB subtitle:0 global headers:0kB muxing overhead 2.142993%
[libx264 @ 0032cae0] frame I:1 Avg QP:11.18 size: 17627
[libx264 @ 0032cae0] frame P:1 Avg QP:11.45 size: 18415
[libx264 @ 0032cae0] mb I I16..4: 18.3% 69.5% 12.3%
[libx264 @ 0032cae0] mb P I16..4: 11.6% 60.1% 9.7% P16..4: 8.9% 6.6% 2.2%
0.0% 0.0% skip: 0.8%
[libx264 @ 0032cae0] 8x8 transform intra:71.4% inter:67.1%
[libx264 @ 0032cae0] coded y,u,v intra: 57.0% 24.1% 22.3% inter: 42.6% 25.7% 16.
4%
[libx264 @ 0032cae0] i16 v,h,dc,p: 28% 50% 15% 8%
[libx264 @ 0032cae0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 39% 28% 2% 2% 2% 3%
3% 4%
[libx264 @ 0032cae0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14% 53% 23% 1% 2% 2% 3%
0% 2%
[libx264 @ 0032cae0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0032cae0] kb/s:28.83
C:\xampp\htdocs>
【问题讨论】:
@LordNeckbeard 如果您在 ffmpeg 控制台输出中所指的内容,我已经添加了命令行输出。另外,我确实计划将它与 php 和 exec() 一起使用。但是我从来不知道FFMpeg不能在这个网站上使用?看起来有很多其他人在使用它。 参见,例如***.com/questions/7468274/… @fredrilPhil 我试过了,但它说“帧大小无效:WxH”。当我删除大小时,它只会创建一个快速显示两帧的 0 秒视频。知道如何为每张图片添加长度吗?我将 -r 1/5 添加到您链接到的相同语法的开头,它仅在 5 秒时播放第一张图像,并在最后闪烁第二张图像。 您是否真的将“W”和“H”替换为“1920”和“1080”等全高清值?frame= 2
似乎怀疑文件都排好了吗?
【参考方案1】:
我认为你唯一的问题是你没有告诉 ffmpeg 使用什么输出格式。
试试ffmpeg -f image2 -r 1/5 -i img%03d.png -vcodec libx264 -pix_fmt yuv420p out.mp4
还请记住,图像必须具有相同的大小。如果不是,您需要将它们预处理为相同的大小。
祝你好运
【讨论】:
以上是关于使用 ffmpeg 将图像转换为视频的主要内容,如果未能解决你的问题,请参考以下文章
将屏幕截图捕获为图像然后使用 ffmpeg 将图像转换为视频文件的时间应该是啥?