1

Я пытаюсь создать анимацию из нескольких изображений ("f_01.png", "f_02.png", ..., "f_08.png"), каждый из которых имеет разный сплошной цвет, но всегда выводит видео, полностью сделанное черных рамок

Что именно мне нужно ввести, чтобы заставить это работать? (снова: изображения "f_01.png", "f_02.png", ..., "f_08.png")


Больше фона:

Я прочитал несколько вопросов на SuperUser о создании видео из изображений (и пытаюсь следовать этому: https://superuser.com/a/318412/219755 ... и это: https://superuser.com/a/53778/219755 ... и другой ответ, который я не могу отследить снова), я прочитал раздел справки FFMPEG по созданию видео из файлов изображений (здесь: http://ffmpeg.org/faq.html#How-do-I-encode -single-pictures-into-movies_003f), и я пробовал различные примеры строк командной строки из Интернета, но я не могу заставить FFMPEG вывести что-либо, кроме полностью черного видео.

В случае, если это имеет значение, я проигрываю видео с VLC.

Видеоролики имеют правильную длительность, по крайней мере, большую часть времени (я выбираю 1 кадр / с, и большинство выходных видео имеют правильную продолжительность 8 секунд), но я не вижу ничего из того, что я должен видеть.

Первоначально первый кадр был черным, и я подумал, что FFMPEG может игнорировать другие изображения, но я попытался сделать так, чтобы все кадры были ключевыми (с -g 1 , с -keyint_min 1 и с обоими), и я попытался сделать белое изображение первого кадра, но я все еще получил черные выходные видео.

Вот несколько строк, которые я попытался ввести:

ffmpeg -r 1 -i f_% 02d.png output.mp4
ffmpeg -r 1 -f image2 -i f_% 02d.png output.mp4
ffmpeg -r 1 -f image2 -i f_% 02d.png -g 1 -keyint_min 1 output.mp4

В случае, если это имеет значение, первые две команды дают мне видео, где время воспроизведения составляет всего 6 секунд, а третья дает мне 8-секундное видео.


В соответствии с запросом выходные данные 1-й команды:

G:\FFMPEG>ffmpeg -r 1 -i f_%02d.png output.mp4
ffmpeg version N-55515-gbbbd959 Copyright (c) 2000-2013 the FFmpeg developers
  built on Aug 13 2013 18:01:31 with gcc 4.7.3 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetyp
e --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --ena
ble-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-l
ibopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libsp
eex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-
amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --
enable-libxvid --enable-zlib
  libavutil      52. 42.100 / 52. 42.100
  libavcodec     55. 27.100 / 55. 27.100
  libavformat    55. 13.102 / 55. 13.102
  libavdevice    55.  3.100 / 55.  3.100
  libavfilter     3. 82.100 /  3. 82.100
  libswscale      2.  4.100 /  2.  4.100
  libswresample   0. 17.103 /  0. 17.103
  libpostproc    52.  3.100 / 52.  3.100
Input #0, image2, from 'f_%02d.png':
  Duration: 00:00:00.36, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: png, rgb24, 320x240 [SAR 3779:3779 DAR 4:3], 25 fps, 25
tbr, 25 tbn, 25 tbc
File 'output.mp4' already exists. Overwrite ? [y/N] y
No pixel format specified, yuv444p for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility with outdated media players.
[libx264 @ 003ff8e0] using SAR=1/1
[libx264 @ 003ff8e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 003ff8e0] profile High 4:4:4 Predictive, level 1.2, 4:4:4 8-bit
[libx264 @ 003ff8e0] 264 - core 135 r2345 f0c1c53 - H.264/MPEG-4 AVC codec - Cop
yleft 2003-2013 - 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=4 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 in
terlaced=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 scenecut
=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 'output.mp4':
  Metadata:
    encoder         : Lavf55.13.102
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv444p, 320x24
0 [SAR 1:1 DAR 4:3], q=-1--1, 16384 tbn, 1 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (png -> libx264)
Press [q] to stop, [?] for help
frame=    9 fps=0.0 q=-1.0 Lsize=       2kB time=00:00:07.00 bitrate=   2.3kbits
/s
video:1kB audio:0kB subtitle:0 global headers:0kB muxing overhead 82.314815%
[libx264 @ 003ff8e0] frame I:1     Avg QP: 2.00  size:    91
[libx264 @ 003ff8e0] frame P:5     Avg QP: 1.00  size:    42
[libx264 @ 003ff8e0] frame B:3     Avg QP: 2.00  size:    18
[libx264 @ 003ff8e0] consecutive B-frames: 33.3% 66.7%  0.0%  0.0%
[libx264 @ 003ff8e0] mb I  I16..4: 100.0%  0.0%  0.0%
[libx264 @ 003ff8e0] mb P  I16..4: 19.9%  0.1%  0.0%  P16..4:  0.0%  0.0%  0.0%
 0.0%  0.0%    skip:80.0%
[libx264 @ 003ff8e0] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  0.3%  0.0%  0.0%
 direct: 0.0%  skip:99.7%  L0: 0.0% L1:100.0% BI: 0.0%
[libx264 @ 003ff8e0] 8x8 transform intra:0.2%
[libx264 @ 003ff8e0] coded y,u,v intra: 0.0% 0.0% 0.0% inter: 0.0% 0.0% 0.0%
[libx264 @ 003ff8e0] i16 v,h,dc,p: 93%  0%  7%  0%
[libx264 @ 003ff8e0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu:  0%  0% 100%  0%  0%  0%  0%
  0%  0%
[libx264 @ 003ff8e0] Weighted P-Frames: Y:80.0% UV:0.0%
[libx264 @ 003ff8e0] kb/s:0.31

G:\FFMPEG>

По запросу исходные файлы изображений:

f_01.png и f_02.png (одно и то же изображение дважды)f_01.png и f_02.png
f_03.png и f_04.png (одно и то же изображение дважды)f_03.png и f_04.png
f_05.png и f_06.png (одно и то же изображение дважды)f_05.png и f_06.png
f_07.png и f_08.png (одно и то же изображение дважды)f_07.png и f_08.png

1 ответ1

1

Видео, сгенерированное из ваших файлов, и следующие команды хорошо воспроизводятся в ffplay . Тот, у которого yuv420p выбран в качестве пиксельного формата, также отлично работает в QuickTime.

ffmpeg -r 1 -i f_%02d.png out.mp4
ffmpeg -r 1 -i f_%02d.png -pix_fmt yuv420p out.mp4

Только VLC имеет проблемы с отображением видео (загрузка). Он покажет мне секунду серого, а затем черного, но не в течение 8 секунд.*

Чтобы получить стабильное видео, вы можете попытаться увеличить частоту кадров, так как большинство игроков будут задыхаться от 1 кадра в секунду. Выходной файл будет больше, чем нужно, конечно.

ffmpeg -r 1 -i f_%02d.png -r 25 out.mp4
ffmpeg -r 1 -i f_%02d.png -pix_fmt yuv420p -r 25 out.mp4         <= for older players

Здесь мы сказали читать изображения со скоростью 1 кадр в секунду, но выводить их (дублируя кадры) со скоростью 25.

* Я считаю это ошибкой с VLC. Так как он основан на libavcodec и libavformat (из проекта FFmpeg) и ffplay справляется с файлом, у VLC не должно быть серьезных проблем с ним. Я бы посоветовал вам создать отчет об ошибках в VLC - скорее всего, файл проанализирован неправильно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .