Qualcosa di meglio di Cheese per l'acquisizione di video?


56

Ho bisogno di registrare alcuni video dalla mia webcam e mentre Cheese funziona, manca di impostazioni e produce solo il formato webm pieno di balbuzie, ecc.

Non riesco a trovare alcuna alternativa ...

Risposte:


57

Guvcview mira a fornire una semplice interfaccia GTK per l'acquisizione e la visualizzazione di video da dispositivi supportati dal driver UVC Linux, sebbene dovrebbe funzionare anche con qualsiasi dispositivo compatibile v4l2.

Il progetto si basa su luvcview per il rendering video, ma tutti i controlli vengono creati utilizzando un'interfaccia GTK2.

Guvcview (dalla versione 0.9.9) ha una finestra di solo controllo, (dalla console guvcview --control_only:), questo consente il controllo dell'immagine su altre app, come ekiga, cheese, mplayer, skype ...

Audio.

Il supporto audio di Guvcview si basa sulla libreria portaudio, fino alla versione 0.9.3 è stata utilizzata l'API di blocco per l'acquisizione audio, poiché invece viene utilizzato il metodo di callback versione 0.9.4, ciò fornisce prestazioni migliori, è anche il metodo preferito per API portaudio.

Tutte le interfacce (ALSA, OSD, JACK, ...) supportate da portaudio dovrebbero essere disponibili in guvcview. Assicurati solo che portaudio sia stato compilato con le interfacce desiderate abilitate.

Controlli dinamici UVC.

Il driver UVC Linux ha un'implementazione per i controlli di estensione (questi sono controlli specifici del fornitore e sono supportati nelle specifiche UVC), sono chiamati controlli dinamici poiché devono essere caricati dinamicamente nel driver.

Fino ad oggi solo logitech ha fornito specifiche per i controlli delle estensioni della webcam UVC, queste sono supportate da guvcview.

Nelle nuove revisioni del driver sono necessari i diritti di amministratore per aggiungere questi controlli al driver, quindi esistono sostanzialmente due soluzioni:

  1. avvia guvcview come root (usando sudo) almeno una volta per sessione, dalla versione 1.2.0 puoi farlo con l'opzione --add_ctrlsevitando la necessità di avviare completamente guvcview

  2. installa libwebcam questo software ha uno script udev che dovrebbe aggiungere i controlli necessari alla tua videocamera logitech.

Installa Guvcview su Ubuntu 12.04 tramite ppa

sudo add-apt-repository ppa:pj-assis/ppa
sudo apt-get update
sudo apt-get install guvcview

1
Questa app è fantastica. A proposito: la maggior parte dei controlli ha funzionato bene senza dover fare nulla.
HDave l'

Il formaggio semplicemente non ha funzionato per me, Guvcview ha funzionato perfettamente. L'unica cosa era trovare la giusta sorgente di input audo impiegava un minuto a suonare, ma non avevo ancora bisogno di leggere il manuale o fare un po 'di magia per farlo funzionare.
jdarling

2
Per tutti i fantastici look di guvcview, è attualmente rovinato (almeno nel 16.04) da bugs.launchpad.net/ubuntu/+source/guvcview/+bug/1558060 (video congelato). Invece, sto usando la linea mencoder da commandlinefu.com/commands/view/3498/… (regolazione larghezza e altezza) e funziona perfettamente.
miguev,

@miguev Questa versione sembra risolvere il problema.
Skippy le Grand Gourou,

"Errore Guvcview Impossibile avviare un flusso video nel dispositivo" GUVCVIEW (1): errore Guvcview indice di risoluzione non valido GUVCVIEW: indice di risoluzione non valido Errore di segmentazione (core scaricato)
Aaron Franke


11

Parti di questa domanda provengono dalla risposta a questa domanda: registrare da nastri VHS .

