Народ, кто пользуется(-овался) 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, но одновременный просмотр не работает, вернее сказать, он работает на размер задержки перед началом воспроизведения записываемого файла, а потом отключается.
Устал я сёдня чёто. Совсем нет сил эту длинную команду на запись анализировать, но в конце заметить удалось noaudio, для чего оно там?
И еще, тонер то какой и какой сигнал записывает?
Там первый поток кодировка, а потом разветвление на два: один - вывод в файл, а второй - одновременно (ну почти одновременно, с небольшой задержкой) на экран, чтобы видеть, что пишется (здесь как раз стоит noaudio, чтобы не было эхо (звук с ресивера + чуть сдвинутый записанный уже звук).
Карта - AverTV Satellite Hybrid (A706) (аналоговая часть), композитный вход (поступает только видео сигнал от внешнего тв-ресивера), поэтому звук идет отдельно напрямую с тв-ресивера прямо на звуковую карту компа. Задача - собрать входные видео и звук в один поток. В гуе vlc мне удалось это сделать, а вот в строке - никак... вроде все то же самое пробовал, что и в гуе (дописывал что-то вроде: v4l2:///dev/video0:input=1:input-slave=alsa://hw:0,0), но результат нулевой.
Так тут еще в цепочке первым стоит ресивер. Нет, я этого неасилю. Великодушно извиняюсь.
Да ресивер то тут не причем, :)) главное vlc сказать, чтоб он кроме видео с тв-тюнера взял звук со звуковой карты... :)
Я в том плане, что без ресивера, запись возможно было-бы организовать другими средствами. Теперь понимаю, что нельзя.
Кажется, я нашел, в чем проблема! Пробелы бывают значащими! Один товарищ тоже мучился и домучился до того, что нужно писать:
v4l2:///dev/video0:input=1: input-slave=alsa://hw:0,0
вместо:
v4l2:///dev/video0:input=1:input-slave=alsa://hw:0,0
Вот ведь как бывает! Сегодня вечером проверю.
Кстати, скорее всего именно оно. ибо параметры ввода разделяются пробелами, а двоеточие в данном случае - просто переключатель канала. (что по видео, что по звуку)
В общем проблема решилась. После танцев с бубном на компе, на котором надо было настроить, выявилось, что загвоздок было целых две.
Короче, окончательный рабочий вариант следующий (правда, я в нем еще кое-что поменял, кроме проблемных мест, но это не имеет значения):
#!/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. И все заработало! :)
Почитал еще справку... Думаю, что можно было написать и с двоеточием, только пробел должен быть перед двоеточием:
v4l2:///dev/video0:input=1 :input-slave=pulseaudio://
Народ, подскажите еще, пожалуйста, почему команда
killall vlc
из терминала срабатывает, а из скрипта - нет. Плохо пока разбираюсь в консоли.
откуда запускается скрипт?
Прописаны ли в нем все необходимые переменные?
В качестве примера можно глянуть на описание путей, или полного пути к killall
на скрипт сделан "ярлык", и он иконкой вынесен на панель задач...
а какие переменные нужны в скрипте в данном случае?..
я вот думаю, может с правами что-то на выполнение этой команды?
PATH описан?
Покажите лучше сам скрипт
ну собственно тот, который чуть выше - на запуск записи ТВ, только еще хочу добавить выключение 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)}\"}"
Не бейте больно, я только учусь... :)
/usr/bin/killall vlc
/usr/bin/vlc v4l2:...........
Для начала - так.
я бы конечно очень посоветовал почитать вот это
Это не сверхновое, но я по аналогичному когда-то учился.
проблема в том, что вторая строка выполняется нормально и без пути, а kill - нет.
спасибо! почитаю! я тут много уже себе чтива набрал... вот в отпуск пойду и... :)
В общем при запуске скрипта через терминал он на этом месте выдает "no process found", хотя vlc запущен :(
тогда стоит проверить как именно vlc отображается...
При запущенном vlc в терминале набрать
ps ax |grep vlc
и показать результат здесь.:-)При запущенном vlc:
alex@anchar:~$ ps ax |grep vlc
3520 ? Sl 0:00 /usr/bin/vlc --started-from-file
3527 pts/0 S+ 0:00 grep --color=auto vlc
При отсутствии оного в запущенных:
alex@anchar:~$ ps ax |grep vlc
3529 pts/0 S+ 0:00 grep --color=auto vlc
Результаты запуска моего скрипта:
alex@anchar:~/Scripts$ sh tvrec.sh
: not found: tvrec.sh: ��#!/bin/bash
: not found: tvrec.sh:
: no process found
alex@anchar:~/Scripts$ which killall
/usr/bin/killall
А если прописать вашу команду в моем скрипте, пишет следующее:
alex@anchar:~/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
Уберите два лишних байта в начале скрипта. Скрипт не понимает каким интерпритатором ему пользоваться
Наврядли это решит Вашу проблему, но так как сейчас - неправильно.
По поводу проблемы как таковой - попробуйте такую конструкцию:
killall -KILL /usr/bin/vlc
===добавлено чуть позже===
#!/bin/sh
killall vlc
Вот такой скрипт у меня прекрасно киляет влц...
Ребята, спасибо! Похоже, со скриптом даже в моем варианте было все в порядке. Проблема была именно в первых двух байтах. Не понимаю, откуда они взялись: я их туда не писал, и в кате их не видно! создал скрипт в терминале через echo >... и все заработало! Мдяяя...
вы его в консоли не смотрели? в частности через mc?
есть подозрение, что там это было бы видно.
Да, mcedit отлично помогает в таких случаях. Также diff указывает на наличие, хм, разницы.
Ну если бы я это увидел раньше, я бы тоже поинтересовался "шо за ...." :-)
теперь скрипты буду писать с нуля - не на старых файлах, и копировать не буду :) это урок мне :)
Отправить комментарий