FFMPEG中的视频连接

时间:2015-02-21 06:57:29

标签: android ffmpeg video-processing

我正在尝试使用ffmpeg连接几个视频文件,我使用

.././ffmpeg -i 01.mov -i op_IMG_20150221114715.mp4 -i 02.mov -i op_IMG_20150221114724.mp4 -i op_IMG_20150221114736.mp4 -strict -2 -filter_complex '[0:0] setsar=1/1[sarfix];[sarfix] [0:1] [1:0] [1:1] [2:0] [2:1] [3:0] [3:1] [4:0] [4:1] concat=n=5:v=1:a=1 [v] [a]' -map "[v]" -map "[a]" output.mp4

并输出此错误

ffmpeg version 2.5.4 Copyright (c) 2000-2015 the FFmpeg developers
built on Feb 16 2015 16:20:23 with llvm-gcc 4.2.1 (LLVM build 2336.11.00)
configuration: --prefix=/Volumes/Ramdisk/sw --enable-gpl --enable-pthreads   --enable-version3 --enable-libspeex --enable-libvpx --disable-decoder=libvpx --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-avfilter --enable-libopencore_amrwb --enable-libopencore_amrnb --enable-filters --enable-libgsm --enable-libvidstab --enable-libx265 --arch=x86_64 --enable-runtime-cpudetect
libavutil      54. 15.100 / 54. 15.100
libavcodec     56. 13.100 / 56. 13.100
libavformat    56. 15.102 / 56. 15.102
libavdevice    56.  3.100 / 56.  3.100
libavfilter     5.  2.103 /  5.  2.103
libswscale      3.  1.101 /  3.  1.101
libswresample   1.  1.100 /  1.  1.100
libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '01.mov':
Metadata:
major_brand     : qt  
minor_version   : 537199360
compatible_brands: qt  
creation_time   : 2015-02-13 11:31:41
xmp             : 
  Duration: 00:00:02.17, start: 0.000000, bitrate: 558 kb/s
Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, smpte170m/smpte170m/bt709), 480x480, 402 kb/s, SAR 480:480 DAR 1:1, 24 fps, 24 tbr, 24 tbn, 48 tbc (default)
Metadata:
  creation_time   : 2015-02-13 11:31:41
  handler_name    : Apple Alias Data Handler
  encoder         : H.264
  timecode        : 00:00:00:00
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 68 kb/s (default)
Metadata:
  creation_time   : 2015-02-13 11:31:41
  handler_name    : Apple Alias Data Handler
  timecode        : 00:00:00:00
Stream #0:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s (default)
Metadata:
  creation_time   : 2015-02-13 11:31:43
  handler_name    : Apple Alias Data Handler
  timecode        : 00:00:00:00
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'op_IMG_20150221114715.mp4':
Metadata:
major_brand     : isom
minor_version   : 512
compatible_brands: isomiso2avc1mp41
encoder         : Lavf56.4.101
Duration: 00:00:04.07, start: 0.023220, bitrate: 539 kb/s
Stream #1:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 480x480 [SAR 1:1 DAR 1:1], 427 kb/s, 29.92 fps, 29.92 tbr, 11488 tbn, 59.83 tbc (default)
Metadata:
  rotate          : 90
  handler_name    : VideoHandler
Side data:
  displaymatrix: rotation of -90.00 degrees
Stream #1:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 120 kb/s (default)
Metadata:
  handler_name    : SoundHandler
Input #2, mov,mp4,m4a,3gp,3g2,mj2, from '02.mov':
Metadata:
   major_brand     : qt  
minor_version   : 537199360
compatible_brands: qt  
creation_time   : 2015-02-13 11:32:12
xmp             : 
  Duration: 00:00:02.38, start: 0.000000, bitrate: 666 kb/s
Stream #2:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, smpte170m/smpte170m/bt709), 480x480, 445 kb/s, SAR 480:480 DAR 1:1, 24 fps, 24 tbr, 24 tbn, 48 tbc (default)
Metadata:
  creation_time   : 2015-02-13 11:32:12
  handler_name    : Apple Alias Data Handler
  encoder         : H.264
  timecode        : 00:00:02:12
Stream #2:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 119 kb/s (default)
Metadata:
  creation_time   : 2015-02-13 11:32:12
  handler_name    : Apple Alias Data Handler
  timecode        : 00:00:02:12
