使用 ffmpeg 合并两个视频

使用 ffmpeg 合并两个视频

我的命令是:

ffmpeg -y -i 2.mp4 -i 2.mp4 -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-50911-g9efcfbe Copyright (c) 2000-2013 the FFmpeg developers built on Mar 13 2013 21:26:48 with gcc 4.7.2 (GCC) configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnu tls --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmp3lame --enable-libopencore -amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex - -enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxa vs --enable-libxvid --enable-zlib libavutil 52. 19.100 / 52. 19.100 libavcodec 55. 0.100 / 55. 0.100 libavformat 55. 0.100 / 55. 0.100 libavdevice 54. 4.100 / 54. 4.100 libavfilter 3. 45.103 / 3. 45.103 libswscale 2. 2.100 / 2. 2.100 libswresample 0. 17.102 / 0. 17.102 libpostproc 52. 2.100 / 52. 2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 date : 2015-07-02T14:59:07.00754+03:00 encoder : Lavf55.0.100 Duration: 00:00:07.03, start: 0.000000, bitrate: 24 kb/s
Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p, 500x281, 21 kb/s, 29.74 fps, 29.74 tbr, 11896 tbn, 59.48 tbc Metadata: handler_name : VideoHandler
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 date : 2015-07-02T14:59:07.00754+03:00 encoder : Lavf55.0.100 Duration: 00:00:07.03, start: 0.000000, bitrate: 24 kb/s
Stream #1:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444p, 500x281, 21 kb/s, 29.74 fps, 29.74 tbr, 11896 tbn, 59.48 tbc Metadata: handler_name : VideoHandler
[AVFilterGraph @ 020ae7c0] No such filter: '[0:0]' Error configuring filters.

答案1

您的两个输入似乎是同一个文件 (2.mp4);因此您可以按照文档页面中所述进行比特流复制连接视频因为编解码器参数将匹配:

文件 concat.txt:

file '/full/path/to/2.mp4'
file '/full/path/to/2.mp4'

然后使用命令:

$ ffmpeg  -f concat -i concat.txt -c copy out.mp4

然而,你必须升级到较新版本的 ffmpeg,因为此选项是在 v1.1 之后才添加的。

您尝试使用的方法(列于'连接不同编解码器的文件') 指出:

concat 过滤器是在最新版本的 ffmpeg 中可用

(重点是我的)

所以你需要升级如果您希望在具有不同编解码器的文件上使用它。

您的命令对我来说是有效的,并且替换了其他视频文件。如果您根本无法升级 ffmpeg,请阅读文档的 concat 协议部分选项如下:

如果您有 MP4 文件,可以先将它们转码为 mpeg 传输流,然后无损连接。对于 h.264 视频和 AAC 音频,可以使用以下方法:

ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc output.mp4

我为了完整性而添加了这个方法,但与其他人不同,我自己没有使用过这种方法。你也可以使用外部脚本他们会注意到您是否拥有不同编解码器的文件。

相关内容