J'ai besoin de prendre des flux audio de plusieurs caméras IP et de les fusionner en un seul fichier, de sorte qu'ils sonnent simaltaneousely.ffmpeg amerge et amix filter delay
J'ai essayé filtre « amix »: (à des fins de test je prends flux audio 2 fois de la même caméra oui, j'ai essayé 2 caméras - résultat est le même.)
ffmpeg -i rtsp://user:[email protected] -i rtsp://user:[email protected] -map 0:a -map 1:a -filter_complex amix=inputs=2:duration=first:dropout_transition=3 -ar 22050 -vn -f flv rtmp://172.22.45.38:1935/live/stream1
résultat: Je dis "Bonjour". Et entendre dans les haut-parleurs le premier "bonjour" et en 1 seconde j'entends le deuxième "bonjour". Au lieu d'entendre deux "bonjour" simaltaneousely.
et filtre essayé « Amerge »:
ffmpeg -i rtsp://user:[email protected] -i rtsp://user:[email protected] -map 0:a -map 1:a -filter_complex amerge -ar 22050 -vn -f flv rtmp://172.22.45.38:1935/live/stream1
résultat: le même que dans le premier exemple, mais maintenant j'entends le premier « bonjour » en haut-parleur gauche et en 1 seconde j'entends le second « bonjour "dans le haut-parleur droit, au lieu d'entendre deux" bonjour "dans les deux enceintes simaltaneousely. Donc, la question est: comment les faire sonner simultanément? Peut-être connaissez-vous un paramètre? ou une autre commande?
P.S. Voici la sortie de ligne de commande FUL pour les deux variantes si vous avez besoin: amix:
[[email protected] ~]# ffmpeg -i rtsp://admin:[email protected] -i rtsp://admin:[email protected] -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 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:[email protected]':
Metadata:
title : Media Presentation
Duration: N/A, start: 0.032000, 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:[email protected]':
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
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, mono, fltp (default)
Metadata:
encoder : Lavc57.6.100 libmp3lame
Stream mapping:
Stream #0:1 (g726) -> amix:input0
Stream #1:1 (g726) -> amix:input1
amix -> Stream #0:0 (libmp3lame)
Press [q] to stop, [?] for help
[rtsp @ 0x2689600] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[rtsp @ 0x2727c60] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[rtsp @ 0x2689600] max delay reached. need to consume packet
[NULL @ 0x268c500] RTP: missed 38 packets
[rtsp @ 0x2689600] max delay reached. need to consume packet
[NULL @ 0x268d460] RTP: missed 4 packets
[flv @ 0x2958360] Failed to update header with correct duration.
[flv @ 0x2958360] Failed to update header with correct filesize.
size= 28kB time=00:00:06.18 bitrate= 36.7kbits/s
video:0kB audio:24kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 16.331224%
et Amerge:
[[email protected] ~]# ffmpeg -i rtsp://admin:[email protected] -i rtsp://admin:[email protected] -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:[email protected]':
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:[email protected]':
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%
Thanx.
MISE À JOUR 30 oct 2015: J'ai trouvé des détails intéressants lors de la connexion de 2 caméras (ils ont des microphones différents et j'entends la différence): l'ordre des "Hello" dépend de l'ORDRE DES ENTRÉES. avec commande
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
J'entends « bonjour » de 1ère came et puis en 1 seconde « bonjour » de la came 2.
avec commande
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
J'entends « bonjour » de 2ème came et puis en 1 seconde « bonjour » de 1ère came. Donc, comme je comprends - ffmpeg prend des entrées pas simaltaneousely, mais dans l'ordre des entrées données. Question: comment dire à ffmpeg de lire les entrées simultanément?
Avez-vous testé avec fichier local, pas l'entrée en continu? –
oui, mais je n'ai pas fait attention à retarder. Qu'est-ce que ça va nous donner? même s'il n'y a pas de retard avec les "fichiers d'entrée" - j'ai besoin de "pas de retard" avec les flux. Quoi qu'il en soit, le premier "bonjour" de la caméra est syncronisé avec la vidéo de la même caméra. Mais le deuxième "bonjour" - tiré de la même caméra - est en retard. ((( –
bien, j'ai essayé de mélanger deux fichiers identiques 1.mp3 et 2.mp3 (c'est le même fichier avec des noms différents) ----- ffmpeg -i D: \ 1.mp3 -i D: \ 1. mp3 -filter_complex amix = entrées = 2: durée = premier: dropout_transition = 3 -ar 22050 -vn -f flv D: \ 3.flv ----- - le résultat est parfait alors, comment ça nous aide? –