Tvtime + ffmpeg + alsa

Автор NBight, 04 июня 2019, 13:37:09

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

NBight

Прошу помощи, так как самостоятельно разобраться не выходит.

Есть Debian GNU/Linux 9.9 (stretch), тв тюнер Beholder 507 fm, tvtime, ffmpeg, alsa.

Я хочу настроить запись видео и звука с тв тюнера с помощью ffmpeg. Для записи я использую команду

ffmpeg  -f video4linux2 -s 320x240 -r 25 -i /dev/video0 -f alsa -ac 2 -i hw:1,0 -acodec libmp3lame -ab 96k -vf "drawtext=fontcolor=white:fontsize=12:fontfile='/usr/share/fonts/truetype/freefont/FreeSans.ttf':x=20:y=20:text='$(date +%Y_%m_%d)_%{localtime\:%X}'" -b 256K -async 1 -t 00:00:05 /file.mp4

Результатом работы команды я получаю запись видео с тв тюнера, но звука в нём нет, при этом звуковая дорожка в видеофайле присутствует.

Я перепробовал всё, что только в голову пришло, и никак не могу добиться звука. При этом в самом tvtime звук есть.
P.S. в alsamixer все дороги подняты.


с тюнером проблем нет, он настроен исправно:

pi@pi:~$ sudo dmesg |grep saa
[    7.564806] saa7134: saa7130/34: v4l2 driver version 0, 2, 17 loaded
[    7.565195] saa7134: saa7134[0]: found at 0000:02:01.0, rev: 1, irq: 21, latency: 32, mmio: 0xfb001000
[    7.565206] saa7134: saa7134[0]: subsystem: 5ace:5070, board: Beholder BeholdTV 507 FM / BeholdTV 509 FM [card=127,insmod option]
[    7.565234] saa7134: saa7134[0]: board init: gpio is 0
[    7.872281] input: saa7134 IR (Beholder BeholdTV 5 as /devices/pci0000:00/0000:00:1e.0/0000:02:01.0/rc/rc0/input6
[    7.872447] rc rc0: saa7134 IR (Beholder BeholdTV 5 as /devices/pci0000:00/0000:00:1e.0/0000:02:01.0/rc/rc0
[    8.036028] saa7134: i2c eeprom 00: ce 5a 70 50 54 20 00 00 00 00 00 00 00 00 00 01
[    8.036032] saa7134: i2c eeprom 10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    8.036034] saa7134: i2c eeprom 20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    8.036035] saa7134: i2c eeprom 30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    8.036037] saa7134: i2c eeprom 40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    8.036038] saa7134: i2c eeprom 50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    8.036040] saa7134: i2c eeprom 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    8.036041] saa7134: i2c eeprom 70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    8.036043] saa7134: i2c eeprom 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    8.036044] saa7134: i2c eeprom 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    8.036045] saa7134: i2c eeprom a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    8.036047] saa7134: i2c eeprom b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    8.036048] saa7134: i2c eeprom c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    8.036050] saa7134: i2c eeprom d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    8.036051] saa7134: i2c eeprom e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[    8.036053] saa7134: i2c eeprom f0: 42 54 56 30 30 30 30 ff ff ff ff ff ff ff ff ff
[    8.056065] saa7134: i2c scan: found device @ 0x86  [tda9887]
[    8.068057] saa7134: i2c scan: found device @ 0xa0  [eeprom]
[    8.084036] saa7134: i2c scan: found device @ 0xc0  [tuner (analog)]
[    9.076179] saa7134: saa7134[0]: registered device video0 [v4l2]
[    9.076457] saa7134: saa7134[0]: registered device vbi0
[    9.076648] saa7134: saa7134[0]: registered device radio0
[    9.239869] saa7134_alsa: saa7134 ALSA driver for DMA sound loaded
[    9.239964] saa7134_alsa: saa7134[0]/alsa: saa7134[0] at 0xfb001000 irq 21 registered as card -1


