Algo melhor que Cheese para captura de vídeo?

56

Preciso gravar um vídeo da minha webcam e, embora o Cheese funcione, ele não possui configurações e gera apenas o formato de webm cheio de gagueiras etc.

Não consigo encontrar nenhuma alternativa ...

HDave
fonte

Respostas:

57

O Guvcview visa fornecer uma interface GTK simples para capturar e visualizar vídeo de dispositivos suportados pelo driver UVC do Linux, embora também deva funcionar com qualquer dispositivo compatível com v4l2.

O projeto é baseado no luvcview para renderização de vídeo, mas todos os controles são construídos usando uma interface GTK2.

O Guvcview (desde a versão 0.9.9) possui apenas uma janela de controle (no console guvcview --control_only:), que permite o controle de imagem em outros aplicativos, como ekiga, cheese, mplayer, skype ...

Áudio.

O suporte de áudio do Guvcview é baseado na biblioteca portaudio, até a versão 0.9.3, a API de bloqueio era usada para captura de áudio, já que na versão 0.9.4 o método de retorno de chamada é usado, o que proporciona melhor desempenho, também é o método preferido para o API do portaudio.

Todas as interfaces (ALSA, OSD, JACK, ...) suportadas pelo portaudio devem estar disponíveis no guvcview. Apenas verifique se o portaudio foi compilado com as interfaces desejadas ativadas.

Controles dinâmicos UVC.

O driver UVC do Linux possui uma implementação para controles de extensão (são controles específicos do fornecedor e são suportados na especificação UVC). Eles são chamados de controles dinâmicos, pois devem ser carregados dinamicamente no driver.

Até hoje, apenas a logitech forneceu especificações para seus controles de extensão de webcam UVC, estes são suportados pelo guvcview.

Nas novas revisões de driver, são necessários direitos de administrador para adicionar esses controles ao driver; portanto, existem basicamente duas soluções:

  1. inicie o guvcview como root (usando sudo) pelo menos uma vez por sessão, desde a versão 1.2.0, você pode fazer isso com a opção --add_ctrlsevitando a necessidade de iniciar completamente o guvcview

  2. instalar libwebcam, este software possui um script udev que deve adicionar os controles necessários à sua câmera logitech.

Instale o Guvcview no Ubuntu 12.04 via ppa

sudo add-apt-repository ppa:pj-assis/ppa
sudo apt-get update
sudo apt-get install guvcview
ptheo
fonte
11
Este aplicativo é incrível. Entre - a maioria dos controles funcionou bem sem ter que fazer nada.
HDave
O queijo simplesmente não funcionou para mim, o Guvcview funcionou perfeitamente. A única coisa foi encontrar a fonte certa de entrada de áudio demorou um minuto para tocar, mas ainda não precisou ler o manual ou fazer mágica cli para fazê-lo funcionar.
jdarling
2
Por toda a excelente aparência do guvcview, ele está atualmente arruinado (pelo menos em 16.04) por bugs.launchpad.net/ubuntu/+source/guvcview/+bug/1558060 (vídeo congelado). Em vez disso, estou usando a linha mencoder em commandlinefu.com/commands/view/3498/… (ajustando a largura e a altura) e funciona perfeitamente.
Miguev 17/07
@miguev Esta versão parece corrigir o problema.
Skippy le Grand Gourou
"O erro do Guvcview não pôde iniciar um fluxo de vídeo no dispositivo" GUVCVIEW (1): Erro do Guvcview índice de resolução inválido GUVCVIEW: índice de resolução inválido Falha na segmentação (núcleo despejado)
Aaron Franke
14

Se você precisar de um novo aplicativo, o guvcviewInstale guvcview é bom.

https://launchpad.net/guvcview

JoeSteiger
fonte
+1, acabou de experimentar este aplicativo devido a um problema com a gravação de áudio no queijo. Trabalhou um prazer!
Ash
11

Parte desta pergunta vem da resposta nesta pergunta: Grave a partir de fitas VHS .

Precisamos garantir que o software esteja coletando os dados adequados do dispositivo certo. Vamos soltar uma consulta no terminal que nos permitirá ver quantos dispositivos estão conectados ao seu computador, que podem ser usados ​​para coletar imagens, use este comando em um terminal:

ls -l /dev/video*

Os resultados devem ser assim:

geppettvs@DYLAN:~$ ls -l /dev/video*
crw-rw----+ 1 root video 81, 0 2012-04-17 19:53 /dev/video0
crw-rw----+ 1 root video 81, 1 2012-04-17 19:53 /dev/video1
crw-rw----+ 1 root video 81, 2 2012-04-18 17:54 /dev/video2
geppettvs@DYLAN:~$ 

No meu caso, tenho 3 dispositivos de vídeo, dos quais um é o sintonizador de TV USB usado para assistir / gravar programas de TV ao vivo / conversor VTR / VCR / RF-DVD / vídeo e outros sinais de RF.

Os outros dispositivos são uma webcam USB conectada aos slots USB do computador.

Se sua webcam estiver com microfone, tanto o áudio quanto o vídeo poderão ser gravados usando o script tvcap de Andreas Schalk , código que eu coloco aqui para sua conveniência:

#!/bin/bash
#
#  tvcap-script by Andreas Schalk, easycap.blogspot.com (Dec. 2011)
#  This script is based an a template TV-script from Jose Catre-Vandis (Jan 2006).
#  The ascii artwork is based on a template i found here: http://www.retrojunkie.com/asciiart/electron/tv.txt
#  Contact: [email protected]
#-----------------------------------------------------------------------------
#
#  FUNCTION: This script provides Zenity menues for viewing an capturing video with a tv-card on Linux.
#
#  Supported programs: MPlayer, MEncoder, VLC, Tvtime, Cheese und Sox
# 
#-----------------------------------------------------------------------------
#  
#  Basic options:
#
#  Change the following parameters for viewing/ capturing according to your needs
#
#-----------------------------------------------------------------------------
VERBOSE=1   # if '0', this script does not show messages window and does not ask for norm and input number anymore
NORM="PAL"  # preselect tv norm 'PAL' or 'NTSC'
INPUT_NR=0      # preselect input number of your easycap where video source is plugged in
input_width=720     # preselect width an height of video source (mplayer, vlc, mencoder)
input_height=576    # other possible combinations: 640/480; 320/240 
ASPECT=169          # '169' (16:9) or '43' (4:3); this value affects video playback with mplayer or vlc only!
FREQ="48000"        # on soundproblems reduce audio frequency (44100 oder 32000 oder 8000)
TV_INPUT="no"       # if 'yes' the analogue antenna input of the tv-card will be used (mplayer only)
CHAN="chanlist=europe-west:channel=60"      # channel setting (nur mplayer/ mencoder) the analogue antenna input of the tv-card is used
NORM="PAL"          # preselect TV-norm 'PAL' oder 'NTSC'
INPUT_NR=1          # preselct the Input on the TV-card, where the videosource is plugged in ('0' normally is the antenna, '1' the first CVBS ...
#-----------------------------------------------------------------------------

MESSAGE=()
R_MESSAGE=()
EXITCODE=0

#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
#   test videodevices
##-----------------------------------------------------------------------------

declare -a VIDEO_DEV

VIDEO_DEV=( TRUE    none
            FALSE   none
            FALSE   none
            FALSE   none
            ) 
i1=0;
i2=0;
while `test -e "/dev/video${i1}"`; do
  VIDEO_DEV[$i2+1]="/dev/video${i1}"; 
  i1=$[$i1+1];
  i2=$[$i2+2];
done
if [ "xnone" = "x${VIDEO_DEV[1]}" ]; then 
  zenity  --error --timeout=5 --text "Cannot find /dev/video0!\n Script ends in 5 seconds" --title "No videodevice!";
  exit 1;
fi

if [ "x${VIDEO_DEV[$i2+1]}" = "xnone" ];  then
    VIDEO_DEV[$i2]="" && VIDEO_DEV[$i2+1]="" && VIDEO_DEV[$i2+2]="" && VIDEO_DEV[$i2+3]="" && VIDEO_DEV[$i2+4]="" && VIDEO_DEV[$i2+5]="";
fi

