J'ai joué avec avconv sur Ubuntu et je peux maintenant, par exemple, enregistrer le bureau avec le son d'une carte son. Une chose que je voulais faire était d'enregistrer deux entrées vidéo en même temps, par exemple le bureau et la webcam. J'ai pensé à faire quelque chose comme ça:
avconv \
-f alsa \
-i default \
-acodec flac \
-f video4linux2 \
-r 6 \
-i /dev/video0 \
-f x11grab \
-i :0.0 \
out.mkv
Je pensais que si vous définissez plusieurs entrées vidéo et que le format .mkv peut gérer plusieurs flux vidéo, avconv encodera deux flux vidéo et un flux audio dans un seul fichier. Mais ce n'est pas ce qui se passe:
avconv version 0.8.4-6:0.8.4-0ubuntu0.12.10.1, Copyright (c) 2000-2012 the Libav developers
built on Nov 6 2012 16:51:11 with gcc 4.7.2
[alsa @ 0x1091bc0] capture with some ALSA plugins, especially dsnoop, may hang.
[alsa @ 0x1091bc0] Estimating duration from bitrate, this may be inaccurate
Input #0, alsa, from 'default':
Duration: N/A, start: 1354364317.020350, bitrate: N/A
Stream #0.0: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
[video4linux2 @ 0x10923e0] Estimating duration from bitrate, this may be inaccurate
Input #1, video4linux2, from '/dev/video0':
Duration: N/A, start: 100607.724745, bitrate: 29491 kb/s
Stream #1.0: Video: rawvideo, yuyv422, 640x480, 29491 kb/s, 6 tbr, 1000k tbn, 6 tbc
[x11grab @ 0x107b2a0] device: :0.0+83,87 -> display: :0.0 x: 83 y: 87 width: 854 height: 480
[x11grab @ 0x107b2a0] shared memory extension found
[x11grab @ 0x107b2a0] Estimating duration from bitrate, this may be inaccurate
Input #2, x11grab, from ':0.0+83,87':
Duration: N/A, start: 1354364318.488382, bitrate: 196761 kb/s
Stream #2.0: Video: rawvideo, bgra, 854x480, 196761 kb/s, 15 tbr, 1000k tbn, 15 tbc
Incompatible pixel format 'bgra' for codec 'mpeg4', auto-selecting format 'yuv420p'
[buffer @ 0x107fcc0] w:854 h:480 pixfmt:bgra
[avsink @ 0x10bdf00] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out'
[scale @ 0x10dc680] w:854 h:480 fmt:bgra -> w:854 h:480 fmt:yuv420p flags:0x4
Output #0, matroska, to '.../out.mkv':
Metadata:
encoder : Lavf53.21.0
Stream #0.0: Video: mpeg4, yuv420p, 854x480, q=2-31, 4000 kb/s, 1k tbn, 15 tbc
Stream #0.1: Audio: libvorbis, 48000 Hz, 2 channels, s16
Stream mapping:
Stream #2:0 -> #0:0 (rawvideo -> mpeg4)
Stream #0:0 -> #0:1 (pcm_s16le -> libvorbis)
Press ctrl-c to stop encoding
[mpeg4 @ 0x10bd800] rc buffer underflow
^Cframe= 160 fps= 15 q=2.0 Lsize= 3414kB time=10.66 bitrate=2623.0kbits/s
video:3273kB audio:131kB global headers:4kB muxing overhead 0.165600%
Received signal 2: terminating.
Je ne suis pas sûr qu'il s'agisse d'une question de mappage (quelques options -map à ajouter?) Ou que avconv ne peut tout simplement pas encoder plus d'un flux vidéo à la fois. Donc, est-ce une limitation avconv réelle, ou une limitation des conteneurs disponibles, ou bien je ne trouve tout simplement pas la bonne combinaison d'options de ligne de commande?
-map 0:0 -map 1:0 -map 2:0
voir ce qu'il fait. Vous avez besoin essentiellement de retrouver tous les flux d'entrée (entrée0
,1
,2
) dans le flux de sortie. Je ne peux pas le tester car je n'ai niavconv
ni un système Linux à partir duquel x11grab, mais il semble qu'il n'enregistre que x11grab et l'audio pour le moment.