如何连接两个视频w。 ffmpeg - 记录的代码不起作用

时间:2013-07-02 00:46:53

标签: video ffmpeg

我正在尝试用ffmpeg连接两个视频。没有什么花哨;我只想要一个由视频A组成的视频,紧接着是视频B.

我已经在Fedora 17上尝试了How to concatenate (join, merge) media files上新建的ffmpeg 1.2.1新安装和其他工作正常的代码,但出现以下错误消息:

$ ffmpeg -i video_a.mov -i video_b.mov -filter_complex '[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a]' -map '[v]' -map '[a]' output.mp4

ffmpeg version N-54271-g7f866c1 Copyright (c) 2000-2013 the FFmpeg developers
  built on Jun 29 2013 11:05:42 with gcc 4.7.2 (GCC) 20120921 (Red Hat 4.7.2-2)
  configuration: --enable-gpl --enable-nonfree --enable-pthreads --enable-libx264 --enable-libfaac --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib
  libavutil      52. 37.101 / 52. 37.101
  libavcodec     55. 17.100 / 55. 17.100
  libavformat    55. 10.100 / 55. 10.100
  libavdevice    55.  2.100 / 55.  2.100
  libavfilter     3. 77.101 /  3. 77.101
  libswscale      2.  3.100 /  2.  3.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  3.100 / 52.  3.100

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'v1221-MTQxMzcyNTIxODU2.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 0
    compatible_brands: qt  
    creation_time   : 2013-03-28 20:34:59
    encoder         : Mac OS X v10.8.3 (CMA 914, CM 926.87, x86_64)
    encoder-eng     : Mac OS X v10.8.3 (CMA 914, CM 926.87, x86_64)
  Duration: 00:00:05.34, start: 0.000000, bitrate: 15837 kb/s
    Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 221 kb/s
    Metadata:
      creation_time   : 2013-03-28 20:34:59
      handler_name    : Core Media Data Handler
    Stream #0:1(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 15512 kb/s, 29.81 fps, 30 tbr, 600 tbn, 1200 tbc
    Metadata:
      creation_time   : 2013-03-28 20:34:59
      handler_name    : Core Media Data Handler

Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'v1224-MTQxMzcyNTIxODg5.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 0
    compatible_brands: qt  
    creation_time   : 2013-03-28 20:36:28
    encoder         : Mac OS X v10.8.3 (CMA 914, CM 926.87, x86_64)
    encoder-eng     : Mac OS X v10.8.3 (CMA 914, CM 926.87, x86_64)
  Duration: 00:00:04.13, start: 0.000000, bitrate: 15689 kb/s
    Stream #1:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 221 kb/s
    Metadata:
      creation_time   : 2013-03-28 20:36:28
      handler_name    : Core Media Data Handler
    Stream #1:1(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 15446 kb/s, 29.79 fps, 30 tbr, 600 tbn, 1200 tbc
    Metadata:
      creation_time   : 2013-03-28 20:36:28
      handler_name    : Core Media Data Handler

Stream specifier ':0' in filtergraph description [0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a] matches no streams.

其他一些注意事项:

  • 我正在使用的两个视频是使用相同的相机拍摄的,因此宽高比或其他血腥视频细节应该没有任何问题。
  • 我可以使用我的ffmpeg安装做其他事情,比如将其中一个视频从.mov转换为.mp4(是的,我必须使用faac重新编译...),这似乎可以保证ffmpeg和视频。
  • 我尝试修改上面的调用以在最后生成一个.mov文件,但是我得到了和以前一样的错误。
  • 我在上面的请求上尝试了一些愚蠢的黑客技巧,比如连接相同视频的两个副本,以及来自网络其他地方的涉及filter_complex的其他一些调用。即使是被引用的工作,我也会收到“匹配无流”信息。

2 个答案:

答案 0 :(得分:13)

对于每个输入,首先指定视频流,然后指定音频流。因为您的视频流是针对每个输入的流1,而您的音频流是流0,所以它将是:

ffmpeg -i video_a.mov -i video_b.mov -filter_complex '[0:1] [0:0] [1:1] [1:0] 
  concat=n=2:v=1:a=1 [v] [a]' -map '[v]' -map '[a]' output.mp4

或者更好的是,无论原始流的顺序如何,以下命令都应该有效,并且如果有多个音频流将采用第一个音频流:

ffmpeg -i video_a.mov -i video_b.mov -filter_complex '[0:v] [0:a:0] [1:v] [1:a:0] 
   concat=n=2:v=1:a=1 [v] [a]' -map '[v]' -map '[a]' output.mp4

答案 1 :(得分:3)

Concat demuxer

concat demuxer被添加到ffmpeg 1.1中。如果你的ffmpeg版本是旧的,从这里获取最新的静态二进制文件: http://www.ffmpeg.org/download.html

说明

创建一个文件mylist.txt,其中包含您希望以下列形式连接的所有文件(忽略以破折号开头的行):

# this is a comment
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

请注意,这些可以是相对路径或绝对路径。然后,您可以使用以下代码对文件进行编码:

ffmpeg -f concat -i mylist.txt -c copy output

可以使用bash for循环或使用printf生成此列表文件。以下任一项都会生成一个列表文件,其中包含工作目录中的每个* .wav:

for f in ./*.wav; do echo "file '$f'" >> mylist.txt; done
printf "file '%s'\n" ./*.wav > mylist.txt

来源:ffmpeg wiki