Accéder au contenu.
Menu Sympa

linux-31 - Re: [Linux-31] Capture avec avconv

Objet : Discussions sur le logiciel libre

Archives de la liste

Re: [Linux-31] Capture avec avconv


Chronologique Discussions 
  • From: g hillartin <hillartin AT gmail.com>
  • To: christophe <linux-31 AT culte.org>
  • Subject: Re: [Linux-31] Capture avec avconv
  • Date: Sun, 29 Sep 2019 03:56:54 +0200
  • Authentication-results: pic2s.le-pic.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i= AT gmail.com header.b="ia1HFaeN"; dkim-atps=neutral

Salut Pierre,

Si je faisais ce que tu essaies de faire, j'essaierais d'en apprendre davantage d'abord sur chaque source séparément.
En particulier, enregistrer le micro avec arecord pour savoir quelle fréquence d'échantillonnage il utilise par défaut, comme te le demandait Aymeric.
Ensuite, comprendre comment ffmpeg transforme l'entrée mono du micro en quelque chose de stéréo. Canal gauche ou droit toujours à zéro ? Ou signal identique sur les deux canaux ? Ou pas de stéréo du tout ?
Pour le moment on ne sait toujours rien !

Ensuite, tester l'enregistrement du son uniquement, sans erreur ni décalage.

Ensuite seulement, capturer la vidéo, avec éventuellement les optimisations matérIelles que t'a suggérées Aymeric. Si le redimensionnement des buffers ne suffit pas.

Il faudrait être dingue pour croire qu'une commande aussi complexe puisse fonctionner correctement du premier coup, sans expérimentations.

Il faut procéder méthodiquement.
Ce sera plus efficace que la magie.

À plus,
Gilbert


Le dim. 29 sept. 2019 03:09, Pierre ESTREM <linux-31 AT culte.org> a écrit :
Bonjour Aymeric et le reste du Monde,

Ta commande dessous a fonctionné puis je ne sais pourquoi, elle plante
inexorablement.

ffmpeg -f pulse -ac 2 -thread_queue_size 512 -i
alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -f pulse -ac 2
-thread_queue_size 512 -i
alsa_input.usb-AKM_AK5370-00-AK5370.analog-mono -f x11grab -r 25 -s
1920x1080 -i :0.0 -filter_complex [0:a][1:a] amix=inputs=2 [audio] ;
[2:v] format=yuv420p [video] -map a -map [video] -c:v libx264 -preset
ultrafast capture.mp4

Son retour, l'erreur en toute fin :

ffmpeg version 2.6.9 Copyright (c) 2000-2016 the FFmpeg developers
   built with gcc 4.9.2 (Debian 4.9.2-10+deb8u1)
   configuration: --prefix=/usr --extra-cflags='-g -O2
-fstack-protector-strong -Wformat -Werror=format-security '
--extra-ldflags='-Wl,-z,relro' --enable-shared --enable-libmp3lame
--enable-gpl --enable-nonfree --enable-libvorbis --enable-pthreads
--enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab
--enable-libgsm --enable-libtheora --enable-libopencore-amrnb
--enable-libopencore-amrwb --enable-libx264 --enable-libspeex
--enable-nonfree --disable-stripping --enable-libvpx
--enable-libschroedinger --disable-encoder=libschroedinger
--enable-version3 --enable-libopenjpeg --enable-librtmp
--enable-avfilter --enable-libfreetype --enable-libvo-aacenc
--disable-decoder=amrnb --enable-libvo-amrwbenc --enable-libaacplus
--libdir=/usr/lib/i386-linux-gnu --disable-vda --enable-libbluray
--enable-libcdio --enable-gnutls --enable-frei0r --enable-openssl
--enable-libass --enable-libopus --enable-fontconfig --enable-libpulse
--disable-mips32r2 --disable-mipsdspr1 --disable-mipsdspr2
--enable-libvidstab --enable-libzvbi --enable-avresample
--disable-htmlpages --disable-podpages --enable-libutvideo
--enable-libfdk-aac --enable-libx265 --enable-libiec61883 --enable-vaapi
--enable-libdc1394 --disable-altivec --shlibdir=/usr/lib/i386-linux-gnu
   libavutil      54. 20.100 / 54. 20.100
   libavcodec     56. 26.100 / 56. 26.100
   libavformat    56. 25.101 / 56. 25.101
   libavdevice    56.  4.100 / 56.  4.100
   libavfilter     5. 11.102 /  5. 11.102
   libavresample   2.  1.  0 /  2.  1.  0
   libswscale      3.  1.101 /  3.  1.101
   libswresample   1.  1.100 /  1.  1.100
   libpostproc    53.  3.100 / 53.  3.100
