2 个视频的 FFMPEG 覆盖问题,第二个输入中缺少声音

Posted

技术标签:

【中文标题】2 个视频的 FFMPEG 覆盖问题,第二个输入中缺少声音【英文标题】:FFMPEG overlay issue for 2 videos, sound missing from second input 【发布时间】:2013-01-08 10:05:42 【问题描述】:

我正在尝试使用 ffmpeg 实现覆盖,它将两个 flv 文件作为输入并进行输出,并且两个视频同时播放。使用以下 ffmpeg 命令一切正常:

ffmpeg -i input1.flv -vf "[in] scale=359:320, pad=2*iw+6:ih [left]; movie=input2.flv, scale=359:320 [right]; [left][right] overlay=365:0 [out]" -b:v 3600k -y output.flv

但问题在于第二个视频的声音,output.flv 中缺少该声音,output.flv 中只有 input1 声音可用。

控制台输出为:

ffmpeg version N-47062-g26c531c Copyright (c) 2000-2012 the FFmpeg developers
  built on Nov 25 2012 12:23:20 with gcc 4.7.2 (GCC)
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3
 --disable-pthreads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib
--enable-frei0r --enable-libass --enable-lib`enter code here`opencore-amrnb --enable-libopencore-
amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut -
-enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger -
-enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --
enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enab
le-libxavs --enable-libxvid --enable-zlib
  libavutil      52.  9.100 / 52.  9.100
  libavcodec     54. 77.100 / 54. 77.100
  libavformat    54. 37.100 / 54. 37.100
  libavdevice    54.  3.100 / 54.  3.100
  libavfilter     3. 23.102 /  3. 23.102
  libswscale      2.  1.102 /  2.  1.102
  libswresample   0. 17.101 /  0. 17.101
  libpostproc    52.  2.100 / 52.  2.100
Input #0, flv, from 'input1.flv':
  Metadata:
    canSeekToEnd    : false
    createdby       : FMS 4.0
    creationdate    : Mon Jan 07 07:05:40 2013
    encoder         : Lavf54.37.100
  Duration: 00:03:04.81, start: 0.000000, bitrate: 314 kb/s
    Stream #0:0: Video: flv1, yuv420p, 160x120, 3600 kb/s, 1k tbr, 1k tbn, 1k tb
c
    Stream #0:1: Audio: mp3, 22050 Hz, mono, s16, 32 kb/s
Output #0, flv, to 'output.flv':
  Metadata:
    canSeekToEnd    : false
    createdby       : FMS 4.0
    creationdate    : Mon Jan 07 07:05:40 2013
    encoder         : Lavf54.37.100
    Stream #0:0: Video: flv1 ([2][0][0][0] / 0x0002), yuv420p, 724x320, q=2-31,
3600 kb/s, 1k tbn, 1k tbc
    Stream #0:1: Audio: mp3 ([2][0][0][0] / 0x0002), 22050 Hz, mono, s16p
Stream mapping:
  Stream #0:0 -> #0:0 (flv -> flv)
  Stream #0:1 -> #0:1 (mp3 -> libmp3lame)
Press [q] to stop, [?] for help
frame=  120 fps=0.0 q=4.5 size=     550kB time=00:00:08.57 bitrate= 525.3kbits/s
frame=  225 fps=221 q=2.0 size=    1422kB time=00:00:18.26 bitrate= 637.6kbits/s
Buffer queue overflow, dropping.
[Parsed_overlay_4 @ 02259ae0] Buffer queue overflow, dropping.
    Last message repeated 1 times
frame=  338 fps=222 q=2.0 size=    2414kB time=00:00:26.97 bitrate= 733.0kbits/s
Buffer queue overflow, dropping.
[Parsed_overlay_4 @ 02259ae0] Buffer queue overflow, dropping.
    Last message repeated 12 times
frame=  452 fps=223 q=2.0 size=    3326kB time=00:00:35.38 bitrate= 770.1kbits/s
frame=  562 fps=223 q=2.0 size=    4246kB time=00:00:43.15 bitrate= 806.0kbits/s
Buffer queue overflow, dropping.
[Parsed_overlay_4 @ 02259ae0] Buffer queue overflow, dropping.
    Last message repeated 11 times