Dobbiamo assicurarci che il software raccolga i dati corretti dal dispositivo giusto. Lasciamo una query nel terminale che ci farà vedere quanti dispositivi sono collegati al tuo computer, che possono essere usati per raccogliere immagini, usa questo comando in un terminale:

ls -l /dev/video*

I risultati dovrebbero essere così:

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:~$ 

Nel mio caso, ho 3 dispositivi video, uno dei quali è il sintonizzatore TV USB che utilizzo per guardare / registrare programmi TV in diretta / VTR / VCR / convertitore RF-DVD / video e altri segnali RF.

Gli altri dispositivi sono USB Webcam collegati agli slot USB sul computer.

Se la tua webcam è dotata di un microfono, sia l'audio che il video possono essere registrati usando lo script tvcap di Andreas Schalk , quale codice inserisco qui per tua comodità:

#!/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: easycapdc60-blogspot@yahoo.de
#-----------------------------------------------------------------------------
#
#  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

Basta copiare / incollare tutto questo codice in un file chiamato tvcap-script.sh, dare le autorizzazioni di esecuzione ed eseguirlo in un terminale. Il processo è abbastanza semplice e ho intenzione di spiegare come segue:

1.- Dopo aver premuto Invio, ti verrà chiesto la fonte di acquisizione e in base alla posizione del dispositivo (testato prima), puoi avere, come nel mio caso, diverse fonti video, sto usando / dev / video2 per questo esempio, che si riferisce al mio sintonizzatore TV USB. Nota che questo screenshot non ha ottenuto il decoratore di finestre ma le opzioni e il pulsante "OK" sono visibili proprio lì.

inserisci qui la descrizione dell'immagine

2.- Ora dobbiamo definire la norma, in Messico utilizziamo NTSC e, a meno che tu non voglia catturare il tuo video usando una norma diversa con proporzioni quadrate, non dovresti usare PAL, il che può effettivamente danneggiare un po 'la qualità del tuo video. Dipende anche da dove vivi e dalla norma del tuo paese.

inserisci qui la descrizione dell'immagine

3.- Il mio sintonizzatore TV ha diversi ingressi, il tuo può avere una quantità diversa di ingressi, verificarlo ed eseguire tutti i test necessari per determinare quale è il migliore per la tua acquisizione. Userò quello che si riferisce alla TV. (Ingresso 1 (TV))

inserisci qui la descrizione dell'immagine

4.- Successivamente, potresti (o meno) essere avvisato e offerto una soluzione se qualcosa va storto durante l'acquisizione del suono (sia l'audio che il video verranno catturati contemporaneamente ma se il tuo modulo snd_usb_audio è già stato caricato, potrebbe bloccarsi l'acquisizione audio e quindi l'acquisizione video stessa)

inserisci qui la descrizione dell'immagine

5.- Il mio sintonizzatore TV offre supporto per diversi ingressi audio, che include l'integrazione con il dispositivo audio incorporato nella mia scheda madre (tramite il collegamento di un cavo alla linea aux e controllato dal mixer audio), controlli quale è il migliore per e ricorda che le impostazioni predefinite sono generalmente contrassegnate come "le migliori per te".

inserisci qui la descrizione dell'immagine

6.- Se tutto va bene, vedrai una piccola finestra con un messaggio che legge qualcosa del genere:

"SUCCESSO! / Dev / video2 è leggibile e scrivibile!"

fai clic su "OK" per continuare.

inserisci qui la descrizione dell'immagine

7.- Successivamente, puoi scegliere dall'elenco delle opzioni di registrazione disponibili sul tuo sistema. Ho installato quello che puoi vedere nel prossimo screenshot. Chiunque è valido e la qualità non riflette grandi cambiamenti, ma personalmente preferisco mencoder . Se non hai installato nessuno di questi, devi installarlo per eseguire i test.

inserisci qui la descrizione dell'immagine

