繁体   English   中英

与在处理过程中播放的动画相比,最终渲染的视频加快了速度

[英]Final Rendered Video is Sped Up Compared to Animation Played in Processing

最近,我在处理中制作了一个音频可视化器。 从那里,我想将在Processing中创建的动画渲染为mp4文件。 我在Windows计算机上,正在使用ffmpeg将在Processing中生成的TIF文件转换为mp4。

当我这样做时,我可以将图像渲染成mp4文件,但是当我回放该文件时,与在“处理”中播放动画时相比,动画会加速。 因此,当我在视频编辑程序上组合mp4文件和音频时,动画不会与音频同步。

当我将帧速率设置为25并将帧数限制为250并将其渲染为mp4文件时,它的长度应为10秒,但是与相比,它包含的动画时间超过10秒动画直接在处理中播放。

我不知道为什么会这样,所以任何帮助将不胜感激。

我的处理代码:

import ddf.minim.*;
import ddf.minim.analysis.*;

Minim minim;
AudioPlayer player;
PImage img;
FFT fft;

void setup() {
  size(728, 546);

  minim = new Minim(this);

  // this loads mysong.wav from the data folder as a stream with a internal buffer of size 1024
  player = minim.loadFile("new_years_good.mp3");
  fft = new FFT(player.bufferSize(), player.sampleRate());
  player.play();
  img= loadImage("cat-in-shades-.jpg");
  frameRate(25);
}

void draw() {


  image(img, 0, 0);
  //tint(0, 100, 150);
  stroke(255);

  strokeWeight(4);
  float a = 0;

  float angle = (2*PI) / 200;


  fft.forward(player.mix);


  for(int i=0; i < player.bufferSize() - 1; i++) {

   //player.mix.get(i) is a value between [-1,1]

    float x = 250 + cos(a) * (20 * player.mix.get(i) + 100);
    float x2 = 540 + cos(a) * (20 * player.mix.get(i) + 100);    

    float y = 230 + sin(a) * (20 * player.mix.get(i) + 100);
    float y2 = 240 + sin(a) * (20 * player.mix.get(i) + 100);


    float xFinal = 250 + cos(a+angle) * (20 * player.mix.get(i+1) + 100);
    float x2Final = 540 + cos(a+angle) * (20 * player.mix.get(i+1) + 100);


    float yFinal = 230 + sin(a+angle) * (20 * player.mix.get(i+1) + 100);    
    float y2Final = 240 + sin(a+angle) * (20 * player.mix.get(i+1) + 100);    


    line(x,y,xFinal,yFinal);
    line(x2,y2,x2Final,y2Final);
    a += angle;  



  }
  noStroke();  
  fill(255, 0, 0, 128);
  for(int i = 0; i < 250; i++)
  {
    float b = fft.getBand(i);
    float yAxis = random(-b, b) + 480;
    float xAxis = i*3;
    ellipse(xAxis, yAxis, b, b);
  }
  saveFrame("frame-####.tif");
  if(frameCount>250)
    {
      noLoop();
      stop();
    }

}

void stop() {
  player.close();
  minim.stop();

  super.stop();
}

我在cmd上输入到命令行的内容(作为一行):

C:\Users\Robert\Documents\Processing\AudioVisulizer>ffmpeg -i C:\Users\Robert\Do
cuments\Processing\AudioVisulizer\frame-%04d.tif -r 25 -pix_fmt yuv420p smallVid
.mp4