frame=  669 fps=221 q=2.0 size=    5237kB time=00:00:51.28 bitrate= 836.6kbits/s
frame=  777 fps=220 q=2.0 size=    6105kB time=00:00:58.75 bitrate= 851.2kbits/s
frame=  893 fps=222 q=2.0 size=    6897kB time=00:01:06.72 bitrate= 846.8kbits/s
frame= 1006 fps=222 q=2.0 size=    7701kB time=00:01:14.60 bitrate= 845.6kbits/s
frame= 1121 fps=223 q=2.0 size=    8539kB time=00:01:22.45 bitrate= 848.3kbits/s
frame= 1235 fps=223 q=2.0 size=    9316kB time=00:01:30.39 bitrate= 844.3kbits/s
frame= 1344 fps=223 q=2.0 size=   10135kB time=00:01:37.98 bitrate= 847.3kbits/s
Buffer queue overflow, dropping.
[Parsed_overlay_4 @ 02259ae0] Buffer queue overflow, dropping.
    Last message repeated 33 times
frame= 1437 fps=220 q=2.0 size=   10800kB time=00:01:46.67 bitrate= 829.3kbits/s
frame= 1540 fps=219 q=2.0 size=   11577kB time=00:01:54.16 bitrate= 830.7kbits/s
frame= 1651 fps=219 q=2.0 size=   12330kB time=00:02:01.64 bitrate= 830.3kbits/s
frame= 1756 fps=218 q=2.0 size=   13141kB time=00:02:09.06 bitrate= 834.1kbits/s
frame= 1859 fps=217 q=2.0 size=   13879kB time=00:02:16.28 bitrate= 834.3kbits/s
frame= 1962 fps=217 q=2.0 size=   14703kB time=00:02:23.69 bitrate= 838.2kbits/s
frame= 2070 fps=217 q=2.0 size=   15448kB time=00:02:30.98 bitrate= 838.2kbits/s
frame= 2176 fps=216 q=2.0 size=   16241kB time=00:02:38.46 bitrate= 839.6kbits/s
Buffer queue overflow, dropping.
[Parsed_overlay_4 @ 02259ae0] Buffer queue overflow, dropping.
    Last message repeated 20 times
frame= 2275 fps=215 q=2.0 size=   16990kB time=00:02:46.78 bitrate= 834.5kbits/s
frame= 2389 fps=216 q=1.6 size=   17784kB time=00:02:54.44 bitrate= 835.1kbits/s
frame= 2493 fps=216 q=2.0 size=   18555kB time=00:03:01.73 bitrate= 836.4kbits/s
frame= 2534 fps=216 q=2.0 Lsize=   18945kB time=00:03:04.81 bitrate= 839.7kbits/
s
video:18227kB audio:588kB subtitle:0 global headers:0kB muxing overhead 0.691204
%

我认为 -map 是用于两个视频的音频处理的过滤器。看这个链接。

Superimposing two videos onto a static image?

【问题讨论】:

缺少完整的 ffmpeg 控制台输出。它包含有用的信息。 嗨,感谢您的回复 LordNeckbeard。控制台输出是: 【参考方案1】:

-filter_complex-vf

当您有一个或多个滤波器输​​入和/或一个或多个输出时,请使用 -filter_complex 而不是 -vf

-filter_complex 设计用于与complex filtergraphs 一起使用,-vf 用于simple filtergraphs,它只使用一个输入和输出。

请参阅您提供的链接Superimposing two videos onto a static image?,查看使用-filter_complexoverlay 过滤器的示例。

默认流选择

默认情况下,只会选择第一个输入中通道最多的音频流作为输出(请参阅stream selection 上的文档)。

您使用-map 选项添加另一个音频流,例如-map 1:a -c:a copy1:a 指的是第二个输入:选择音频流。您可以在 ffmpeg 控制台输出中看到每个流是如何标记的。请注意,此示例将简单地将附加音频流从输入“复制并粘贴”到输出,因此您的输出将有两个单独的音频流,而不是一个混合音频流。

要将两个输入音频流混合成一个输出音频流,您可以使用amergepan 过滤器。请参阅 FFmpeg Wiki 上的 2 × stereo → stereo example。

【讨论】:

以上是关于2 个视频的 FFMPEG 覆盖问题,第二个输入中缺少声音的主要内容,如果未能解决你的问题,请参考以下文章

为啥带有 2 个视频的 ffmpeg concat 会丢失第二个音频?

将麦克风从客户端浏览器流式传输到远程服务器,并将音频实时传递到 ffmpeg 以与第二个视频源结合

将 RTSP 信号与 FFMPEG 同步

libav / FFMPEG以一种编码方式进行流式传输,另存为另一种方式

使用多个音频流ffmpeg时不能使用-shortest参数

MIPS,动态数组,第三个输入覆盖第二个