Guessed Channel Layout for  Input Stream #0.0 : stereo
Input #0, pulse, from 'alsa_output.pci-0000_00_1b.0.analog-stereo.monitor':
   Duration: N/A, start: 1569718264.806948, bitrate: 1536 kb/s
     Stream #0:0: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
Guessed Channel Layout for  Input Stream #1.0 : stereo
Input #1, pulse, from 'alsa_input.usb-AKM_AK5370-00-AK5370.analog-mono':
   Duration: N/A, start: 1569718264.818249, bitrate: 1536 kb/s
     Stream #1:0: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
[x11grab @ 0x84e2840] Stream #0: not enough frames to estimate rate;
consider increasing probesize
Input #2, x11grab, from ':0.0':
   Duration: N/A, bitrate: N/A
     Stream #2:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1920x1080,
25 fps, 25 tbr, 1000k tbn, 25 tbc
Output pad "default" with type audio of the filter instance
"Parsed_amix_0" of amix not connected to any destination

Une idée ?
--
pierre esq

Le 27/09/2019 à 10:47, Aymeric a écrit :
> Hello,
>
> Étrange effectivement que le micro soit vu comme une entrée stéréo avec un nom "mono" dedans et je me doute qu'il est bien en mono !
> Du coup je ne pense pas que tu ai besoin de changer le format pour le forcer en stéréo.
>
> La vidéo est en yuv444p, je pense que tu peux la réduire en yuv420p sans problème, au niveau qualité tu ne verra pas la différence est ça améliorera la lecture avec les lecteurs, et ça va sûrement réduire l'usage CPU :)
>
> Il y'a aussi un problème avec le thread_queue_size qui doit être aussi liée au fait que ton CPU n'arrive pas à suivre et qui cause la désynchro ou les coupures, on peut essayer de l'augmenter mais je ne suis pas sûr que ça aide vraiment.
>
> Donc je dirais :
> ffmpeg -f pulse -ac 2 -thread_queue_size 512 -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -f pulse -ac 2 -thread_queue_size 512 -i alsa_input.usb-AKM_AK5370-00-AK5370.analog-mono -f x11grab -r 25 -s 1920x1080 -i :0.0 -filter_complex '[0:a][1:a] amix=inputs=2 [audio] ; [2:v] format=yuv420p [video]' -map [audio] -map [video] -c:v libx264 -preset ultrafast capture.mp4
>
> Autre idée, si c'est bien un problème de CPU qui n'arrive pas à suivre, est-ce que tu peux installer le paquet vainfo et exécuter la commande suivante :
>
> vainfo | grep -i EncSlice
>
> Si tu as des lignes avec VAProfileH264 tu peux tester ta capture comme ça suivante, ça utilisera le processeur graphique pour faire l'encodage, qui permettra de faire du temps réel sans soucis :
>
> ffmpeg -vaapi_device /dev/dri/renderD128 -f pulse -ac 2 -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -f pulse -ac -i alsa_input.usb-AKM_AK5370-00-AK5370.analog-mono -f x11grab -r 25 -s 1920x1080 -i :0.0 -filter_complex '[0:a][1:a] amix=inputs=2 [audio] ; [2:v] format=nv12;hwupload [video]' -map [audio] -map [video] -c:v h264_vaapi -qp 18 capture.mp4
>
> Dans tous les cas donne les retours complets des commandes :)
>
> A+
> Aymeric
>
> Le 25 septembre 2019 22:59:29 GMT+02:00, Pierre ESTREM<linux-31 AT culte.org>  a écrit :
>> Bonsoir,
>>
>> Le micro est en mono !
>> La ligne qui lui correspond fait un enregistrement en 2 canaux.
>> Bizarre ou normal ?
>>
>> Effectivement c'est mieux avec des simples quotes :
>>
>> avconv -f pulse -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
>> -f
>> pulse -i alsa_input.usb-AKM_AK5370-00-AK5370.analog-mono
>> -filter_complex
>> '[1:a] aformat=channel_layouts=stereo [mic] ; [0:a] [mic]
>> amix=inputs=2'
>> -f x11grab -r 15 -s 1920x1080 -i :0.0 -vcodec libx264 -preset ultrafast
>>
>> capture.mkv
>>
>> Ca marche avec le format mkv et avi.
>>
>> Avec .mp4 VLC n'affiche RIEN et dit RIEN.
>> J'ai joint le nohup.out associé...
>>
>> Je dois encore vérifié si j'ai des déphasages... ils ne manqueront pas
>> à
>> mon avis...
>>
>> Merci
>> pierre estrem
>>
>>
>> Le 25/09/2019 à 10:40, Aymeric a écrit :
>>> Bonjour,
>>>
>>> Je pense qu'il te manque des quotes pour les filtres, en tout cas la
>> commande dans les quotes ne fonctionnera pas.
>>> -filter_complex '[1:a] .... etc ... inputs=2'
>>>
>>> Sinon, si elle plante, elle doit afficher un message d'erreur, est-ce
>> que tu peux le fournir ?
>>> Tu devrais rester avec le format mp4 qui est quand même plus moderne
>> est mieux que avi, surtout pour du codec H264.
>>> Le mix est effectivement en 48kHz mais est-ce que le flux d'entrée
>> l'ai lui aussi ?
>>> Tu peux donner le retour complet de la commande ffmepg, ça permettra
>> d'avoir des informations.
>>> Aymeric.
>>>
>>> Le 25 septembre 2019 02:06:47 GMT+02:00, Pierre
>> ESTREM<linux-31 AT culte.org>   a écrit :
>>>> Bonjour,
>>>>
>>>> Ce sont deux flux :
>>>> - le flux audio 2 canaux 48 Khz 128 Kb/s constant (mix du micro et
>>>> speakers que tu m'as recommandé).
>>>>    - le flux vidéo (h264)
>>>> Voir résultat de mediainfo en PJ.
>>>>
>>>> La commande "avconv -f pulse -i
>>>> alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -f pulse -i
>>>> alsa_input.usb-AKM_AK5370-00-AK5370.analog-mono -filter_complexe
>> [1:a]
>>>> aformat=channel_layouts=stereo [mic] ; [0:a] [mic] amix=inputs=2 -f
>>>> x11grab -r 15 -s 1920x1080 -i :0.0 -vcodec libx264 -preset ultrafast
>>>> capture.avi" plante.
>>>>
>>>> Donc avec :
>>>> avconv -f pulse -i
>> alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
>>>> -f
>>>> pulse -i alsa_input.usb-AKM_AK5370-00-AK5370.analog-mono
>>>> -filter_complexe amix=inputs=2 -f x11grab -r 15 -s 1920x1080 -i :0.0
>>>> -vcodec libx264 -preset ultrafast capture.avi
>>>>
>>>> cela marcherait, mais j'ai un décalage des sources mic et speakers
>> et
>>>> vidéo trop important.
>>>>
>>>> Le but des vidéos : des démos logicielles pour présenter à de
>> "grands
>>>> débutants".
>>>>
>>>> Je n'ai pas encore essayé le tout (audio + video) en "raw" et 60 Hz.
>>>> Aurais-je alors des choses synchrones ???
>>>>
>>>> Merci
>>>> pierre estrem
>>>>
>>>>
>>>> Le 24/09/2019 à 09:20, Aymeric a écrit :
>>>>> Le 23 septembre 2019 01:00:46 GMT+02:00, Pierre
>>>> ESTREM<linux-31 AT culte.org>    a écrit :
>>>>>> Bonsoir,
>>>>>>
>>>>>> Merci pour ta commande car elle m'a aidé, bien que l'option "-af"
>>>> m'a
>>>>>> provoqué une erreur.
>>>>>>
>>>>>> J'ai fait ceci :
>>>>>>
>>>>>> $ avconv -f pulse -i
>>>> alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
>>>>>> -f pulse -i alsa_input.usb-AKM_AK5370-00-AK5370.analog-mono
>>>>>> -filter_complex amix=inputs=2 -f x11grab -r 15 -s 1920x1080 -i
>> :0.0
>>>>>> -vcodec libx264 -preset ultrafast -y capture.mp4
>>>>>>
>>>>>> Cela fonctionne presque.
>>>>>> J'ai des coupures courtes  (pas de son) par intermitence.
>>>>>> C'est pour cela que j'ai baissé le "rate" à 15 fps, mais c'est
>> idem.
>>>>>> Une astuce pour que le son soit fluide ?
>>>>>>
>>>>> Je pense que c'est un problème d'échantillonnage, les deux flux
>> audio
>>>> ne doivent pas avoir les mêmes fréquences d'échantillonnage.
>>>>> Est-ce que tu peux vérifier que les deux flux audio sont ben
>> 44.1kHz
>>>> oou 48kHz ?
>>>>> Peux tu essayer pour déjà avoir les deux flux en stéréo:
>>>>> -filter_complexe '[1:a] aformat=channel_layouts=stereo [mic] ;
>> [0:a]
>>>> [mic] amix=inputs=2'
>>>>>> J'ai essayé aussi "amerge=inputs=2" et franchement je ne remarque
>>>> pas de
>>>>>> différence avec "amix"...
>>>>>> mix et merge ne signifient-ils pas tout deux  "mélanger" ?
>>>>> amix : mixe plusieurs entrée audio dans une seule sortie audio.
>>>>> amerge : mixe plusieurs entrée audio dans un seul flux multi piste.
>>>>>
>>>>> La différence est subtile mais dans ton cas je pense que amix est
>>>> plus approprié :)
>>>>> Aymeric.
>>>>>
>>>>>> Merci
>>>>>> pierre estrem
>>>>>>
>>>>>>
>>>>>> Le 22/09/2019 à 19:18, Aymeric (via linux-31 Mailing List) a
>> écrit :
>>>>>>> On 21/09/2019 02:25, Pierre ESTREM (via linux-31 Mailing List)
>>>> wrote:
>>>>>>>> Je ne parviens pas à faire de ces 2 commandes 1 seule commande.
>>>>>>>>
>>>>>>>> Pour les speakers :
>>>>>>>>
>>>>>>>> $ avconv -f pulse -i
>>>>>>>> alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -f x11grab -r
>>>> 30
>>>>>> -s
>>>>>>>> 1920x1080 -i :0.0 -vcodec libx264 -preset ultrafast -threads 4
>> -y
>>>>>>>> speakers.mp4
>>>>>>>>
>>>>>>>> Pour le mic :
>>>>>>>>
>>>>>>>> $ avconv -f pulse -i
>>>> alsa_input.usb-AKM_AK5370-00-AK5370.analog-mono
>>>>>>>> -f x11grab -r 30 -s 1920x1080 -i :0.0 -vcodec libx264 -preset
>>>>>>>> ultrafast -threads 4 -y mic.mp4
>>>>>>>>
>>>>>>>> Si je réunis les 2 commandes l'enregistrement du mic passe à la
>>>>>> trappe
>>>>>>>> (en position 2) :
>>>>>>>>
>>>>>>>> $ avconv -f pulse -i
>>>>>>>> alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -f pulse -i
>>>>>>>> alsa_input.usb-AKM_AK5370-00-AK5370.analog-mono -f x11grab -r 30
>>>> -s
>>>>>>>> 1920x1080 -i :0.0 -vcodec libx264 -preset ultrafast -threads 4
>> -y
>>>>>>>> speakers-mic.mp4
>>>>>>>>
>>>>>>>> Comment n'en faire qu'une ligne ?
>>>>>>> Salut,
>>>>>>>
>>>>>>> Il te manque un filtre audio pour regrouper les flux audio dans
>> un
>>>>>> seul
>>>>>>> ou il faudrait changer le codec audio de sortie pour supporter du
>>>>>>> multipiste comme ac3, dts (mais je ne pense pas que ça soit ton
>> but
>>>>>>> recherché).
>>>>>>>
>>>>>>> https://ffmpeg.org/ffmpeg-filters.html#amerge-1
>>>>>>>
>>>>>>> Pas testé, mais un truc du genre devrait faire l’affaire:
>>>>>>>
>>>>>>> ffmpeg -f pulse -i
>>>> alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
>>>>>> -f
>>>>>>> pulse -i alsa_input.usb-AKM_AK5370-00-AK5370.analog-mono -af
>> '[a:0]
>>>>>>> [a:1] amerge=inputs=2' -f x11grab -r 30 -s 1920x1080 -i :0.0
>>>> -vcodec
>>>>>>> libx264 -preset ultrafast -threads 4 -y speakers-mic.mp4
>>>>>>>
>>>>>>> Sinon tu n’as normalement pas besoin de l’option -threads ça le
>>>> fait
>>>>>>> tout seul.
>>>>>>>
>>>>>>> ""
>>>>>>> threads integer (decoding/encoding,video)
>>>>>>>                Set the number of threads to be used, in case the
>>>>>> selected
>>>>>>> codec implementation supports multi-threading.
>>>>>>> [...]
>>>>>>> Default value is auto
>>>>>>>
>>>>>>> ""
>>>>>>>
>>>>>>> A+
>>>>>>>
>>>>>>> PS : Il me semblait que ffmpeg était revenu dans Ubuntu par
>> défaut
>>>> et
>>>>>>> que la "guerre" avconv/ffmpeg était finie…
>>>>>>>
>>>>>>> -- Aymeric
>>>>> Aymeric
>>> Aymeric
> Aymeric



Archives gérées par MHonArc 2.6.19+.

Haut de le page