我有64个图像序列,我想用这些图像制作视频。
您可以下载图片here
我在ubuntu中使用ffmpeg。 这是我的命令
ffmpeg -r 60 -f image2 -s 1360x768 -i "/home/roylisto/Documents/Tugas Akhir/JAva version/UAVSystem/UAVSystem/tmp/result%d.png" -vcodec libx264 -crf 20 "/home/roylisto/Documents/Tugas Akhir/JAva version/UAVSystem/UAVSystem/render/test.mp4"
它有效,但视频只生成了39张图像。我的问题是为什么ffmpeg不会将该文件夹中的所有图像渲染成视频,我的错误是什么以及如何解决?
输出命令:
ffmpeg version 2.2.git-73d820e Copyright (c) 2000-2014 the FFmpeg developers
built on Jun 16 2014 10:08:12 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-x11grab --enable-libpulse --enable-libx264 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr
libavutil 52. 89.100 / 52. 89.100
libavcodec 55. 66.101 / 55. 66.101
libavformat 55. 43.100 / 55. 43.100
libavdevice 55. 13.101 / 55. 13.101
libavfilter 4. 8.100 / 4. 8.100
libavresample 1. 3. 0 / 1. 3. 0
libswscale 2. 6.100 / 2. 6.100
libswresample 0. 19.100 / 0. 19.100
libpostproc 52. 3.100 / 52. 3.100
Input #0, image2, from '/home/roylisto/Documents/Tugas Akhir/JAva version/UAVSystem/UAVSystem/tmp/result%d.png':
Duration: 00:00:00.62, start: 0.000000, bitrate: N/A
Stream #0:0: Video: png, rgb24, 320x240, 60 fps, 60 tbr, 60 tbn, 60 tbc
No pixel format specified, yuv444p for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility with outdated media players.
[libx264 @ 0x2bccce0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.1 Cache64
[libx264 @ 0x2bccce0] profile High 4:4:4 Predictive, level 2.1, 4:4:4 8-bit
[libx264 @ 0x2bccce0] 264 - core 142 r2431 ac76440 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=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 chroma_qp_offset=4 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=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=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=20.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to '/home/roylisto/Documents/Tugas Akhir/JAva version/UAVSystem/UAVSystem/render/test.mp4':
Metadata:
encoder : Lavf55.43.100
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv444p, 320x240, q=-1--1, 60 fps, 15360 tbn, 60 tbc
Metadata:
encoder : Lavc55.66.101 libx264
Stream mapping:
Stream #0:0 -> #0:0 (png (native) -> h264 (libx264))
Press [q] to stop, [?] for help
Input stream #0:0 frame changed from size:320x240 fmt:rgb24 to size:480x360 fmt:rgb24
frame= 35 fps=0.0 q=-1.0 Lsize= 18kB time=00:00:00.55 bitrate= 264.7kbits/s dup=0 drop=2
video:17kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 7.355630%
[libx264 @ 0x2bccce0] frame I:1 Avg QP:14.45 size: 1829
[libx264 @ 0x2bccce0] frame P:12 Avg QP:20.02 size: 908
[libx264 @ 0x2bccce0] frame B:22 Avg QP:24.15 size: 161
[libx264 @ 0x2bccce0] consecutive B-frames: 14.3% 5.7% 0.0% 80.0%
[libx264 @ 0x2bccce0] mb I I16..4: 3.3% 84.3% 12.3%
[libx264 @ 0x2bccce0] mb P I16..4: 0.6% 2.9% 1.9% P16..4: 7.6% 6.0% 2.8% 0.0% 0.0% skip:78.3%
[libx264 @ 0x2bccce0] mb B I16..4: 0.0% 0.1% 0.0% B16..8: 10.1% 3.2% 0.5% direct: 0.3% skip:85.8% L0:36.3% L1:56.4% BI: 7.3%
[libx264 @ 0x2bccce0] 8x8 transform intra:72.3% inter:49.0%
[libx264 @ 0x2bccce0] coded y,u,v intra: 34.4% 16.0% 10.7% inter: 3.6% 0.5% 0.3%
[libx264 @ 0x2bccce0] i16 v,h,dc,p: 76% 21% 3% 0%
[libx264 @ 0x2bccce0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14% 22% 50% 2% 2% 1% 5% 2% 3%
[libx264 @ 0x2bccce0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 7% 30% 32% 2% 8% 3% 11% 3% 5%
[libx264 @ 0x2bccce0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x2bccce0] ref P L0: 64.9% 22.6% 9.7% 2.8%
[libx264 @ 0x2bccce0] ref B L0: 86.1% 12.2% 1.7%
[libx264 @ 0x2bccce0] ref B L1: 94.3% 5.7%
[libx264 @ 0x2bccce0] kb/s:223.06
答案 0 :(得分:2)
在这看到差异?
$ gm identify tmp/result38.png
tmp/result38.png PNG 480x360+0+0 DirectClass 8-bit 77.3K 0.000u 0:01
$ gm identify tmp/result39.png
tmp/result39.png PNG 640x480+0+0 DirectClass 8-bit 78.3K 0.000u 0:01
ffmpeg要求您的图片具有完全相同的尺寸。
要解决问题,请安装imagemagick(或者imagemagick,我更喜欢这个问题)
并写:
# graphicsmagick
gm mogrify -size 480x360 tmp/*.png
# imagemagick
mogrify -size 480x360 tmp/*.png
无论如何,你的ffmpeg命令可能会更强大。 (事实上,你过早地调用了重新缩放。)这是我的ffmpeg推荐给你:
ffmpeg -threads 0 -loglevel error -y -ar 48000 -ac 2 -f s16le -i /dev/zero \
-r 25/1 -f image2 -i "tmp/result%2d.png" -start_number 1 \
-c:a libfdk_aac -c:v libx264 -vf "fps=fps=25,format=pix_fmts=yuv420p" \
-s 1360x768 -crf 20 -shortest -vframes 64 "tmp/test.mp4"
以下是细分:
您的h264文件中应该有一个音频轨道,因为否则某些设备(例如手臂)上的某些同步方法可能无法正常工作,并且您的播放速率将会被删除。
我不确定这是不是一个老习惯,但我总是把-r 25/1用于-f图像。也许这只是一个人必须做的事情,但不再需要......
你可能不应该以0的文件编号开头,我总是喜欢使用填充数字。 (%2d = 01,02,03,04,05,06,07,08,09,10 ...)Linux通常是正确的,但其他操作系统可能会破坏文件夹列表中的序列。如果你"可以"#34;重命名result0.png文件,你可以尝试添加" -start_number 0"旗帜
在-vf组中明确指定播放速度是个好主意。
如果你不将像素编码切换到yuv420p,那么大多数非linux系统都不会 播放文件。
" -shortest"当任何流已经到达终点时,flag将结束转码...
" -vframes 64" flag将正好编码64帧然后退出 - 除非它不能编码那么多帧然后它将永远挂起......(这实际上是我对你的问题的线索。)
最后,你过早地调用了redimensioning,因此视频没有缩放。 (-s 1360x768)