[РЕШЕНО] mpv - запись видео и звука с вебкамеры

rintmax
но звук не записан - тишина
[encode] audio: encoded 0 bytes
Из той же вики, синхронизацию включить попробовать.

У меня на алсе работает звук видео пишется, пульсу лень ставить проверять

[oleg@vs220 tmp]$ mpv  --no-config --demuxer-lavf-o=timestamps=abs av://v4l2:/dev/video0 --profile=low-latency --audio-file=av://alsa:default:CARD=Webcam --untimed -o /tmp/capture.avi
 (+) Video --vid=1 (rawvideo 1280x720 10.000fps)
 (+) Audio --aid=1 'alsa:default:CARD=Webcam' (pcm_s16le 2ch 48000Hz) (external)
[ao/lavc] Opening encoder: libmp3lame MP3 (MPEG audio layer 3) [libmp3lame]
AO: [lavc] 48000Hz stereo 2ch s16p
[autoconvert] Converting yuyv422 -> yuv420p
VO: [lavc] 1280x720 yuv420p
[vo/lavc] Opening encoder: MPEG-4 part 2 [mpeg4]
[encode] Opening output file: /tmp/capture.avi
[encode] Opening muxer: AVI (Audio Video Interleaved) [avi]
AV: 447301:22:44 / 447301:22:44 (100%) A-V: -0.096 ct:  0.221 {953.2min 10.0fps 2500.0MB}
[ffmpeg/demuxer] video4linux2,v4l2: Some buffers are still owned by the caller on close.
[ffmpeg] ioctl(VIDIOC_QBUF): Bad file descriptor

[encode] video: encoded 310617 bytes
[encode] audio: encoded 95232 bytes
[encode] muxing overhead 104325 bytes
Exiting... (Quit)
-
[oleg@vs220 tmp]$ mpv '/tmp/capture.avi'
Warning: option --cache-secs is deprecated and might be removed in the future (will use unlimited time).
 (+) Video --vid=1 (mpeg4 1280x720 600.000fps)
 (+) Audio --aid=1 (mp3 2ch 48000Hz)
AO: [alsa] 48000Hz stereo 2ch float
VO: [gpu] 1280x720 yuv420p
AV: 00:00:04 / 00:00:06 (80%) A-V:  0.000
Saving state.

Exiting... (Quit)
vs220
Спасибо!
Пока не получается, устройство 'alsa/usbstream:CARD=Camera' (PC Camera/USB Stream Output) по выводу mpv –audio-device=help есть, но mpv его открыть не может, а устройство 'pulse:alsa_input.usb-V_Micro._Corp._PC_Camera-01.mono-fallback' исчезло из вывода. Вероятно после suspend'а.
$ mpv --no-config --demuxer-lavf-o=timestamps=abs av://v4l2:/dev/video0 --profile=low-latency --audio-file=av://alsa:usbstream:CARD=Camera --untimed -o /tmp/capture.avi
[ffmpeg/demuxer] video4linux2,v4l2: Time per frame unknown
ALSA lib pcm_usb_stream.c:508:(_snd_pcm_usb_stream_open) Unknown field hint
[ffmpeg/demuxer] alsa: cannot open audio device usbstream:CARD=Camera (Invalid argument)
[lavf] avformat_open_input() failed
Can not open external file av://alsa:usbstream:CARD=Camera.
 (+) Video --vid=1 (mjpeg 640x480)
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
[autoconvert] Converting yuvj422p -> yuv420p
[ffmpeg] swscaler: deprecated pixel format used, make sure you did set range correctly
VO: [lavc] 640x480 yuv420p
[vo/lavc] Opening encoder: MPEG-4 part 2 [mpeg4]
[encode] Opening output file: /tmp/capture.avi
[encode] Opening muxer: AVI (Audio Video Interleaved) [avi]
V: 04:21:30 / 04:21:30 (100%) {8.4min 19.9fps 0.0MB}
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
V: 04:21:30 / 04:21:30 (100%) {23.7min 14.1fps 0.0MB}
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
V: 04:21:30 / 04:21:30 (100%) {34.3min 14.6fps 0.0MB}
...
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
V: 04:21:33 / 04:21:33 (100%) {508.9min 15.1fps 0.0MB}
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
[ffmpeg/demuxer] video4linux2,v4l2: Some buffers are still owned by the caller on close.
[ffmpeg] ioctl(VIDIOC_QBUF): Bad file descriptor

[encode] video: encoded 56915 bytes
[encode] audio: encoded 0 bytes
[encode] muxing overhead 49129 bytes
Exiting... (Quit)
Продолжу завтра!
rintmax
alsa:usbstream:CARD=Camera
cannot open audio device usbstream:CARD=Camera
Can not open external file av://alsa:usbstream:CARD=Camera
Неправильное устройство указали. usbstream надо тогда в конфиге алсы настраивать и пульсу скорее всего останавливать
для алсы глянуть
arecord -L
для пульсы
pactl list sources
в pavucontrol можно настроить на дефолт нужный микрофон
vs220
Пробую через pulse
$ pactl list sources | grep Имя
        Имя: alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
        Имя: alsa_input.usb-V_Micro._Corp._PC_Camera-01.mono-fallback
В системе один микрофон, в pavucontrol настроен на default.
$ mpv --no-config --demuxer-lavf-o=timestamps=abs --demuxer-lavf-o=timestamps=abs av://v4l2:/dev/video0 --profile=low-latency --audio-file=av://pulse:alsa_input.usb-V_Micro._Corp._PC_Camera-01.mono-fallback --untimed -o /tmp/capture.avi
[ffmpeg/demuxer] video4linux2,v4l2: Time per frame unknown
 (+) Video --vid=1 (mjpeg 640x480)
 (+) Audio --aid=1 'pulse:alsa_input.usb-V_Micro._Corp._PC_Camera-01.mono-fallback' (pcm_s16le 2ch 48000Hz) (external)
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
[autoconvert] Converting yuvj422p -> yuv420p
[ffmpeg] swscaler: deprecated pixel format used, make sure you did set range correctly
VO: [lavc] 640x480 yuv420p
[vo/lavc] Opening encoder: MPEG-4 part 2 [mpeg4]
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
...
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
[ao/lavc] Opening encoder: libmp3lame MP3 (MPEG audio layer 3) [libmp3lame]
[encode] Opening output file: /tmp/capture.avi
[encode] Opening muxer: AVI (Audio Video Interleaved) [avi]
AO: [lavc] 48000Hz stereo 2ch s16p
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
AV: 00:49:01 / 00:49:02 (100%) A-V:  0.000 {2.6min 65.0fps 0.0MB}
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
AV: 00:49:02 / 00:49:02 (100%) A-V:  0.000 {9.1min 330.9fps 0.0MB}
...
AV: 00:49:04 / 00:49:04 (100%) A-V:  0.000 {342.4min 23.9fps 0.0MB}
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
[ffmpeg/demuxer] video4linux2,v4l2: Some buffers are still owned by the caller on close.
[ffmpeg] ioctl(VIDIOC_QBUF): Bad file descriptor

[encode] video: encoded 74756 bytes
[encode] audio: encoded 0 bytes
[encode] muxing overhead 56134 bytes
Exiting... (Quit)
В трее (KDE) значек микрофона появляется на время записи.
Unknown timestamps - из-за отсутствия в аудио канале данных (не с чем видео данные синхронизировать)?

Пробую через alsa
systemctl --user stop pulseaudio.socket && systemctl --user stop pulseaudio.service && ps -e | grep pulse
$ arecord -L | grep Camera
sysdefault:CARD=Camera
    PC Camera, USB Audio
front:CARD=Camera,DEV=0
    PC Camera, USB Audio
usbstream:CARD=Camera
    PC Camera
$ mpv --no-config --demuxer-lavf-o=timestamps=abs --demuxer-lavf-o=timestamps=abs av://v4l2:/dev/video0 --profile=low-latency --audio-file=av://alsa:sysdefault:CARD=Camera --untimed -o /tmp/capture.avi
[ffmpeg/demuxer] video4linux2,v4l2: Time per frame unknown
 (+) Video --vid=1 (mjpeg 640x480)
 (+) Audio --aid=1 'alsa:sysdefault:CARD=Camera' (pcm_s16le 2ch 48000Hz) (external)
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
[autoconvert] Converting yuvj422p -> yuv420p
[ffmpeg] swscaler: deprecated pixel format used, make sure you did set range correctly
VO: [lavc] 640x480 yuv420p
[vo/lavc] Opening encoder: MPEG-4 part 2 [mpeg4]
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
...
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
[ao/lavc] Opening encoder: libmp3lame MP3 (MPEG audio layer 3) [libmp3lame]
[encode] Opening output file: /tmp/capture.avi
[encode] Opening muxer: AVI (Audio Video Interleaved) [avi]
AO: [lavc] 48000Hz stereo 2ch s16p
Invalid audio PTS: 1610355691.444364 -> 1610355691.239747
Invalid audio PTS: 1610355691.367747 -> 1610355691.083529
AV: 00:13:56 / 00:13:56 (100%) A-V:  0.000 {4.9min 407.8fps 0.0MB}
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
...
AV: 00:13:57 / 00:13:58 (100%) A-V:  0.000 {178.6min 26.1fps 0.0MB}
[ffmpeg/demuxer] video4linux2,v4l2: Unknown timestamps
[ffmpeg/demuxer] video4linux2,v4l2: Some buffers are still owned by the caller on close.
[ffmpeg] ioctl(VIDIOC_QBUF): Bad file descriptor