Stream #2:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s (default)
Metadata:
  creation_time   : 2015-02-13 11:32:15
  handler_name    : Apple Alias Data Handler
  timecode        : 00:00:02:12

Input #3, mov,mp4,m4a,3gp,3g2,mj2, from 'op_IMG_20150221114724.mp4':
Metadata:
major_brand     : isom
minor_version   : 512
compatible_brands: isomiso2avc1mp41
encoder         : Lavf56.4.101
Duration: 00:00:02.07, start: 0.023220, bitrate: 549 kb/s
Stream #3:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 480x480 [SAR 1:1 DAR 1:1], 460 kb/s, 29.92 fps, 29.92 tbr, 11488 tbn, 59.83 tbc (default)
Metadata:
  rotate          : 90
  handler_name    : VideoHandler
Side data:
  displaymatrix: rotation of -90.00 degrees
Stream #3:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 111 kb/s (default)
Metadata:
  handler_name    : SoundHandler
Input #4, mov,mp4,m4a,3gp,3g2,mj2, from 'op_IMG_20150221114736.mp4':
Metadata:
major_brand     : isom
minor_version   : 512
compatible_brands: isomiso2avc1mp41
encoder         : Lavf56.4.101
Duration: 00:00:01.07, start: 0.023220, bitrate: 392 kb/s
Stream #4:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 480x480    [SAR 1:1 DAR 1:1], 334 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
  rotate          : 90
  handler_name    : VideoHandler
Side data:
  displaymatrix: rotation of -90.00 degrees
Stream #4:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 93 kb/s (default)
Metadata:
  handler_name    : SoundHandler
File 'output.mp4' already exists. Overwrite ? [y/N] y
[Parsed_concat_1 @ 0x7f922bc1cec0] Input link in2:v0 parameters (size 480x480, SAR 480:480) do not match the corresponding output link in0:v0 parameters (480x480, SAR 1:1)
[Parsed_concat_1 @ 0x7f922bc1cec0] Failed to configure output pad on   Parsed_concat_1

问题似乎我需要在输入文件02.mov上应用sarfix。但我不知道它的语法。

1 个答案:

答案 0 :(得分:1)

为什么必须由用户设置某些内容

来自concat filter documentation

  

所有相应的流必须具有相同的参数   段;过滤系统会自动选择一个共同的   视频流的像素格式,以及常见的样本格式,示例   音频流的速率和频道布局,但其他设置,例如   分辨率,必须由用户明确转换

更多相同的文档:

  

要使此过滤器正常工作,所有细分必须从   时间戳0。

除SAR(样本 [aka 像素] 宽高比)和帧速率外,所有输入共享相同的参数。将所有输入的时间戳设置为0也是一种好习惯(即使它们已经为0,也不会因为这样做而受伤)。

你必须做什么

  1. 将时间戳设置为0。将使用setpts filter

  2. 两个输入的SAR为480:480,而其他输入的SAR为1:1。我不确定为什么将它们设置为480:480而不是1:1。它们都必须是480:4801:1。您可以尝试两种方式,看看哪种方式最好。将使用setsar filter

  3. 两个输入的帧速率为24,一个为29.92,一个为30。它们都必须具有相同的值,因此将使用fps filter

  4. Filtergraph语法

    filtergraph 是您的完整过滤命令。过滤器图由过滤链组成。过滤链由一组通过逗号连接的过滤器组成。过滤链通过分号连接。可以命名filterchains和filtergraphs的输入和输出,以便其他过滤器或过滤链可以引用它们。

    基本过滤器示例

    -filter_complex \
    "[0:v]filter0,filter1,filter2[fc0]; \
     [1:v]filter3,filter4,filter5[fc1]; \
     [fc0][fc1]filter5[out]"
    
    • [0:v]指的是第一个输入文件中的视频。
    • [fc0]指的是第一个过滤链的输出。

    实际过滤器示例

    -filter_complex \
    "[0:v]setsar=1/1,setpts=PTS-STARTPTS[v0]; \
     [1:v]fps=24,setpts=PTS-STARTPTS[v1]; \
     [2:v]setsar=1/1,setpts=PTS-STARTPTS[v2]; \
     [3:v]fps=24,setpts=PTS-STARTPTS[v3]; \
     [4:v]fps=24,setpts=PTS-STARTPTS[v4]; \
     [v0][0:a][v1][1:a][v2][2:a][v3][3:a][v4][4:a]concat=n=5:v=1:a=1[v][a]"