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: Pierre ESTREM <peterpan31 AT free.fr>
  • To: Linux 31 <linux-31 AT culte.org>
  • Subject: Re: [Linux-31] Capture avec avconv
  • Date: Sun, 29 Sep 2019 03:09:27 +0200

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