И снова VLC :)) [Решено]

Изображение пользователя severga.

Народ, кто пользуется(-овался) VLC, подскажите, пожалуйста...
Удалось мне все-таки доковыряться, чтобы он воспроизводил с моего тв-тюнера и даже при этом записывал параллельно в сжатый файл. Но вот беда - никак не могу к выходному файлу звук прикрутить. Видео идет на композитный вход тюнера, а звук - через звуковуху. Так вот что и куда можно дописать в нижеприведенную команду (ну типа: alsa, hw:0,0 и т.п.), чтоб звук записался тоже.

tmp="vlc v4l2:///dev/video0:input=1 --sout #transcode{acodec=wma2,ab=128,vcodec=wmv2,vb=600,deinterlace,hq}:duplicate{dst=\"standard{access=file,mux=avi,dst=$(kdialog --getsavefilename ~/Videos *.avi)}\",dst=\"display{noaudio}\"}"
$tmp

Впринципе, я добился подобного через mencoder, но одновременный просмотр не работает, вернее сказать, он работает на размер задержки перед началом воспроизведения записываемого файла, а потом отключается.

0
AlexBKost - 7 Август, 2016 - 19:52

Устал я сёдня чёто. Совсем нет сил эту длинную команду на запись анализировать, но в конце заметить удалось noaudio, для чего оно там?

И еще, тонер то какой и какой сигнал записывает?

0
severga - 8 Август, 2016 - 11:31
Изображение пользователя severga.

Там первый поток кодировка, а потом разветвление на два: один - вывод в файл, а второй - одновременно (ну почти одновременно, с небольшой задержкой) на экран, чтобы видеть, что пишется (здесь как раз стоит noaudio, чтобы не было эхо (звук с ресивера + чуть сдвинутый записанный уже звук).

Карта - AverTV Satellite Hybrid (A706) (аналоговая часть), композитный вход (поступает только видео сигнал от внешнего тв-ресивера), поэтому звук идет отдельно напрямую с тв-ресивера прямо на звуковую карту компа. Задача - собрать входные видео и звук в один поток. В гуе vlc мне удалось это сделать, а вот в строке - никак... вроде все то же самое пробовал, что и в гуе (дописывал что-то вроде: v4l2:///dev/video0:input=1:input-slave=alsa://hw:0,0), но результат нулевой.

0
AlexBKost - 8 Август, 2016 - 12:00

Так тут еще в цепочке первым стоит ресивер. Нет, я этого неасилю. Великодушно извиняюсь.

0
severga - 8 Август, 2016 - 12:08
Изображение пользователя severga.

Да ресивер то тут не причем, :)) главное vlc сказать, чтоб он кроме видео с тв-тюнера взял звук со звуковой карты... :)

0
AlexBKost - 8 Август, 2016 - 12:13

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

+1
severga - 8 Август, 2016 - 12:42
Изображение пользователя severga.

Кажется, я нашел, в чем проблема! Пробелы бывают значащими! Один товарищ тоже мучился и домучился до того, что нужно писать:

v4l2:///dev/video0:input=1: input-slave=alsa://hw:0,0

вместо:

v4l2:///dev/video0:input=1:input-slave=alsa://hw:0,0

Вот ведь как бывает! Сегодня вечером проверю.

0
dyug - 8 Август, 2016 - 16:02

Кстати, скорее всего именно оно. ибо параметры ввода разделяются пробелами, а двоеточие в данном случае - просто переключатель канала. (что по видео, что по звуку)

+2
severga - 8 Август, 2016 - 22:19
Изображение пользователя severga.

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

Короче, окончательный рабочий вариант следующий (правда, я в нем еще кое-что поменял, кроме проблемных мест, но это не имеет значения):

#!/bin/bash

vlc v4l2:///dev/video0:input=1 --input-slave=pulseaudio:// --sout "#duplicate{dst=\"display{noaudio}\",dst=\"transcode{acodec=mp3,ab=64,vcodec=wmv2,vb=600,deinterlace,hq}:standard{access=file,mux=mkv,dst=$(kdialog --getsavefilename ~/Videos *.mkv)}\"}"

Проблема была, во-первых, в синтаксисе описания второго входного потока, а во-вторых, в самом устройстве, с которого я пытался брать звук. Дело в том, что у меня постоянно занято устройство alsa, так как у меня настроено перенаправление потоков звука (по-другому не получалось настроить звук так, как было необходимо). Поэтому пришлось указать вместо alsa pulseaudio. И все заработало! :)

+1
severga - 9 Август, 2016 - 09:10
Изображение пользователя severga.

Почитал еще справку... Думаю, что можно было написать и с двоеточием, только пробел должен быть перед двоеточием:

v4l2:///dev/video0:input=1 :input-slave=pulseaudio://

0
severga - 11 Август, 2016 - 08:41
Изображение пользователя severga.

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

0
dyug - 11 Август, 2016 - 10:17

откуда запускается скрипт?
Прописаны ли в нем все необходимые переменные?
В качестве примера можно глянуть на описание путей, или полного пути к killall

0
severga - 11 Август, 2016 - 11:12
Изображение пользователя severga.

на скрипт сделан "ярлык", и он иконкой вынесен на панель задач...
а какие переменные нужны в скрипте в данном случае?..
я вот думаю, может с правами что-то на выполнение этой команды?

0
dyug - 11 Август, 2016 - 13:37

PATH описан?
Покажите лучше сам скрипт

0
severga - 11 Август, 2016 - 14:06
Изображение пользователя severga.

ну собственно тот, который чуть выше - на запуск записи ТВ, только еще хочу добавить выключение vlc, если его копии уже были запущены, чтоб человек, который жмакает "Записать", не думал, что там что-то еще работает и может вызвать ошибку или глюк:
#!/bin/bash

killall vlc

vlc v4l2:///dev/video0:input=1 --input-slave=pulseaudio:// --sout "#duplicate{dst=\"display{noaudio}\",dst=\"transcode{acodec=mp3,ab=64,vcodec=wmv2,vb=600,deinterlace,hq}:standard{access=file,mux=mkv,dst=$(kdialog --getsavefilename ~/Videos *.mkv)}\"}"

Не бейте больно, я только учусь... :)

+1
dyug - 11 Август, 2016 - 14:25

/usr/bin/killall vlc
/usr/bin/vlc v4l2:...........
Для начала - так.
я бы конечно очень посоветовал почитать вот это
Это не сверхновое, но я по аналогичному когда-то учился.

0
severga - 11 Август, 2016 - 14:31
Изображение пользователя severga.

проблема в том, что вторая строка выполняется нормально и без пути, а kill - нет.
спасибо! почитаю! я тут много уже себе чтива набрал... вот в отпуск пойду и... :)

0
severga - 11 Август, 2016 - 22:42
Изображение пользователя severga.

В общем при запуске скрипта через терминал он на этом месте выдает "no process found", хотя vlc запущен :(

0
dyug - 12 Август, 2016 - 11:35

тогда стоит проверить как именно vlc отображается...
При запущенном vlc в терминале набрать
ps ax |grep vlc и показать результат здесь.:-)

0
severga - 12 Август, 2016 - 19:58
Изображение пользователя severga.

При запущенном vlc:
[email protected]:~$ ps ax |grep vlc
3520 ?        Sl     0:00 /usr/bin/vlc --started-from-file
3527 pts/0    S+     0:00 grep --color=auto vlc

При отсутствии оного в запущенных:
[email protected]:~$ ps ax |grep vlc
3529 pts/0    S+     0:00 grep --color=auto vlc

Результаты запуска моего скрипта:
[email protected]:~/Scripts$ sh tvrec.sh
: not found: tvrec.sh: ��#!/bin/bash
: not found: tvrec.sh:
: no process found

[email protected]:~/Scripts$ which killall
/usr/bin/killall

А если прописать вашу команду в моем скрипте, пишет следующее:
[email protected]:~/Scripts$ sh tvrec.sh
: not found: tvrec.sh: ��#!/bin/bash
3973 ? Sl 0:00 /usr/bin/vlc --started-from-file 4428 pts/7 S+ 0:00 grep vlc
: no process found

+2
lord_i - 12 Август, 2016 - 22:41
Изображение пользователя lord_i.

Уберите два лишних байта в начале скрипта. Скрипт не понимает каким интерпритатором ему пользоваться

��#!/bin/bash

Наврядли это решит Вашу проблему, но так как сейчас - неправильно.
По поводу проблемы как таковой - попробуйте такую конструкцию:
killall -KILL /usr/bin/vlc

===добавлено чуть позже===
#!/bin/sh

killall vlc

Вот такой скрипт у меня прекрасно киляет влц...

0
severga - 12 Август, 2016 - 23:39
Изображение пользователя severga.

Ребята, спасибо! Похоже, со скриптом даже в моем варианте было все в порядке. Проблема была именно в первых двух байтах. Не понимаю, откуда они взялись: я их туда не писал, и в кате их не видно! создал скрипт в терминале через echo >... и все заработало! Мдяяя...

+2
dyug - 14 Август, 2016 - 18:02

вы его в консоли не смотрели? в частности через mc?
есть подозрение, что там это было бы видно.

0
DarkneSS - 14 Август, 2016 - 20:54
Изображение пользователя DarkneSS.

Да, mcedit отлично помогает в таких случаях. Также diff указывает на наличие, хм, разницы.

0
dyug - 14 Август, 2016 - 17:57

Ну если бы я это увидел раньше, я бы тоже поинтересовался "шо за ...." :-)

0
severga - 14 Август, 2016 - 18:56
Изображение пользователя severga.

теперь скрипты буду писать с нуля - не на старых файлах, и копировать не буду :) это урок мне :)

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры