Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ffmpeg amerge和amix滤波器延迟_Ffmpeg_Video Streaming_Filtering_Ip Camera - Fatal编程技术网

ffmpeg amerge和amix滤波器延迟

ffmpeg amerge和amix滤波器延迟,ffmpeg,video-streaming,filtering,ip-camera,Ffmpeg,Video Streaming,Filtering,Ip Camera,我需要从几个IP摄像机中获取音频流,并将它们合并到一个文件中,这样它们的声音听起来会很相似 我尝试过过滤“amix”:(出于测试目的,我从同一台摄像机上采集了两次音频流。是的,我尝试了两台摄像机-结果相同) 结果:我说“你好”。在扬声器中听到第一声“你好”,在1秒内我听到第二声“你好”。而不是像往常一样听到两声“你好” 并尝试筛选“amerge”: 结果:与第一个示例相同,但现在我在左扬声器中听到第一个“hello”,在1秒内我在右扬声器中听到第二个“hello”,而不是在两个扬声器中同时听到两

我需要从几个IP摄像机中获取音频流,并将它们合并到一个文件中,这样它们的声音听起来会很相似

我尝试过过滤“amix”:(出于测试目的,我从同一台摄像机上采集了两次音频流。是的,我尝试了两台摄像机-结果相同)

结果:我说“你好”。在扬声器中听到第一声“你好”,在1秒内我听到第二声“你好”。而不是像往常一样听到两声“你好”

并尝试筛选“amerge”:

结果:与第一个示例相同,但现在我在左扬声器中听到第一个“hello”,在1秒内我在右扬声器中听到第二个“hello”,而不是在两个扬声器中同时听到两个“hello”

所以,问题是:如何让它们听起来更简单?也许你知道一些参数?还是其他命令

注意:如果您需要这两种变体,这里是它们的完整命令行输出: 阿米克斯:

和amerge:

[root@minjust ~]# ffmpeg -i rtsp://admin:12345@172.22.5.202 -i rtsp://admin:12345@172.22.5.202 -map 0:a -map 1:a -filter_complex amerge -vn -ar 22050 -f flv rtmp://172.22.45.38:1935/live/stream1
ffmpeg version N-76031-g9099079 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-16)
  configuration: --enable-gpl --enable-libx264 --enable-libmp3lame --enable-nonfree --enable-version3
  libavutil      55.  4.100 / 55.  4.100
  libavcodec     57.  6.100 / 57.  6.100
  libavformat    57.  4.100 / 57.  4.100
  libavdevice    57.  0.100 / 57.  0.100
  libavfilter     6. 11.100 /  6. 11.100
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.100 /  2.  0.100
  libpostproc    54.  0.100 / 54.  0.100
Input #0, rtsp, from 'rtsp://admin:12345@172.22.5.202':
  Metadata:
    title           : Media Presentation
  Duration: N/A, start: 0.064000, bitrate: N/A
    Stream #0:0: Video: h264 (Baseline), yuv420p, 1280x720, 20 fps, 25 tbr, 90k tbn, 40 tbc
    Stream #0:1: Audio: adpcm_g726, 8000 Hz, mono, s16, 16 kb/s
    Stream #0:2: Data: none
Input #1, rtsp, from 'rtsp://admin:12345@172.22.5.202':
  Metadata:
    title           : Media Presentation
  Duration: N/A, start: 0.032000, bitrate: N/A
    Stream #1:0: Video: h264 (Baseline), yuv420p, 1280x720, 20 fps, 25 tbr, 90k tbn, 40 tbc
    Stream #1:1: Audio: adpcm_g726, 8000 Hz, mono, s16, 16 kb/s
    Stream #1:2: Data: none
[Parsed_amerge_0 @ 0x3069cc0] No channel layout for input 1
[Parsed_amerge_0 @ 0x3069cc0] Input channel layouts overlap: output layout will be determined by the number of distinct input channels
Output #0, flv, to 'rtmp://172.22.45.38:1935/live/stream1':
  Metadata:
    title           : Media Presentation
    encoder         : Lavf57.4.100
    Stream #0:0: Audio: mp3 (libmp3lame) ([2][0][0][0] / 0x0002), 22050 Hz, stereo, s16p (default)
    Metadata:
      encoder         : Lavc57.6.100 libmp3lame
Stream mapping:
  Stream #0:1 (g726) -> amerge:in0
  Stream #1:1 (g726) -> amerge:in1
  amerge -> Stream #0:0 (libmp3lame)
Press [q] to stop, [?] for help
[rtsp @ 0x2f71640] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[rtsp @ 0x300fb40] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[rtsp @ 0x2f71640] max delay reached. need to consume packet
[NULL @ 0x2f744a0] RTP: missed 18 packets
[flv @ 0x3058b00] Failed to update header with correct duration.
[flv @ 0x3058b00] Failed to update header with correct filesize.
size=      39kB time=00:00:04.54 bitrate=  70.2kbits/s
video:0kB audio:36kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 8.330614%
塔克斯

2015年10月30日更新:我在连接两个摄像头时发现了有趣的细节(它们有不同的麦克风,我听到了它们之间的区别):来自不同摄像头的“你好”顺序取决于输入顺序。 指挥

ffmpeg -i rtsp://cam2 -i rtsp://cam1 -map 0:a -map 1:a -filter_complex amix=inputs=2:duration=longest:dropout_transition=0 -vn -ar 22050 -f flv rtmp://172.22.45.38:1935/live/stream1
ffmpeg -i rtsp://cam1 -i rtsp://cam2 -map 0:a -map 1:a -filter_complex amix=inputs=2:duration=longest:dropout_transition=0 -vn -ar 22050 -f flv rtmp://172.22.45.38:1935/live/stream1
我从第一个摄像头听到“你好”,然后在一秒钟内从第二个摄像头听到“你好”