DEV_VIDEO=$(zenity --list --text "Select videodevice" --radiolist --column "Choice" --column "Device" ${VIDEO_DEV[@]}) || exit 0 

if [ ${VERBOSE} = 1 ]; then
#-----------------------------------------------------------------------------
#  select TV norm
#-----------------------------------------------------------------------------
title="Select tv norm"
NORM=`zenity --title="$title" --list --radiolist --column="Choice" \
    --column="Norm" --column="Description" \
    TRUE "PAL" "PAL Norm" \
    FALSE "NTSC" "NTSC Norm" \
    ` || exit 0 
fi
#-----------------------------------------------------------------------------
#  select Input number
#-----------------------------------------------------------------------------
title="Select Input NR"
INPUT_NR=`zenity --title="$title" --list --radiolist --column="Choice" \
    --column="Input NR" --column="Description" \
    TRUE "0" "Input 1 (TV)" \
    FALSE "1" "Input 2" \
    FALSE "2" "Input 3" \
    FALSE "3" "Input 4" \
    FALSE "4" "Input 5" \
    FALSE "5" "Input 6"
    ` || exit 0 
#-----------------------------------------------------------------------------


#-----------------------------------------------------------------------------
#  Check if snd_usb_audio module is loaded
#-----------------------------------------------------------------------------
SND_USB=`lsmod | grep snd_usb_audio | wc -l`
if  [ "${SND_USB}" -ge "1" ]; then
#  MESSAGE=("${MESSAGE[@]}" "\nNOTE: snd_usb_audio module was loaded and may conflict with your USB capture device")
   zenity  --info --text "NOTE: The snd_usb_audio module was loaded\nand may conflict with your USB capture device.\n \nIf sound problems appear,\nplug out your USB capturedevice and run\n rmmod snd_usb_audio \nas root in the terminal!" --title "Snd_usb_audio module loaded!"
fi

#-----------------------------------------------------------------------------
# test and select soundcard
#-----------------------------------------------------------------------------

if `test ! -e /dev/dsp` && [ -z "`ls -1 /proc/asound`" ]; then
    if_audio="no";
    echo "No soundcard detected";
    MESSAGE=("${MESSAGE[@]}" "Note: No soundcard can be found!\nSound is not supported.\n");
else
if_audio="yes"
declare -a SOUND_DEV

SOUND_DEV=( FALSE   /dev/dsp    OSS
            FALSE   card1   ALSA    
            TRUE    card2   ALSA
            FALSE   card3   ALSA
            ) 

test ! -e /dev/dsp && echo "No dsp" && SOUND_DEV[0]="" && SOUND_DEV[1]="" && SOUND_DEV[2]=""

ALSA_CARD=$(cat /proc/asound/cards | cut -d":" -f1 -s)
declare -a ALSA_CARDS
ALSA_CARDS=(${ALSA_CARD})

i5=1
for P in ${ALSA_CARDS[@]}; do
    ALSA_NAME=$(echo ${ALSA_CARDS[$i5]} | tr -d [=[=] );
    SOUND_DEV[$i5+3]=$ALSA_NAME
    if [ "x${ALSA_NAME}" = "x" ];  then
    SOUND_DEV[$i5+2]="" && SOUND_DEV[$i5+3]="" && SOUND_DEV[$i5+4]=""
    fi
    i5=$[$i5+3];
done
fi

DEV_AUDIO=$(zenity --list --text "Select soundcard" --radiolist --column "Choice" --column "Device" --column "Type" ${SOUND_DEV[@]}) || exit 0 

if [ $DEV_AUDIO = "/dev/dsp" ]; then 
    AUDIO_TYPE="oss"
    else
    AUDIO_TYPE="alsa"
fi
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
#   test, if devicenodes are read- and writable for unprivileged users
#-----------------------------------------------------------------------------

if [ -r ${DEV_VIDEO} ] && [ -w ${DEV_VIDEO} ]; then
MESSAGE=("${MESSAGE[@]}" "\nSUCCESS! ${DEV_VIDEO} is read- and writable!\n")
elif [ -e ${DEV_VIDEO} ]; then
zenity --info --text "Cannot access ${DEV_VIDEO}!\nRun 'sudo chmod a+rw ${DEV_VIDEO}'\nin the terminal!" --title "Message"
EXITCODE=1
fi

    if [ -r ${DEV_AUDIO} ] && [ -w ${DEV_AUDIO} ]; then
    MESSAGE=("${MESSAGE[@]}" "\nSUCCESS! ${DEV_AUDIO} is read- and writable!")
    elif [ -e ${DEV_AUDIO} ]; then
    zenity --info --text "\nCannot access ${DEV_AUDIO}!\nRun 'sudo chmod a+rw ${DEV_AUDIO}'\nin the terminal!" --title "Message"
    MESSAGE=("${MESSAGE[@]}" "\n\nCannot access ${DEV_AUDIO}!\nRun 'sudo chmod a+rw ${DEV_AUDIO}'\nin the terminal!!")
    if_audio="no"
    fi
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
#  find executable programs
#-----------------------------------------------------------------------------
PROG_LIST=( TRUE    vlc     #
            FALSE   mplayer     #
            FALSE   cheese      #
            FALSE   tvtime      #
            FALSE   mencoder    #
            FALSE   sox         #
            ) 

PROGS=(vlc mplayer cheese tvtime mencoder sox)
i4=0
for P in ${PROGS[@]}; do
            PROG=`which $P`
            if [ "x" = "x${PROG}" ] || [ ! -x ${PROG} ]; then
            echo "Cannot find or execute $P. Is t installed?"
            MESSAGE=("${MESSAGE[@]}" "\nCannot find or execute $P. Is it installed?")
            PROG_LIST[$i4]=""
            PROG_LIST[$i4+1]=""
                if [ "${PROG_LIST[11]}" = "" ]; then
                echo "Sox is needed for sound with tvtime!"
                MESSAGE=("${MESSAGE[@]}" "\nSox is needed for sound with tvtime!")
                fi          
            fi
            i4=$i4+2
done
PROG_LIST[10]=""        # Sox does not show up on list
PROG_LIST[11]=""        #
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
#  messages are displayed and script ends
#-----------------------------------------------------------------------------
if [ ${EXITCODE} = 1 ]; then
    MESSAGE=("${MESSAGE[@]}" "\nScript ends")
fi
echo ${MESSAGE[*]}
#########################
if [ ${VERBOSE} = 1 ]; then
zenity --height="50" --info --text "${MESSAGE[*]}" --title "Messages"
fi

if [ ${EXITCODE} = 1 ]; then
    exit 1
fi
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
#  create logfile
#-----------------------------------------------------------------------------
LOGFILE="./test`echo "${DEV_VIDEO}" | sed -e "s,/dev/,," - `.log"

# echo "Log file is:  ${LOGFILE}"
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
#  zenity list - program choice
#-----------------------------------------------------------------------------

view_cap=$(zenity --list --width=250 --height=400 --text "  ___________\n |  .----------.  o|\n | |   Easy  | o|\n | |   CAP_  | o|\n |_\`-----------´ _|\n   ´\`          ´\`\\nTv-norm: $NORM  Input-Nr:$INPUT_NR\nVideodevice: $DEV_VIDEO $input_width x $input_height \nAudiodevice: $AUDIO_TYPE $DEV_AUDIO $FREQ Hz\nIs audio on? $if_audio\nLogfile: $LOGFILE " --radiolist --column "Choice" --column "program" ${PROG_LIST[@]}) || exit 0

#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
#  mplayer command
#-----------------------------------------------------------------------------
if [ "alsa" = "${AUDIO_TYPE}" ]; then
M_AUDIO="buffersize=16:alsa:amode=1:forcechan=2:audiorate=${FREQ}:adevice=plughw.${DEV_AUDIO}"
elif [ "oss" = "${AUDIO_TYPE}" ]; then
M_AUDIO="adevice=${DEV_AUDIO}"
fi

if [ "$NORM" = "PAL" ]; then
    fps_count=25
else 
    fps_count=30
fi

if [ "$ASPECT" = 169 ]; then
    M_ASPECT="-aspect 1.78"
#   elif [ "$ASPECT" = 43 ]; then
#   M_ASPECT="-aspect 1"
    else
    M_ASPECT=""
    fi

if [ "yes" = "${TV_INPUT}" ]; then
M_VIDEO="${CHAN}"
elif [ "no" = "${TV_INPUT}" ]; then
M_VIDEO="norm=${NORM}:width=${input_width}:height=${input_height}:outfmt=uyvy:device=${DEV_VIDEO}:input=${INPUT_NR}:fps=${fps_count}"
fi

#echo $M_VIDEO
#echo $M_AUDIO
#echo $view_cap

if [ "mplayer" = "${view_cap}" ]; then


if [ "$if_audio" = "yes" ]; then    
1>${LOGFILE} 2>&1 \
mplayer tv:// -tv driver=v4l2:${M_VIDEO}:${M_AUDIO}:forceaudio:immediatemode=0 -hardframedrop ${M_ASPECT} -ao sdl, ${AUDIO_TYPE} -msglevel all=9

elif [ "$if_audio" = "no" ]; then
1>${LOGFILE} 2>&1 \
mplayer tv:// -tv driver=v4l2:${M_VIDEO} -hardframedrop ${M_ASPECT} -msglevel all=9 -nosound
fi
fi
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
#  vlc command
#-----------------------------------------------------------------------------
if [ "vlc" = "${view_cap}" ]; then

    if [ "alsa" = "${AUDIO_TYPE}" ]; then
    V_AUDIO="//plughw:${DEV_AUDIO}"
    elif [ "oss" = "${AUDIO_TYPE}" ]; then
    V_AUDIO="//${DEV_AUDIO}"
    fi

    if [ "$NORM" = "PAL" ]; then
    V_NORM="pal"
    elif [ "$NORM" = "NTSC" ]; then
    V_NORM="ntsc"
    fi

    if [ "$ASPECT" = 169 ]; then
    V_ASPECT="--aspect-ratio=16:9"
    elif [ "$ASPECT" = 43 ]; then
    V_ASPECT="--aspect-ratio=4:3"
    else
    V_ASPECT=""
    fi

1>${LOGFILE} 2>&1 \
vlc -vvv v4l2://${DEV_VIDEO}:input=${INPUT_NR}:width=$input_width:height=$input_height:norm=${V_NORM} ${V_ASPECT} :input-slave=${AUDIO_TYPE}:${V_AUDIO} --demux rawvideo 
fi
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
#  tvtime command
#-----------------------------------------------------------------------------
if [ "tvtime" = "${view_cap}" ]; then
    if [ "alsa" = "${AUDIO_TYPE}" ]; then
    T_AUDIO="-t alsa plughw:${DEV_AUDIO} -s2 -c 2 -r ${FREQ} -s2 -t alsa default"
    elif [ "oss" = "${AUDIO_TYPE}" ]; then
    T_AUDIO="-t raw -s2 ${DEV_AUDIO} -c 2 -r ${FREQ} -s2 -t ossdsp /dev/dsp"
    fi
echo $T_AUDIO
1>${LOGFILE} 2>&1 \
>./tvtime.err
(tvtime -d ${DEV_VIDEO} -i 0 -n "${NORM}" 1>/dev/null 2>>./tvtime.err) &
rc=1
while [ 0 -ne ${rc} ];
do
  tvtime-command run_command "(sox -c 2 -r ${FREQ} ${T_AUDIO} 1>/dev/null 2>>./tvtime.err)" 1>/dev/null 2>>./tvtime.err
  rc=$?
  if [ 0 -eq ${rc} ]; then break; fi
  sleep 0.5
done
fi
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
#  cheese command
#-----------------------------------------------------------------------------
if [ "cheese" = "${view_cap}" ]; then
1>${LOGFILE} 2>&1 \
cheese
fi
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
#  mencoder command - recording section
#-----------------------------------------------------------------------------

if [ "mencoder" = "${view_cap}" ]; then

#Auswahl des Seitenverhältnisses der Aufnahme?
title="Chose aspect of your target file!"
aspect_type=`zenity  --width="400" --height="220" --title="$title" --list --radiolist --column="Click Here" \
    --column="choice" --column="source >> target" \
    TRUE "1" "4:3 > 4:3"\
    FALSE "2" "4:3 > scale=16:9" \
    FALSE "3" "4:3 > crop borders=16:9" \
    ` || exit 0 

if [ "$aspect_type" = "1" ]; then
    crop_scale="scale=640:480"
elif [ "$aspect_type" = "2" ]; then
    crop_scale="scale=720:406"
elif [ "$aspect_type" = "3" ]; then
    crop_scale="crop=720:406:0:72"
fi  

#################################################################################
#Quality?
title="What quality do you want to record at ?"
qual_type=`zenity  --width="380" --height="380" --title="$title" --list --radiolist --column="Click Here" \
    --column="Record Time" --column="Description" \
    FALSE "500" "Passable Quality"\
    FALSE "900" "OK Quality"\
    FALSE "1100" "VHS Quality"\
    TRUE "1300" "SVHS Quality"\
    FALSE "1500" "VCD Quality"\
    FALSE "1800" "SVCD Quality" \
    FALSE "2000" "Very Good Quality"\
    FALSE "2500" "High Quality" \
    FALSE "3000" "Excellent Quality"\
    ` || exit 0

##################################################################################
#How Long?
title="How long do you want to record for ?"
time_type=`zenity  --width="380" --height="500" --title="$title" --list --radiolist --column="Click Here" \
    --column="Record Time" --column="Description" \
    FALSE "00:00:00" "unlimited"\
    TRUE "00:00:30" "30 seconds for testing"\
    FALSE "00:10:00" "0.2 hours"\
    FALSE "00:30:00" "0.5 hours"\
    FALSE "00:45:00" "0.75 hours"\
    FALSE "01:00:00" "1 hour"\
    FALSE "01:15:00" "1.25 hours"\
    FALSE "01:30:00" "1.5 hours" \
    FALSE "01:45:00" "1.75 hours"\
    FALSE "02:00:00" "2 hours" \
    FALSE "02:15:00" "2.25 hours"\
    FALSE "02:30:00" "2.5 hours" \
    FALSE "02:45:00" "2.75 hours"\
    FALSE "03:00:00" "3 hours" \
    FALSE "03:15:00" "3.25 hours" \
    FALSE "03:30:00" "3.5 hours" \
    ` || exit 0

#M_TIME="-endpos $time_type"

#################################################################################
#user must enter a filename
filedate=$(date +%F_%H:%M-%S)
title="Please enter a filename for your recording, no spaces"
file_name=`zenity  --width="480" --height="150" --title="$title" --file-selection --save --confirm-overwrite --filename="tvcap_$filedate"` || exit 0

###########################################################################################
# summary
R_MESSAGE=("${R_MESSAGE[@]}" "\nRecording options:")
R_MESSAGE=("${R_MESSAGE[@]}" "\nRecording audio: $if_audio")
R_MESSAGE=("${R_MESSAGE[@]}" "\nRecording from Input $INPUT_NR - Norm: $NORM $fps_count fps")
R_MESSAGE=("${R_MESSAGE[@]}" "\nCrop and scale options: $crop_scale")
R_MESSAGE=("${R_MESSAGE[@]}" "\nEncoding quality: $qual_type kb/s")
R_MESSAGE=("${R_MESSAGE[@]}" "\nRecording time:$time_type hours")
R_MESSAGE=("${R_MESSAGE[@]}" "\nFile name: $file_name.avi ")

echo ${R_MESSAGE[*]}

if [ ${VERBOSE} = 1 ]; then
zenity --info --text "${R_MESSAGE[*]}" --title "Recording options"
fi
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
#  mencoder line
#-----------------------------------------------------------------------------
if [ "$if_audio" = "yes" ]; then

zenity --info --title="Start recording with audio" --text="Press OK to start."

mencoder tv:// -tv driver=v4l2:norm=$NORM:width=$input_width:height=$input_height:outfmt=uyvy:device=${DEV_VIDEO}:input=${INPUT_NR}:fps=$fps_count:${M_AUDIO}:forceaudio:immediatemode=0 -msglevel all=9 -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:mbd=2:turbo:vbitrate=$qual_type:keyint=15 -vf pp=lb,$crop_scale -oac mp3lame -endpos $time_type -o $file_name.avi | tee ${LOGFILE} | zenity --progress --pulsate --auto-close --auto-kill --text="Processing Video - length: $time_type H:M:S" 

zenity --info --title="Job complete" --text="The recording is now complete."


elif [ "$if_audio" = "no" ]; then

zenity --info --title="Start recording without audio" --text="Press ok to start recording"
1>${LOGFILE} 2>&1 \
mencoder tv:// -tv driver=v4l2:norm=$NORM:width=$input_width:height=$input_height:outfmt=uyvy:device=${DEV_VIDEO}:input=${INPUT_NR}:fps=$fps_count -msglevel all=9 -nosound -ovc lavc -ffourcc DX50 -lavcopts vcodec=mpeg4:mbd=2:turbo:vbitrate=$qual_type:keyint=15 -vf pp=lb,$crop_scale -endpos $time_type -o $file_name.avi | tee ${LOGFILE} | zenity --progress --pulsate --auto-close --auto-kill --text="Processing Video - length: $time_type H:M:S" 

zenity --info --title="Job complete" --text="The recording is now complete."

fi

fi
exit 1

Simplesmente copie / cole todo esse código em um arquivo chamado tvcap-script.sh, dê as permissões de execução e execute-o em um terminal. O processo é bastante fácil e vou explicar da seguinte maneira:

1.- Depois de pressionar Enter, você será solicitado a fonte de captura e, dependendo da localização do dispositivo (testado anteriormente), você pode ter - como no meu caso - várias fontes de vídeo, estou usando o / dev / video2 para isso exemplo, que se refere ao meu sintonizador de TV USB. Observe que esta captura de tela não recebeu o decorador de janelas, mas as opções e o botão "OK" podem ser vistos ali.

insira a descrição da imagem aqui

2.- Agora precisamos definir a norma. No México, usamos NTSC. A menos que você deseje capturar seu vídeo usando uma norma diferente, com formato quadrado, você não deve usar PAL, o que pode prejudicar um pouco a qualidade do vídeo. Depende também de onde você mora e da norma do seu país.

insira a descrição da imagem aqui

3.- O meu sintonizador de TV está tendo várias entradas, a sua pode ter uma quantidade diferente de entradas, confira e execute quantos testes forem necessários para determinar qual é o melhor para sua captura. Vou usar o que se refere à TV. (Entrada 1 (TV))

insira a descrição da imagem aqui

4.- Em seguida, você pode (ou não) ser avisado e oferecido uma solução se algo der errado durante a captura do som (o áudio e o vídeo serão capturados de uma só vez, mas se o seu módulo snd_usb_audio já tiver sido carregado, ele poderá falhar a captura de áudio e, portanto, o próprio vídeo)

insira a descrição da imagem aqui

5.- O My TV Tuner possui suporte para várias entradas de áudio, que incluem a integração com o dispositivo de som incorporado na minha placa-mãe (através da conexão de um cabo à linha auxiliar e controlado pelo mixer de som), você verifica qual é o melhor para você e lembre-se de que os padrões geralmente são marcados como "o melhor para você".

insira a descrição da imagem aqui

6.- Se tudo estiver indo bem, você verá uma pequena janela com uma mensagem que diz algo como isto:

"SUCESSO! / Dev / video2 é legível e gravável!"

clique em "OK" para continuar.

insira a descrição da imagem aqui

7.- Depois disso, você pode escolher na lista de opções de gravação disponíveis no seu sistema. Instalei o que você pode ver na próxima captura de tela. Qualquer pessoa é válida e a qualidade não reflete grandes mudanças, mas eu pessoalmente prefiro o mencoder . Se você não possui nenhum desses, instale-o para executar seus testes.

insira a descrição da imagem aqui

8.- Depois de escolher a sua preferência de software de codificação (na etapa anterior), você será solicitado a relação de aspecto. Se você não tem experiência nisso, deixe como está. Normalmente, o padrão é o que melhor se ajusta ao sinal do seu sintonizador de TV.

insira a descrição da imagem aqui

9.- Com base na sua escolha relacionada à proporção, você terá várias opções para a qualidade do vídeo, também com base na taxa de bits, a descrição na próxima janela é muito específica. Lembre-se de que: quanto maior a taxa de bits (melhor qualidade), o tamanho do arquivo de vídeo pode se tornar uma quantidade enorme.

insira a descrição da imagem aqui

10.- Depois disso, precisamos apenas escolher quanto tempo nossa captura de vídeo será. Existem várias predefinições, eu escolhi "30 segundos para teste" neste exemplo, mas você pode escolher qualquer uma ou até mesmo "ilimitado" para decidir quando parar a gravação.

insira a descrição da imagem aqui

11.- Em seguida, você será solicitado a fornecer um nome de arquivo, fornecendo um por padrão, que pode ser alterado nesta tela.

insira a descrição da imagem aqui

12.- Você será solicitado a verificar suas "Opções de gravação" na próxima tela, basta clicar em "OK".

insira a descrição da imagem aqui

13.- Apenas mais um clique para começar.

insira a descrição da imagem aqui

14.- Ao gravar, o terminal pode mostrar alguma atividade e uma pequena janela como esta:

insira a descrição da imagem aqui

15.- Ao final do processo, você receberá uma janela de confirmação.

insira a descrição da imagem aqui

E é isso...

Você pode cancelar a gravação ou o próprio processo pressionando ESC a qualquer momento, não haverá alterações.

No final da gravação, você terá o vídeo no local escolhido na etapa 11, juntamente com um arquivo de log com um nome como: "testvideo0.log" ou algo assim.

Essa é a maneira mais fácil de codificar a partir de sintonizadores de TV por sinal de RF, reunindo áudio e vídeo no mesmo arquivo.

Eu tenho outro processo que é alcançado usando um processo python que apresenta uma GUI na qual você pode lidar com várias coisas úteis, como alterar o canal, executar testes de pré-gravação e até gravar, mas às vezes me deixa com falhas. Se desejar, informe-me como posso entrar em contato com você. Eu não quero escrever pergaminhos ou uma Bíblia ... LOL!

Se este procedimento não funcionar no seu caso, informe-nos, incluindo seus resultados para fornecer suporte antes de excluir esta resposta. Obrigado e ...

Boa sorte!

Geppettvs D'Constanzo
fonte
Qual placa de sintonizador de TV USB você recomenda e a solução acima funciona para mais de 2 a 3 feeds de vídeo em uma única máquina Linux? Quero tentar gravar 4-8 vídeos em uma única máquina. Isso é viável na sua opinião?
CP3O 13/09/17
Qualquer placa sintonizadora de TV analógica, PCI e / ou USB, deve funcionar se e apenas se o dispositivo for detectado e instalado corretamente. No que diz respeito à gravação de alimentação múltipla, esta solução deve funcionar perfeitamente se você executar várias instâncias e escolher o feed de mídia correto. Infelizmente, em alguns casos, o fluxo de áudio é gerenciado pelo seu mixer de áudio favorito (digamos alsa ou pulseaudio, jack etc.), talvez seja necessário ajustar o código para indicar para qual fluxo de áudio vamos usar a captura em determinado dispositivo de vídeo. Além disso, quanto mais fluxos você capturar, mais recursos serão necessários.
Geppettvs D'Constanzo
3

Você deve experimentar o "QtCAM" - um software Linux Webcamera gratuito de código aberto com mais de 10 configurações de controle de imagem.

Configurações de captura de imagem QtCAM

Venkatesh
fonte
Isso agora funciona em 16.04
Tim
0

Este é o comando mais simples:

ffmpeg -i /dev/video0 output.mp4
Ivan Malyshev
fonte
Ei, bem-vindo ao Ask Ubuntu! Você poderia, por favor, reservar um momento para editar sua resposta e explicar como o comentário funciona e como resolverá melhor o problema do OP? Obrigado :)
grooveplex 27/02
0

Eu recomendaria o vokoscreen para o Ubuntu 18.04. Você pode instalá-lo com 'sudo apt install vokoscreen'. Consulte também https://github.com/vkohaupt/vokoscreen .

fregger
fonte