FFmpeg supprime des images lors de l'encodage d'une séquence d'images png dans une vidéo x264 mp4


16

Je suis en train de coder une séquence d'images ( frame0001.png, frame0002.png, ..., frame0160.png) dans une vidéo x264 en utilisant la commande suivante:

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

Après l'encodage, il est dit drop=5et en effet il y a des "sauts" notables dans la vidéo.

Il semble que quelqu'un d'autre ait eu un problème similaire, mais pour moi, la réponse acceptée n'est pas très utile car je voudrais qu'aucune image ne soit supprimée.

Un commutateur manque-t-il dans la commande? Ou est-ce que je fais autre chose de mal?


Edit: Ajout de la sortie console:

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

Ce site contient des informations sur la réalisation d'un film à l'aide d'images séquentielles. En outre, en tant que commentaire sur cette question , ce sameqn'est pas une option qui devrait être utilisée
SeanC

Le lien que vous avez publié ne dit rien de spécifique - et la commande du PO devrait fonctionner en théorie. Il ne manque que des informations dans la question pour pouvoir y répondre correctement. sameqMais vous avez tout à fait raison .
slhck

Réponses:


24

Problème résolu.

En regardant la sortie de la console, il semble que la fréquence d'images par défaut de la séquence d'entrée soit de 25 ips:

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

De la documentation :

Pour forcer la fréquence d'images du fichier d'entrée (valable pour les formats bruts uniquement) à 1 ips et la fréquence d'images du fichier de sortie à 24 ips:

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

Donc, tout ce que j'avais à faire était d'en ajouter un autre -r 24:

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


3
J'arrachais mes cheveux en essayant d'obtenir une séquence d'images à encoder à 24 ips, car même avec le drapeau -r 24 avant le drapeau -i, il signale toujours que la séquence d'entrée a 25 tbr, 25 tbn, 25 tbc (ffmpeg speak pour une cadence de 25 ips). Mais il s'agit en fait d'interpréter le flux comme 24 images par seconde, sans perdre d'images.
stib

8

Une autre cause de perte d'images est le .png dont le format varie. Par exemple, les fichiers .png créés à partir de la convertcommande d'ImageMagick sont normalement "couleur RVB", mais ceux avec moins de 256 couleurs sont optimisés en silence dans "palette de couleurs" ou palette, pour réduire la taille du fichier. Lorsque ffmpeg rencontre un changement de l'un à l'autre, il commence à supprimer des trames:

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

Pour éviter de laisser tomber ces cadres, convert -define png:color-type=2.


Je ne comprends pas ce comportement. Aucune image n'a été supprimée avec trois changements de contexte (uniquement au format pixel).
Gyan

Peut-être que ffmpeg a résolu ce problème au cours des deux dernières années. (Que fmt:dit votre ffmpeg en train de lire?)
Camille Goudeseune

Le même interrupteur: de RGB24 à PAL8 et inversement.
Gyan

@CamilleGoudeseune Merci pour la réponse, cependant, j'ai résolu le problème. C'était un problème de concaténation en raison du format / résolution d'image différent.
Killer

2

L'autre réponse est fausse, la commande correcte est:

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

L'option -framerate est spécifique à l'entrée 'image sequence' de l'image2, spécifiant la fréquence d'images native de la séquence d'images. Voir: https://www.ffmpeg.org/ffmpeg-formats.html#image2-1

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.