指挥

ffmpeg -i rtsp://cam2 -i rtsp://cam1 -map 0:a -map 1:a -filter_complex amix=inputs=2:duration=longest:dropout_transition=0 -vn -ar 22050 -f flv rtmp://172.22.45.38:1935/live/stream1
ffmpeg -i rtsp://cam1 -i rtsp://cam2 -map 0:a -map 1:a -filter_complex amix=inputs=2:duration=longest:dropout_transition=0 -vn -ar 22050 -f flv rtmp://172.22.45.38:1935/live/stream1
我从第二个摄像头听到“你好”,然后在一秒钟内从第一个摄像头听到“你好”

因此,据我所知,ffmpeg不是简单地接受输入,而是按照给定的输入顺序。
问题:如何告诉ffmpeg以同样的方式读取输入?

如果将amix与两个本地文件一起使用,则无法同时播放两个音频

当输入来自本地文件或流媒体时,ffmpeg确切地知道其开始时间。因此,它可以混合成一个音频

但是当输入来自直播流媒体时,ffmpeg不知道确切的“何时开始”,所以在不同的流媒体URL中,开始时间应该不同

更重要的是,ffmpeg在处理输入时不支持并发性。这就是为什么“hello”的顺序取决于输入的顺序

我只知道一个解决办法。Adobe FMLE(Flash Media Live Encoder),在使用RTMP流媒体时支持时间码。您可以从两个实时流媒体中获取时间代码,然后您最终可以将两个音频混合到一个音频中


也许,您可以从这篇文章开始:

如果将amix与两个本地文件一起使用能够完美工作,那么您无法同时播放两个音频

当输入来自本地文件或流媒体时,ffmpeg确切地知道其开始时间。因此,它可以混合成一个音频

但是当输入来自直播流媒体时,ffmpeg不知道确切的“何时开始”,所以在不同的流媒体URL中,开始时间应该不同

更重要的是,ffmpeg在处理输入时不支持并发性。这就是为什么“hello”的顺序取决于输入的顺序

我只知道一个解决办法。Adobe FMLE(Flash Media Live Encoder),在使用RTMP流媒体时支持时间码。您可以从两个实时流媒体中获取时间代码,然后您最终可以将两个音频混合到一个音频中

也许,您可以从这篇文章开始:

试试看

ffmpeg -i rtsp://user:pass@172.22.5.202 -i rtsp://user:pass@172.22.5.202 \
-filter_complex \
"[0:a]asetpts=PTS-STARTPTS[a1];[1:a]asetpts=PTS-STARTPTS[a2]; \
 [a1][a2]amix=inputs=2:duration=first:dropout_transition=3[a] \
-map [a] -ar 22050 -vn -f flv rtmp://172.22.45.38:1935/live/stream1
试一试


你用本地文件而不是流式输入测试了吗?是的,但我没有注意延迟。它会给我们什么?即使“输入文件”没有延迟,我也需要流“没有延迟”。不管怎样,从摄像机拍摄的第一个“你好”与来自同一摄像机的视频同步。但是第二个(迟到的)“你好”——取自同一台相机——不知何故迟到了。((嗯,我试着混合了两个相同的文件1.mp3和2.mp3(同一个文件的名称不同)------ffmpeg-id:\1.mp3-id:\1.mp3-filter\u complex amix=inputs=2:duration=first:dropout\u transition=3-ar 22050-vn-f flv D:\3.flv------结果非常完美。那么,它对我们有什么帮助呢?最后的问题请参阅更新。这个问题有什么解决方法吗?我认为ffmpeg-filter“amix”(请参阅)将执行您可能期望的-音频的“混合”,其中音频在其他音频之上分层…而不是(@UserNew)测试显示实际执行的“附加”。在这种情况下,看起来“amerge”是您实际需要的过滤器(请参阅)您是否使用本地文件而不是流式输入进行了测试?是的,但我没有注意延迟。它会给我们带来什么?即使“输入文件”没有延迟,我也需要流式输入的“无延迟”。无论如何,从cam获取的第一个“hello”与来自同一cam的视频同步。但是第二个(晚些时候)“hello”-从同一台相机拍摄-不知怎么晚了。((嗯,我试着混合了两个相同的文件1.mp3和2.mp3(同一个文件有不同的名称)------ffmpeg-id:\1.mp3-id:\1.mp3-filter\u complex amix=inputs=2:duration=first:dropout\u transition=3-ar 22050-vn-f flv D:\3.flv------结果非常完美。那么,它对我们有什么帮助呢?最后的问题请参阅更新。这个问题有什么解决方法吗?我认为ffmpeg-filter“amix”(请参阅)将执行您可能期望的-音频的“混合”,其中音频在其他音频之上分层…而不是(@UserNew)测试显示实际执行的“附加”。在这种情况下,看起来“amerge”是您实际需要的过滤器(请参阅)
ffmpeg -i rtsp://user:pass@172.22.5.202 -i rtsp://user:pass@172.22.5.202 \
-filter_complex \
"[0:a]asetpts=PTS-STARTPTS[a1];[1:a]asetpts=PTS-STARTPTS[a2]; \
 [a1][a2]amix=inputs=2:duration=first:dropout_transition=3[a] \
-map [a] -ar 22050 -vn -f flv rtmp://172.22.45.38:1935/live/stream1