8.- Dopo aver scelto le preferenze del software di codifica (nel passaggio precedente) ti verranno chieste le proporzioni. Se non hai esperienza su questo, lascialo così com'è. Normalmente, per impostazione predefinita, si adatta meglio al segnale del sintonizzatore TV.

inserisci qui la descrizione dell'immagine

9.- In base alla tua scelta relativa alle proporzioni, avrai diverse opzioni per la qualità del video, anche in base al bitrate, la descrizione nella finestra successiva è molto specifica. Ricorda che: maggiore è il bitrate (migliore qualità), la dimensione del file video può diventare enorme.

inserisci qui la descrizione dell'immagine

10.- Dopo ciò, dobbiamo solo scegliere per quanto tempo sarà la nostra acquisizione video. Esistono diversi preset, in questo esempio ho scelto "30 secondi per il test", ma puoi scegliere uno o anche "illimitato" per decidere quando interrompere la registrazione.

inserisci qui la descrizione dell'immagine

11.- Successivamente, ti verrà chiesto un nome file, fornendone uno per impostazione predefinita, che puoi modificare in questa schermata.

inserisci qui la descrizione dell'immagine

12.- Ti verrà richiesto di controllare le "Opzioni di registrazione" nella schermata successiva, fai clic su "OK".

inserisci qui la descrizione dell'immagine

13.- Basta un altro clic per iniziare.

inserisci qui la descrizione dell'immagine

14.- Durante la registrazione, il terminale può mostrare alcune attività e una piccola finestra come questa:

inserisci qui la descrizione dell'immagine

15.- Alla fine del processo, riceverai una finestra di conferma.

inserisci qui la descrizione dell'immagine

E ... questo è tutto ...

Puoi annullare la registrazione o il processo stesso premendo ESC in qualsiasi momento, non ci saranno cambiamenti.

Alla fine della registrazione, avrai il video nel posto che scegli nel passaggio 11, in compagnia di un file di registro con un nome del tipo: "testvideo0.log" o qualcosa del genere.

Questo è il modo più semplice per codificare dai sintonizzatori TV di segnali RF, raccogliendo sia audio che video nello stesso file.

Ho un altro processo che si ottiene utilizzando un processo Python che presenta una GUI in cui è possibile gestire diverse cose utili, come cambiare il canale, eseguire test di pre-registrazione e persino registrare, ma a volte mi fa fallire. Se lo desideri, fammi sapere come posso raggiungerti. Non voglio scrivere pergamene o una bibbia ... LOL!

Se questa procedura non funziona per il tuo caso, fammi sapere includendo i risultati per fornire supporto prima di eliminare questa risposta. Grazie e...

In bocca al lupo!


Quale scheda di sintonizzazione TV USB mi consigliate e la soluzione sopra funziona per più di 2-3 feed video su una singola macchina linux? Voglio provare a registrare 4-8 video su una singola macchina. È fattibile secondo te?
CP3O,

Qualsiasi scheda di sintonizzazione TV analogica, sia PCI che / o USB, dovrebbe funzionare se e solo se il dispositivo viene rilevato e installato correttamente. Per quanto riguarda la registrazione multi-feed, questa soluzione dovrebbe funzionare perfettamente se si eseguono più istanze e si sceglie il feed multimediale giusto. Sfortunatamente, in alcuni casi il flusso audio è gestito dal tuo mixer audio preferito (diciamo alsa o pulseaudio, jack, ecc.), Potrebbe essere necessario ottimizzare il codice per dire per quale flusso audio utilizzeremo l'acquisizione su determinati dispositivi video. Inoltre, più flussi acquisisci, più risorse sono necessarie.
Geppettvs D'Constanzo,


0

Questo è il comando più semplice:

ffmpeg -i /dev/video0 output.mp4

Ehi, benvenuto su Ask Ubuntu! Potresti dedicare un momento a modificare la tua risposta per spiegare come funziona il commento e come risolverà meglio il problema di OP? Grazie :)
grooveplex,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.