最终渲染视频与处理

时间:2016-01-15 05:15:49

标签: java video ffmpeg processing render

最近我在Processing中制作了一个Audio Visualizer。从那里我想将Processing中创建的动画渲染为mp4文件。我在Windows计算机上,并使用ffmpeg将Processing中生成的TIF文件转换为mp4。

当我这样做时,我能够将图像渲染成mp4文件,但是当我播放这个文件时,与我在Processing上播放动画时的动画相比,动画加快了。因此,当我在视频编辑程序中组合mp4文件和音频时,动画不会与音频同步。

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

我不知道为什么会这样,所以任何帮助都会受到高度赞赏。

我的处理代码:

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

1 个答案:

答案 0 :(得分:0)

你设法在正在运行的程序中获得声音和视频同步的事实可能意味着你在一个免费的CPU上运行它

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

因此,如果你想让你的最终视频.mp4同步,你必须在程序之外工作:将它们一起带到视频编辑软件并同步它们。

但是如果你想让它们在程序中同步你就可以了。