FFmpeg giảm khung hình khi mã hóa chuỗi hình ảnh png thành video mp4 x264


16

Tôi đang cố gắng để mã hóa một hình ảnh-chụp liên tục ( frame0001.png, frame0002.png, ..., frame0160.png) vào một video x264 sử dụng lệnh sau:

ffmpeg -i frame%04d.png -sameq -r 24 out.mp4

Sau khi mã hóa, nó nói drop=5và thực sự có những bước nhảy đáng chú ý trong video.

Có vẻ như một người khác cũng gặp vấn đề tương tự, nhưng đối với tôi, câu trả lời được chấp nhận không hữu ích lắm vì tôi không muốn bỏ khung hình nào.

Là một chuyển đổi bị thiếu từ lệnh? Hay tôi đang làm điều gì khác sai?


Chỉnh sửa: Đã thêm đầu ra giao diện điều khiển:

ffmpeg version N-42347-g299387e Copyright (c) 2000-2012 the FFmpeg developers
  built on Jul  8 2012 15:46:39 with gcc 4.7.1
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3
 --disable-w32threads --enable-runtime-cpudetect --enable-avisynth --enable-bzli
b --enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --
enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lam
e --enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger
 --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc
--enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --en
able-libxavs --enable-libxvid --enable-zlib
  libavutil      51. 64.100 / 51. 64.100
  libavcodec     54. 33.100 / 54. 33.100
  libavformat    54. 15.102 / 54. 15.102
  libavdevice    54.  1.100 / 54.  1.100
  libavfilter     3.  1.100 /  3.  1.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, image2, from 'frame%04d.png':
  Duration: 00:00:06.40, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: png, rgb24, 1920x1080, 25 fps, 25 tbr, 25 tbn, 25 tbc
[graph 0 input from stream 0:0 @ 01cd1f60] w:1920 h:1080 pixfmt:rgb24 tb:1/25 fr
:25/1 sar:0/1 sws_param:flags=2
[output stream 0:0 @ 01cd2220] No opaque field provided
[auto-inserted scaler 0 @ 01cd3540] w:1920 h:1080 fmt:rgb24 sar:0/1 -> w:1920 h:
1080 fmt:yuv420p sar:0/1 flags:0x4
[libx264 @ 01cd0dc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64
[libx264 @ 01cd0dc0] profile High, level 4.0
[libx264 @ 01cd0dc0] 264 - core 125 r2200 999b753 - H.264/MPEG-4 AVC codec - Cop
yleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deb
lock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 m
e_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chro
ma_qp_offset=-2 threads=6 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=24 scenec
ut=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         : Lavf54.15.102
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1920x1080, q=-1-
-1, 24 tbn, 24 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (png -> libx264)
Press [q] to stop, [?] for help
frame=    8 fps=0.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=   0.0kbits/s
frame=   15 fps= 15 q=0.0 size=       0kB time=00:00:00.00 bitrate=   0.0kbits/s
frame=   22 fps= 14 q=0.0 size=       0kB time=00:00:00.00 bitrate=   0.0kbits/s
frame=   29 fps= 14 q=0.0 size=       0kB time=00:00:00.00 bitrate=   0.0kbits/s
frame=   36 fps= 14 q=0.0 size=       0kB time=00:00:00.00 bitrate=   0.0kbits/s
frame=   43 fps= 14 q=0.0 size=       0kB time=00:00:00.00 bitrate=   0.0kbits/s
frame=   47 fps= 11 q=0.0 size=       0kB time=00:00:00.00 bitrate=   0.0kbits/s
frame=   53 fps= 11 q=28.0 size=     111kB time=00:00:00.04 bitrate=21735.2kbits
frame=   59 fps= 11 q=28.0 size=     268kB time=00:00:00.29 bitrate=7527.8kbits/
frame=   63 fps= 10 q=28.0 size=     375kB time=00:00:00.45 bitrate=6708.1kbits/
frame=   69 fps= 10 q=28.0 size=     538kB time=00:00:00.70 bitrate=6219.6kbits/
frame=   74 fps= 10 q=28.0 size=     675kB time=00:00:00.91 bitrate=6032.7kbits/
frame=   79 fps= 10 q=28.0 size=     802kB time=00:00:01.12 bitrate=5840.7kbits/
frame=   84 fps= 10 q=28.0 size=     922kB time=00:00:01.33 bitrate=5662.9kbits/
frame=   89 fps=9.9 q=28.0 size=    1060kB time=00:00:01.54 bitrate=5633.3kbits/
frame=   94 fps=9.9 q=28.0 size=    1186kB time=00:00:01.75 bitrate=5551.2kbits/
frame=   98 fps=9.7 q=28.0 size=    1309kB time=00:00:01.91 bitrate=5594.3kbits/
frame=  103 fps=9.7 q=28.0 size=    1436kB time=00:00:02.12 bitrate=5536.4kbits/
frame=  107 fps=9.6 q=28.0 size=    1533kB time=00:00:02.29 bitrate=5481.7kbits/
frame=  112 fps=9.5 q=28.0 size=    1654kB time=00:00:02.50 bitrate=5421.3kbits/
frame=  117 fps=9.4 q=28.0 size=    1781kB time=00:00:02.70 bitrate=5386.9kbits/
frame=  123 fps=9.4 q=28.0 size=    1925kB time=00:00:02.95 bitrate=5331.5kbits/
frame=  128 fps=9.4 q=28.0 size=    2030kB time=00:00:03.16 bitrate=5250.8kbits/
frame=  133 fps=9.4 q=28.0 size=    2210kB time=00:00:03.37 bitrate=5363.8kbits/
frame=  138 fps=9.3 q=28.0 size=    2356kB time=00:00:03.58 bitrate=5386.0kbits/
frame=  142 fps=9.3 q=28.0 size=    2465kB time=00:00:03.75 bitrate=5384.3kbits/
frame=  147 fps=9.3 q=28.0 size=    2602kB time=00:00:03.95 bitrate=5385.0kbits/
frame=  151 fps=9.2 q=28.0 size=    2706kB time=00:00:04.12 bitrate=5374.3kbits/
frame=  155 fps=9.2 q=28.0 size=    2812kB time=00:00:04.29 bitrate=5367.7kbits/
frame=  155 fps=7.0 q=28.0 Lsize=    4129kB time=00:00:06.37 bitrate=5306.4kbits
/s dup=0 drop=5
video:4128kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.035320%
[libx264 @ 01cd0dc0] frame I:2     Avg QP:21.97  size: 79850
[libx264 @ 01cd0dc0] frame P:153   Avg QP:23.43  size: 26579
[libx264 @ 01cd0dc0] mb I  I16..4:  9.6% 70.5% 19.9%
[libx264 @ 01cd0dc0] mb P  I16..4:  7.0% 15.3%  0.7%  P16..4: 45.2%  9.1%  2.2%
 0.0%  0.0%    skip:20.5%
[libx264 @ 01cd0dc0] 8x8 transform intra:66.7% inter:85.7%
[libx264 @ 01cd0dc0] coded y,uvDC,uvAC intra: 38.6% 58.0% 6.0% inter: 16.2% 27.2
% 0.2%
[libx264 @ 01cd0dc0] i16 v,h,dc,p: 35% 29% 17% 19%
[libx264 @ 01cd0dc0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 26% 21% 31%  3%  4%  5%  4%
 4%  3%
[libx264 @ 01cd0dc0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 29% 19% 13%  5%  8%  9%  7%
 6%  4%
[libx264 @ 01cd0dc0] i8c dc,h,v,p: 49% 23% 23%  5%
[libx264 @ 01cd0dc0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 01cd0dc0] ref P L0: 84.5% 10.9%  3.5%  1.1%
[libx264 @ 01cd0dc0] kb/s:5235.14

Trang web này có thông tin về việc làm một bộ phim bằng cách sử dụng hình ảnh liên tiếp Ngoài ra, như một nhận xét về câu hỏi này , sameqkhông phải là một lựa chọn nên được sử dụng
SeanC

Liên kết bạn đã đăng không thực sự cho biết bất cứ điều gì cụ thể - và lệnh của OP sẽ hoạt động trên lý thuyết. Chỉ còn thiếu thông tin từ câu hỏi để có thể trả lời đúng. Bạn hoàn toàn đúng về sameqmặc dù.
slhck

Câu trả lời:


24

Vấn đề được giải quyết.

Bằng cách nhìn vào đầu ra của bàn điều khiển, có vẻ như tốc độ khung hình mặc định của chuỗi đầu vào là 25 khung hình / giây:

Input #0, image2, from 'frame%04d.png':
  Duration: 00:00:06.40, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: png, rgb24, 1920x1080, 25 fps, 25 tbr, 25 tbn, 25 tbc

Từ tài liệu :

Để buộc tốc độ khung hình của tệp đầu vào (chỉ hợp lệ cho các định dạng thô) thành 1 khung hình / giây và tốc độ khung hình của tệp đầu ra là 24 khung hình / giây:

ffmpeg -r 1 -i input.m2v -r 24 output.avi

Vì vậy, tất cả những gì tôi cần làm chỉ là thêm một thứ khác -r 24:

ffmpeg-r 24-i frame%04d.png -r 24 out.mp4


3
Tôi đã xé tóc ra khi cố lấy chuỗi hình ảnh để mã hóa ở tốc độ 24 khung hình / giây, bởi vì ngay cả với cờ -r 24 trước cờ -i, nó vẫn báo cáo chuỗi đầu vào là có 25 tbr, 25 tbn, 25 tbc (ffmpeg speak cho tốc độ khung hình 25 khung hình / giây). Nhưng nó thực sự đang diễn giải luồng là 24 khung hình / giây, mà không giảm khung hình.
stib

8

Một nguyên nhân khác khiến khung hình bị giảm là .png có định dạng khác nhau. Ví dụ: .png được tạo từ convertlệnh của ImageMagick thường là "màu RGB", nhưng những màu có ít hơn 256 màu được âm thầm tối ưu hóa thành "colormap" hoặc bảng màu, để giảm kích thước tệp. Khi ffmpeg gặp thay đổi từ cái này sang cái khác, nó bắt đầu thả khung:

Input stream #0:0 frame changed from size:1280x720 fmt:rgb24 to size:1280x720 fmt:pal8
Input stream #0:0 frame changed from size:1280x720 fmt:pal8 to size:1280x720 fmt:rgb24

Để tránh làm rơi các khung như vậy , convert -define png:color-type=2.


Tôi không có hành vi này. Không có khung hình nào bị giảm với ba thay đổi ngữ cảnh (chỉ có định dạng pixel).
Gyan

Có lẽ ffmpeg đã khắc phục vấn đề này đôi khi trong hai năm qua. ( fmt:
Ffmpeg

Công tắc tương tự: từ RGB24 sang PAL8 trở lại.
Gyan

@CamilleGoudeseune Cảm ơn bạn đã trả lời, tuy nhiên, tôi đã khắc phục sự cố. Đó là một số vấn đề nối vì định dạng / độ phân giải hình ảnh khác nhau.
Kẻ giết người

2

Câu trả lời khác là sai, lệnh đúng là:

ffmpeg-khung hình 24 khung hình% 04d.png out.mp4

Tùy chọn -framerator dành riêng cho đầu vào image2 'chuỗi hình ảnh', chỉ định tốc độ khung hình gốc của chuỗi hình ảnh. Xem: https://www.ffmpeg.org/ffmpeg-formats.html#image2-1

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.