pi@pi:~$ cat /etc/modprobe.d/saa7134.conf
alias char-major-81 videodev
alias char-major-81-0 saa7134
options saa7134 tuner=38 card=127 secam=d i2c_scan=1 alsa=1
options tuner secam=d
options tda9887 port2=0 port1=1


pi@pi:~$ cat /proc/asound/cards
0 [ICH5           ]: ICH4 - Intel ICH5
                      Intel ICH5 with ALC850 at irq 17
1 [SAA7134        ]: SAA7134 - SAA7134
                      saa7134[0] at 0xfb001000 irq 21


Но, что кажется мне весьма странным, здесь я тюнер не увидел:
pi@pi:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ICH5 [Intel ICH5], device 0: Intel ICH [Intel ICH5]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: ICH5 [Intel ICH5], device 4: Intel ICH - IEC958 [Intel ICH5 - IEC958]
  Subdevices: 1/1
  Subdevice #0: subdevice #0


и даже в alsamixer я вижу:

|                           /proc/asound/devices ───────┐                    │
│                    │  2: [ 0]   : control                        │                    │
│                    │  3: [ 0- 0]: digital audio playback│                    │
│                    │  4: [ 0- 0]: digital audio capture │                    │
│                    │  5: [ 0- 1]: digital audio capture │                    │
│                    │  6: [ 0- 2]: digital audio capture │                    │
│                    │  7: [ 0- 3]: digital audio capture │                    │
│                    │  8: [ 0- 4]: digital audio playback│                    │
│                    │  9: [ 1]   : control                        │                    │
│                    │ 10: [ 1- 0]: digital audio capture │                    │
│                    │ 33:        : timer     


я вижу, что  устройство 1-0 есть, digital audio capture, это и есть тюнер, но это не playback device.

Касаемо настроек Alsa, может косяк зарылся здесь?

pi@pi:~$ ls -l /proc/asound/
итого 0
dr-xr-xr-x 9 root root 0 июн  4 13:28 card0
dr-xr-xr-x 3 root root 0 июн  4 13:28 card1
-r--r--r-- 1 root root 0 июн  4 13:28 cards
-r--r--r-- 1 root root 0 июн  4 13:28 devices
lrwxrwxrwx 1 root root 5 июн  4 13:28 ICH5 -> card0
-r--r--r-- 1 root root 0 июн  4 13:28 modules
dr-xr-xr-x 2 root root 0 июн  4 13:28 oss
-r--r--r-- 1 root root 0 июн  4 13:28 pcm
lrwxrwxrwx 1 root root 5 июн  4 13:28 SAA7134 -> card1
dr-xr-xr-x 2 root root 0 июн  4 13:28 seq
-r--r--r-- 1 root root 0 июн  4 13:28 timers
-r--r--r-- 1 root root 0 июн  4 13:28 version



pi@pi:~$ cat /etc/asound.conf
pcm.!default {
    type hw
    card SAA7134

}
ctl.!default {
    type hw
    card SAA7134
}


В файле /usr/share/alsa/alsa.conf поменял

defaults.ctl.card 1
defaults.pcm.card 1


При такой конфигурации при запуске tvtime, я вижу ошибку типа
Alsa devices: cap: hw:1,0 (/dev/video0), out: default
alsa: Cannot open playback device default: Нет такого файла или каталога

В чем может быть проблема? по идее звук должен записаться вместе с видео, но его нет -_- в каком направлении вообще рыть?
Как добиться записи видео со звуком?

p.s пробовал играться с настройками, ставил card 0 вместо card SAA7134, менял звуковое устройство по умолчанию, в записи звука всё равно нет.

Выход A-out с тюнера физически соединил со входом line in внутренней звуковой карты. Пытался записывать так - безрезультатно. с тюнера звук приходит в line in, и я его слышу (только когда включен tvtime), но в записи все равно звука нет.

NBight

#1
Понял, что глупость сделал:
alsa: Cannot open playback device default: Нет такого файла или каталога
тут всё написано. поменял обратно

pi@pi:~$ cat /etc/asound.conf
pcm.!default {
    type hw
    card 0

}
ctl.!default {
    type hw
    card 0
}


В файле /usr/share/alsa/alsa.conf поменял

defaults.ctl.card 0
defaults.pcm.card 0


Теперь при запуске tvtime вижу

alsa: Failed to set a supported rate: Операция не позволена
alsa: setparams failed

попытался записать звук с внутренней звуковой карты

ffmpeg  -f video4linux2 -s 320x240 -r 25 -i /dev/video0 -f alsa -ac 2 -i [b]hw:0,0[/b] -acodec libmp3lame -ab 96k -vf "drawtext=fontcolor=white:fontsize=12:fontfile='/usr/share/fonts/truetype/freefont/FreeSans.ttf':x=20:y=20:text='$(date +%Y_%m_%d)_%{localtime\:%X}'" -b 256K -async 1 -t 00:00:05 /file.mp4

толку нет. мне кажется что tvtime закрыт, и звук в linein внутренней звуковой просто не приходит, а он появляется только когда tvtime открываешь. но когда он открыт, записывать нельзя - устройство занято.

ogost

Прошу отредактировать ваши посты и заключить выхлоп консоли в тэг "код" (он находится над смайликами)

ferum

NBightвсё зависит от конкретной задачи которую вы перед собой ставите. Если вы настаиваете на использовании Tvtime то вам наверное надо просто захватывать видео и звук с экрана. На jessie я делал это средствами программы https://packages.debian.org/stretch/gtk-recordmydesktop проблемы со звуком легко решались http://thexnews.com/ubuntu/recordMyDesktop%20проблемы%20со%20звуком.html
Но если ваша цель записывать контент тв каналов, думаю проще и лучше использовать связку vdr+kodi где запись  предусмотрена штатными средствами. Просто смотрите канал, жмёте на кнопку запись и записываете. После включения записи kodi  можно закрыть , пока не понадобится завершить запись. В интерфейсе предусмотрена и запись по расписанию. Со спутниковыми каналами я это всё проделывал, для эфирных надо погуглить на тему как их сканировать или создавать, скорее всего через w-scan.
Русские дебианщики против цифрового слабоумия !

Ogis1975

Цитата: NBight от 04 июня 2019, 14:45:40
Понял, что глупость сделал:
alsa: Cannot open playback device default: Нет такого файла или каталога
тут всё написано. поменял обратно

pi@pi:~$ cat /etc/asound.conf
pcm.!default {
    type hw
    card 0

}
ctl.!default {
    type hw
    card 0
}

В файле /usr/share/alsa/alsa.conf поменял

defaults.ctl.card 0
defaults.pcm.card 0

Было бы проще в домашней папке создать файлик, под названием .asoundrc и туда записать значения...

NBight

#5
Цитата: ferum от 04 июня 2019, 21:36:47
NBightвсё зависит от конкретной задачи которую вы перед собой ставите. Если вы настаиваете на использовании Tvtime то вам наверное надо просто захватывать видео и звук с экрана. На jessie я делал это средствами программы https://packages.debian.org/stretch/gtk-recordmydesktop проблемы со звуком легко решались http://thexnews.com/ubuntu/recordMyDesktop%20проблемы%20со%20звуком.html
Но если ваша цель записывать контент тв каналов, думаю проще и лучше использовать связку vdr+kodi где запись  предусмотрена штатными средствами. Просто смотрите канал, жмёте на кнопку запись и записываете. После включения записи kodi  можно закрыть , пока не понадобится завершить запись. В интерфейсе предусмотрена и запись по расписанию. Со спутниковыми каналами я это всё проделывал, для эфирных надо погуглить на тему как их сканировать или создавать, скорее всего через w-scan.


У меня задача записывать мониторинг канала. Соответственно в записи видео нужно наличии времени даты, поэтому я хотел использовать ffmpeg + -vf. если бы не звук, то получилось бы отлично.

Спасибо за совет, попробую vdr + kodi

также попробовал через vlc записывать - та же история. звук в vlc есть, а в записи он исчез. не понимаю что происходит