Como faço para concatenar vídeos do Android (3GP4) usando o FFMPEG?

1

Eu tenho o FFMPEG instalado no meu sistema CentoS 6 x64:

FFmpeg version 0.6.5, Copyright (c) 2000-2010 the FFmpeg developers
  built on Jan 29 2012 17:52:15 with gcc 4.4.5 20110214 (Red Hat 4.4.5-6)
  configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --incdir=/usr/include --disable-avisynth --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --enable-avfilter --enable-avfilter-lavf --enable-libdc1394 --enable-libdirac --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libx264 --enable-gpl --enable-nonfree --enable-postproc --enable-pthreads --enable-shared --enable-swscale --enable-vdpau --enable-version3 --enable-x11grab
  libavutil     50.15. 1 / 50.15. 1
  libavcodec    52.72. 2 / 52.72. 2
  libavformat   52.64. 2 / 52.64. 2
  libavdevice   52. 2. 0 / 52. 2. 0
  libavfilter    1.19. 0 /  1.19. 0
  libswscale     0.11. 0 /  0.11. 0
  libpostproc   51. 2. 0 / 51. 2. 0

Estou tentando concatenar vídeos enviados de celulares - eles podem ser qualquer mistura de uploads para Android e iPhone. Este processo parece funcionar bem para vídeos do iPhone, mas para vídeos Android (3GP4), ele continua copiando os mesmos quadros e avança muito lentamente:

[root@ks383641 html]# ./interleave.sh /mnt/content/09zmWtIt8EvimTIy.mp4 /mnt/content/09zmWtIt8EvimTIy.mp4 out.mp4
MultiMedia Concat Script v1.3 (mmcat) - A script to concatenate multiple multimedia files.
Based on FFmpeg - www.ffmpeg.org
Don't forget to edit this script and change EXTRA_OPTIONS

FFmpeg version 0.6.5, Copyright (c) 2000-2010 the FFmpeg developers
  built on Jan 29 2012 17:52:15 with gcc 4.4.5 20110214 (Red Hat 4.4.5-6)
  configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --incdir=/usr/include --disable-avisynth --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --enable-avfilter --enable-avfilter-lavf --enable-libdc1394 --enable-libdirac --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libx264 --enable-gpl --enable-nonfree --enable-postproc --enable-pthreads --enable-shared --enable-swscale --enable-vdpau --enable-version3 --enable-x11grab
  libavutil     50.15. 1 / 50.15. 1
  libavcodec    52.72. 2 / 52.72. 2
  libavformat   52.64. 2 / 52.64. 2
  libavdevice   52. 2. 0 / 52. 2. 0
  libavfilter    1.19. 0 /  1.19. 0
  libswscale     0.11. 0 /  0.11. 0
  libpostproc   51. 2. 0 / 51. 2. 0
[u16le @ 0xff3690]Estimating duration from bitrate, this may be inaccurate
Input #0, u16le, from '/tmp/mcs_a_all':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0.0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s
[yuv4mpegpipe @ 0xffce20]Estimating duration from bitrate, this may be inaccurate
Input #1, yuv4mpegpipe, from '/tmp/mcs_v_all':
  Duration: N/A, bitrate: N/A
    Stream #1.0: Video: rawvideo, yuv420p, 1920x1080, 90k tbr, 90k tbn, 90k tbc
File 'out.mp4' already exists. Overwrite ? [y/N] y
[libx264 @ 0x1007a90]MB rate (734400000) > level limit (983040)
[libx264 @ 0x1007a90]using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2
[libx264 @ 0x1007a90]profile Constrained Baseline, level 5.1
[libx264 @ 0x1007a90]264 - core 107 - H.264/MPEG-4 AVC codec - Copyleft 2003-2010 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0x1:0 me=dia subme=0 psy=1 psy_rd=0.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=4 sliced_threads=0 nr=0 decimate=1 interlaced=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=10 qpmax=51 qpstep=4 ip_ratio=1.41 aq=0
Output #0, mp4, to 'out.mp4':
  Metadata:
    encoder         : Lavf52.64.2
    Stream #0.0: Video: libx264, yuv420p, 1920x1080, q=10-51, 200 kb/s, 90k tbn, 90k tbc
    Stream #0.1: Audio: libfaac, 44100 Hz, 2 channels, s16, 128 kb/s
Stream mapping:
  Stream #1.0 -> #0.0
  Stream #0.0 -> #0.1
Press [q] to stop encoding
frame= 1662 fps=239 q=-1.0 Lsize=     378kB time=0.02 bitrate=167700.6kbits/s dup=0 drop=17    
video:364kB audio:0kB global headers:0kB muxing overhead 3.895104%
[libx264 @ 0x1007a90]frame I:7     Avg QP:18.29  size: 45202
[libx264 @ 0x1007a90]frame P:1655  Avg QP:21.00  size:    34
[libx264 @ 0x1007a90]mb I  I16..4: 77.0%  0.0% 23.0%
[libx264 @ 0x1007a90]mb P  I16..4:  0.0%  0.0%  0.0%  P16..4:  0.0%  0.0%  0.0%  0.0%  0.0%    skip:99.9%
[libx264 @ 0x1007a90]coded y,uvDC,uvAC intra: 20.0% 35.7% 8.8% inter: 0.0% 0.0% 0.0%
[libx264 @ 0x1007a90]i16 v,h,dc,p: 72% 17%  6%  5%
[libx264 @ 0x1007a90]i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 24% 30% 25%  2%  4%  2%  5%  2%  6%
[libx264 @ 0x1007a90]i8c dc,h,v,p: 56% 22% 16%  6%
[libx264 @ 0x1007a90]kb/s:161117.11
Received signal 2: terminating.
^C

Estou usando o script a seguir . Existe uma maneira especial de concatenar vídeos do Android? Se sim, como posso fazer isso?

    
por James 21.05.2013 / 16:29

2 respostas

3

Você está usando uma versão muito antiga do FFmpeg, que provavelmente não consegue lidar com esse formato de arquivo da maneira certa. Atualize o FFmpeg para uma versão recente que pode ser encontrada na página de download do FFmpeg

    
por 21.05.2013 / 16:56
4

Primeiro, obtenha uma versão mais atualizada do ffmpeg . Então, em vez de usar esse script, use o demuxer de concat como descrito na página wiki do ffmpeg vinculado a ; se isso não funcionar, tente o filtro de concat (da mesma página).

Concat Demuxer

Primeiro, crie um arquivo chamado algo como inputs.txt , contendo linhas como:

file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

Em seguida, use o demuxer da seguinte forma:

ffmpeg -f concat -i inputs.txt -c copy output.mp4
## or something like:
ffmpeg -f concat -i inputs.txt -c:v libx264 -preset veryfast -crf 22 -c:a copy output.mp4
    
por 21.05.2013 / 17:00