它输出了什么:

    ffmpeg version N-77836-g62dfe1d Copyright (c) 2000-2016 the FFmpeg developers
      built with gcc 5.2.0 (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-libbs2b --enable-libcaca --
    enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-l
    ibilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enab
    le-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --en
    able-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --ena
    ble-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc
     --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enabl
    e-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --
    enable-lzma --enable-decklink --enable-zlib
      libavutil      55. 13.100 / 55. 13.100
      libavcodec     57. 22.100 / 57. 22.100
      libavformat    57. 21.101 / 57. 21.101
      libavdevice    57.  0.100 / 57.  0.100
      libavfilter     6. 23.100 /  6. 23.100
      libswscale      4.  0.100 /  4.  0.100
      libswresample   2.  0.101 /  2.  0.101
      libpostproc    54.  0.100 / 54.  0.100
    Input #0, image2, from 'C:\Users\Robert\Documents\Processing\AudioVisulizer\fram
    e-%04d.tif':
      Duration: 00:00:10.04, start: 0.000000, bitrate: N/A
        Stream #0:0: Video: tiff, rgb24, 728x546, 25 fps, 25 tbr, 25 tbn, 25 tbc
    [libx264 @ 00000092cd5e3700] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
    AVX FMA3 AVX2 LZCNT BMI2
    [libx264 @ 00000092cd5e3700] profile High, level 3.0
    [libx264 @ 00000092cd5e3700] 264 - core 148 r2638 7599210 - H.264/MPEG-4 AVC cod
    ec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 r
    ef=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_pski
    p=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 deci
    mate=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=2
    5 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.6
    0 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
    Output #0, mp4, to 'smallVid.mp4':
      Metadata:
        encoder         : Lavf57.21.101
        Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 728x54
    6, q=-1--1, 25 fps, 12800 tbn, 25 tbc
        Metadata:
          encoder         : Lavc57.22.100 libx264
        Side data:
          unknown side data type 10 (24 bytes)
    Stream mapping:
      Stream #0:0 -> #0:0 (tiff (native) -> h264 (libx264))
    Press [q] to stop, [?] for help
    frame=   52 fps=0.0 q=28.0 size=      77kB time=00:00:00.00 bitrate=N/A speed=
    frame=   74 fps= 65 q=28.0 size=     127kB time=00:00:00.88 bitrate=1178.0kbits/
    frame=   93 fps= 57 q=28.0 size=     164kB time=00:00:01.64 bitrate= 820.0kbits/
    frame=  113 fps= 52 q=28.0 size=     201kB time=00:00:02.44 bitrate= 676.3kbits/
    frame=  136 fps= 51 q=28.0 size=     245kB time=00:00:03.36 bitrate= 596.3kbits/
    frame=  157 fps= 49 q=28.0 size=     282kB time=00:00:04.20 bitrate= 550.2kbits/
    frame=  178 fps= 48 q=28.0 size=     324kB time=00:00:05.04 bitrate= 527.2kbits/
    frame=  199 fps= 47 q=28.0 size=     362kB time=00:00:05.88 bitrate= 504.1kbits/
    frame=  219 fps= 46 q=28.0 size=     403kB time=00:00:06.68 bitrate= 494.2kbits/
    frame=  242 fps= 46 q=28.0 size=     452kB time=00:00:07.60 bitrate= 486.8kbits/
    frame=  251 fps= 38 q=-1.0 Lsize=     623kB time=00:00:09.96 bitrate= 512.3kbits
    /s speed=1.52x
    video:619kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing o
    verhead: 0.607807%
    [libx264 @ 00000092cd5e3700] frame I:2     Avg QP:21.74  size: 56596
    [libx264 @ 00000092cd5e3700] frame P:66    Avg QP:23.36  size:  2523
    [libx264 @ 00000092cd5e3700] frame B:183   Avg QP:31.50  size:  1932
    [libx264 @ 00000092cd5e3700] consecutive B-frames:  0.8%  4.0%  6.0% 89.2%
    [libx264 @ 00000092cd5e3700] mb I  I16..4: 10.9% 72.6% 16.5%
    [libx264 @ 00000092cd5e3700] mb P  I16..4:  0.0%  0.0%  0.2%  P16..4:  4.4%  2.3
    %  3.3%  0.0%  0.0%    skip:89.7%
    [libx264 @ 00000092cd5e3700] mb B  I16..4:  0.0%  0.0%  0.5%  B16..8:  3.2%  2.0
    %  2.3%  direct: 1.3%  skip:90.7%  L0:50.9% L1:42.2% BI: 7.0%
    [libx264 @ 00000092cd5e3700] 8x8 transform intra:50.2% inter:10.1%
    [libx264 @ 00000092cd5e3700] coded y,uvDC,uvAC intra: 83.4% 32.6% 14.2% inter: 3
    .5% 0.2% 0.0%
    [libx264 @ 00000092cd5e3700] i16 v,h,dc,p: 22%  8%  8% 62%
    [libx264 @ 00000092cd5e3700] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 12% 19%  6%  9%
     9%  9%  9%  9%
    [libx264 @ 00000092cd5e3700] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 22% 14% 22%  6%  9%
     8%  8%  5%  6%
    [libx264 @ 00000092cd5e3700] i8c dc,h,v,p: 74% 12% 12%  2%
    [libx264 @ 00000092cd5e3700] Weighted P-Frames: Y:0.0% UV:0.0%
    [libx264 @ 00000092cd5e3700] ref P L0: 41.8%  3.9% 24.3% 30.0%
    [libx264 @ 00000092cd5e3700] ref B L0: 64.5% 25.0% 10.5%
    [libx264 @ 00000092cd5e3700] ref B L1: 82.2% 17.8%
    [libx264 @ 00000092cd5e3700] kb/s:504.56

您设法使声音和视频在正在运行的程序中同步的事实可能意味着您在空闲的CPU上运行了它

如果音乐和视频是两个独立的线程(据我所知),则不能保证CPU始终会运行它们。

因此,如果要使最终的视频.mp4同步,则必须在程序外部进行操作:将它们一起带到视频编辑软件中并进行同步。

但是,如果您希望它们在程序中同步,则可以。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM