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_complex
和overlay
过滤器的示例。
默认流选择
默认情况下,只会选择第一个输入中通道最多的音频流作为输出(请参阅stream selection 上的文档)。
您使用-map
选项添加另一个音频流,例如-map 1:a -c:a copy
。 1:a
指的是第二个输入:选择音频流。您可以在 ffmpeg 控制台输出中看到每个流是如何标记的。请注意,此示例将简单地将附加音频流从输入“复制并粘贴”到输出,因此您的输出将有两个单独的音频流,而不是一个混合音频流。
要将两个输入音频流混合成一个输出音频流,您可以使用amerge
和pan
过滤器。请参阅 FFmpeg Wiki 上的 2 × stereo → stereo example。
【讨论】:
以上是关于2 个视频的 FFMPEG 覆盖问题,第二个输入中缺少声音的主要内容,如果未能解决你的问题,请参考以下文章
为啥带有 2 个视频的 ffmpeg concat 会丢失第二个音频?
将麦克风从客户端浏览器流式传输到远程服务器,并将音频实时传递到 ffmpeg 以与第二个视频源结合