[encode] video: encoded 58908 bytes
[encode] audio: encoded 0 bytes
[encode] muxing overhead 37238 bytes
Exiting... (Quit)
Два раза demuxer-lavf-o=timestamps=abs указали зачем?
С входом попробовать еще audio-file=av://pulse:alsa_input.usb-V_Micro._Corp._PC_Camera-01.mono-fallback как у вас там где отдельно от видео писало.
И просто av://pulse:default

Но еще раз - это все таки проигрыватель, для записи чистый ffmpeg имхо
vs220
Два раза demuxer-lavf-o=timestamps=abs
Да уж, не заметил. Но с одним параметром вывод аналогичный.

vs220
С входом попробовать еще audio-file=av://pulse:alsa_input.usb-V_Micro._Corp._PC_Camera-01.mono-fallback

Пробывал, в сегодняшнем сообщении:
В системе один микрофон, в pavucontrol настроен на default.
$ mpv --no-config --demuxer-lavf-o=timestamps=abs --demuxer-lavf-o=timestamps=abs av://v4l2:/dev/video0 --profile=low-latency --audio-file=av://pulse:alsa_input.usb-V_Micro._Corp._PC_Camera-01.mono-fallback --untimed -o /tmp/capture.avi

vs220
И просто av://pulse:default
Вывод тот же.

vs220
Но еще раз - это все таки проигрыватель, для записи чистый ffmpeg имхо
Согласен, но у вас пишет )))
Проверил на другой камере, запись звука появилась. Без опции –demuxer-lavf-o=timestamps=abs - звук не пишет.
$ mpv --no-config --demuxer-lavf-o=timestamps=abs av://v4l2:/dev/video0 --profile=low-latency --audio-file=av://alsa:sysdefault:CARD=U0x46d0x81b --untimed -o /tmp/capture.mp4
 (+) Video --vid=1 (rawvideo 960x720 10.000fps)
 (+) Audio --aid=1 'alsa:sysdefault:CARD=U0x46d0x81b' (pcm_s16le 2ch 48000Hz) (external)
[ao/lavc] Opening encoder: AAC (Advanced Audio Coding) [aac]
AO: [lavc] 48000Hz stereo 2ch floatp
[autoconvert] Converting yuyv422 -> yuv422p
VO: [lavc] 960x720 yuv422p
[vo/lavc] Opening encoder: libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 [libx264]
[ffmpeg] libx264: MB rate (64800000) > level limit (16711680)
[encode] Opening output file: /tmp/capture.mp4
[encode] Opening muxer: MP4 (MPEG-4 Part 14) [mp4]
AV: 447563:14:39 / 447563:14:39 (100%) A-V: -0.072 ct:  1.584 {1242.0min 3.2fps 2500.5MB}
[ffmpeg/demuxer] video4linux2,v4l2: Some buffers are still owned by the caller on close.
[ffmpeg] ioctl(VIDIOC_QBUF): Bad file descriptor

[encode] video: encoded 672172 bytes
[encode] audio: encoded 125314 bytes
[encode] muxing overhead 5213 bytes
Exiting... (Quit)
При воспроизведении обнаруживает рассинхронизацию.
$ mpv /tmp/capture.mp4
 (+) Video --vid=1 (*) (h264 960x720 6.549fps)
 (+) Audio --aid=1 (*) (aac 2ch 48000Hz)
AO: [pulse] 48000Hz stereo 2ch float
VO: [gpu] 960x720 yuv422p
AV: 00:00:02 / 00:00:09 (22%) A-V:  0.000

Audio/Video desynchronisation detected! Possible reasons include too slow
hardware, temporary CPU spikes, broken drivers, and broken files. Audio
position will not match to the video (see A-V status field).

AV: 00:00:09 / 00:00:09 (99%) A-V:  0.000 ct:  1.556

Exiting... (End of file)
Но в целом, вполне нормально - при проигрывании в начале файла есть "разбег" видео и звука, потом синхронизация восстанавливается.
vs220
Спасибо за помощь!

Holden
После пары клипов с камеры 1280*720 эйфория поубавилась (нет предела совершенству!). Веб камеры с большим МП и FPS как-то странно выглядят по ценам. Разбудили интерес к сетевым камерам ))).
 
Зарегистрироваться или войдите чтобы оставить сообщение.