비디오 캡처에 치즈보다 좋은 점이 있습니까?


56

웹캠에서 일부 비디오를 녹화해야하며 치즈가 작동하는 동안 설정이없고 끊김 등으로 가득 찬 webm 형식 만 출력합니다.

대안을 찾지 못하는 것 같습니다 ...

답변:


57

Guvcview 는 Linux UVC 드라이버가 지원하는 장치에서 비디오를 캡처하고 볼 수있는 간단한 GTK 인터페이스를 제공하는 것을 목표로하지만 v4l2 호환 장치에서도 작동해야합니다.

이 프로젝트는 비디오 렌더링을위한 luvcview를 기반으로하지만 모든 컨트롤은 GTK2 인터페이스를 사용하여 빌드됩니다.

Guvcview (버전 0.9.9부터)에는 컨트롤 전용 창이 있습니다 (콘솔에서) : guvcview --control_only이것은 ekiga, cheese, mplayer, skype와 같은 다른 앱에서 이미지 컨트롤을 허용합니다 ...

오디오.

Guvcview 오디오 지원은 버전 0.9.3까지 오디오 캡처에 블로킹 API가 사용되었습니다. portaudio API.

portaudio가 지원하는 모든 인터페이스 (ALSA, OSD, JACK, ...)는 guvcview에서 사용할 수 있어야합니다. 포트 오디오가 원하는 인터페이스가 활성화 된 상태에서 컴파일되었는지 확인하십시오.

UVC 다이내믹 컨트롤.

Linux UVC 드라이버는 확장 컨트롤 (이것은 공급 업체별 컨트롤이며 UVC 사양에서 지원됨)을 구현하며 드라이버에 동적으로로드되어야하기 때문에 동적 컨트롤이라고합니다.

현재까지는 logitech만이 UVC 웹캠 확장 컨트롤에 대한 사양을 제공했지만 guvcview에서 지원합니다.

새 드라이버 개정판에서는 이러한 제어를 드라이버에 추가하려면 관리자 권한이 필요하므로 기본적으로 두 가지 솔루션이 있습니다.

  1. sudo버전 1.2.0 부터 guvcview를 루트로 시작 (을 사용하여 ) --add_ctrls시작

  2. libwebcam 설치이 소프트웨어에는 로지텍 카메라에 필요한 컨트롤을 추가해야하는 udev 스크립트가 있습니다.

ppa를 통해 Guvcview를 Ubuntu 12.04에 설치하십시오.

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

1
이 응용 프로그램은 굉장합니다. BTW-대부분의 컨트롤은 아무 것도하지 않아도 잘 작동했습니다.
HDave

치즈는 단순히 나를 위해 작동하지 않았다, Guvcview는 완벽하게 작동했습니다. 올바른 audo 입력 소스를 찾는 데 1 분이 걸렸지 만 여전히 매뉴얼을 읽거나 cli magic을 사용하지 않아도 작동했습니다.
jdarling

2
모든 훌륭한 guvcview 모양을 위해 현재 bugs.launchpad.net/ubuntu/+source/guvcview/+bug/1558060 (동결 된 비디오)에 의해 파괴되었습니다 (최소 16.04 이상 ). 대신 commandlinefu.com/commands/view/3498/… (너비 및 높이 조정) 의 mencoder 라인을 사용 하고 있으며 완벽하게 작동합니다.
miguev

@miguev 이 버전 은 문제를 해결하는 것 같습니다.
Skippy le Grand Gourou

유효 해상도 인덱스 분할 오류 (코어 덤프) : "Guvcview 오류가 장치에서 비디오 스트림을 시작할 수 없습니다"GUVCVIEW (1) : Guvcview 오류 유효하지 않은 해상도 인덱스 GUVCVIEW
아론 프랑케


11

이 질문의 일부는이 질문에 대한 답변에서 비롯됩니다 : VHS 테이프에서 레코드 .

소프트웨어가 올바른 장치에서 올바른 데이터를 수집하고 있는지 확인해야합니다. 터미널에 쿼리를 놓아 컴퓨터에 몇 대의 장치가 연결되어 있는지 확인하고 이미지를 수집하는 데 사용할 수있는 터미널에서이 명령을 사용하십시오.

ls -l /dev/video*

결과는 다음과 같아야합니다.

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

내 경우에는 3 개의 비디오 장치가 있는데 그중 하나는 라이브 TV 쇼 / VTR / VCR / RF-DVD / 비디오 변환기 및 기타 RF 신호를 보거나 녹화하는 데 사용하는 USB TV 튜너입니다.

다른 장치는 컴퓨터의 USB 슬롯에 연결된 USB 웹캠입니다.

웹캠에 마이크가있는 경우 Andreas Schalktvcap 스크립트를 사용하여 오디오와 비디오를 모두 녹음 할 수 있습니다 .

#!/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

tvcap-script.sh라는 파일에이 코드를 모두 복사 / 붙여 넣기 만하면 실행 권한을 부여하고 터미널에서 실행할 수 있습니다. 과정은 매우 쉽고 다음과 같이 설명하겠습니다.

1.- Enter를 누르면 캡처 소스를 묻는 메시지가 표시되고 장치의 위치에 따라 (이전에 테스트 한) 여러 비디오 소스를 사용할 수 있습니다. / dev / video2를 사용하고 있습니다. 예, 내 USB TV 튜너를 나타냅니다. 이 스크린 샷에는 창 데코레이터가 없지만 옵션과 "확인"버튼을 바로 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오

2.- 이제 우리는 표준을 정의해야합니다. 멕시코에서는 NTSC를 사용합니다. 제곱 종횡비를 가진 다른 표준을 사용하여 비디오를 캡처하지 않으면 PAL을 사용하지 않아야합니다. 또한 거주지와 국가의 기준에 따라 다릅니다.

여기에 이미지 설명을 입력하십시오

3 .- 내 TV 튜너가 여러 입력을 가지고있다, 당신은, 입력의 다른 양을 가지고 그것을 확인하고 캡처를위한 가장 적합한 하나를 결정하기 위해 필요한만큼의 테스트를 실행할 수 있습니다. TV를 가리키는 것을 사용하려고합니다. (입력 1 (TV))

여기에 이미지 설명을 입력하십시오

4.- 다음으로 사운드 캡처 중에 문제가 발생하면 경고를 받고 솔루션을 제공받을 수 있습니다 (오디오 및 비디오 모두 한 번에 캡처되지만 snd_usb_audio 모듈이 이미로드 된 경우 충돌이 발생할 수 있음) 오디오 캡처 및 비디오 캡처 자체)

여기에 이미지 설명을 입력하십시오

5 .- 내 TV 튜너, 당신을 위해 가장 적합한 하나를 확인합니다 (AUX 라인에 케이블을 연결을 통해 사운드 믹서에 의해 제어) 내 마더 보드에 내장 된 사운드 장치와의 통합을 포함하는 여러 개의 오디오 입력에 대한 지원을 제공합니다 기본 설정은 일반적으로 "최적"으로 표시됩니다.

여기에 이미지 설명을 입력하십시오

6.- 모든 것이 잘되면 다음과 같은 메시지가있는 작은 창이 나타납니다.

"성공! / dev / video2를 읽고 쓸 수 있습니다!"

계속하려면 "확인"을 클릭하십시오.

여기에 이미지 설명을 입력하십시오

7.- 그 후, 당신은 당신의 시스템에서 사용 가능한 기록 옵션 목록에서 선택할 수 있습니다. 다음 스크린 샷에서 볼 수있는 것을 설치했습니다. 누구나 유효하며 품질에는 큰 변화가 반영되지 않지만 개인적으로 mencoder를 선호합니다 . 이 중 하나라도 설치되어 있지 않으면 테스트를 실행하기 위해 설치해야합니다.

여기에 이미지 설명을 입력하십시오

8 .- 당신이 (이전 단계에서) 인코딩 소프트웨어 환경 설정을 선택한 후에는 종횡비를 입력해야합니다. 이것에 대한 경험이 없다면 그대로 두십시오. 일반적으로 TV 튜너 신호에 더 잘 맞도록 기본 설정되어 있습니다.

여기에 이미지 설명을 입력하십시오

9. 리 화면 비율에 관한 당신의 선택을 기반으로, 당신은 또한 비트 레이트에 따라, 비디오 품질에 대한 몇 가지 옵션이있을 것이다, 다음 창에 대한 설명은 매우 구체적이다. 비디오 파일 크기가 높을수록 높은 비트 전송률 (최고 품질)이 될 수 있습니다.

여기에 이미지 설명을 입력하십시오

10.- 그 후, 우리는 우리의 비디오 캡처가 될 것입니다 시간을 선택하는 단지 필요가있다. 몇 가지 사전 설정이 있습니다.이 예에서는 "테스트를 위해 30 초"를 선택했지만 녹화 중지시기를 결정하기 위해 "무제한"을 선택할 수도 있습니다.

여기에 이미지 설명을 입력하십시오

다음으로, 기본적으로 파일 이름을 묻는 메시지가 표시 되며이 화면에서 변경할 수 있습니다.

여기에 이미지 설명을 입력하십시오

12.- 당신은 그냥 "확인"을 클릭, 다음 화면에서 "녹화 옵션"을 확인하라는 메시지가 표시됩니다.

여기에 이미지 설명을 입력하십시오

13.- 그냥 한 번 더 시작을 클릭합니다.

여기에 이미지 설명을 입력하십시오

14 살 녹화하는 경우, 단말은 어떤 활동이 같은 작은 창을 표시 할 수있다 :

여기에 이미지 설명을 입력하십시오

프로세스가 끝나면 확인 창이 나타납니다.

여기에 이미지 설명을 입력하십시오

그리고 그게 다야...

언제든지 Esc 키를 눌러 녹음 또는 프로세스 자체를 취소 할 수 있습니다. 전혀 변경되지 않습니다.

녹화가 끝나면 11 단계에서 선택한 장소에 "testvideo0.log"또는 이와 유사한 이름의 로그 파일과 함께 비디오가 제공됩니다.

이는 RF 신호 TV 튜너에서 인코딩하는 가장 쉬운 방법으로 오디오와 비디오를 모두 같은 파일로 수집합니다.

python 프로세스를 사용하여 달성 한 또 다른 프로세스가 있습니다.이 프로세스에는 채널 변경, 사전 기록 테스트 실행 및 기록과 같은 몇 가지 유용한 사항을 처리 할 수 ​​있지만 때로는 실패합니다. 원하는 경우 연락 방법을 알려주세요. 양피지 나 성경을 쓰고 싶지 않습니다 ... LOL!

이 절차가 귀하의 경우에 효과가없는 경우이 답변을 삭제하기 전에 지원을 제공하기 위해 결과를 포함시켜 알려주십시오. 고마워 그리고...

행운을 빕니다!


어떤 USB TV 튜너 카드를 권장하고 위의 솔루션이 단일 Linux 시스템에서 2-3 개 이상의 비디오 피드에 작동합니까? 단일 컴퓨터에서 4-8 개의 비디오를 녹화하려고합니다. 그것은 당신의 의견으로는 가능합니까?
CP3O

장치가 올바르게 감지되고 설치된 경우 PCI 및 / 또는 USB와 같은 아날로그 TV 튜너 카드가 작동해야합니다. 다중 급지 기록에 대한 내용은 여러 인스턴스를 실행하고 올바른 용지 공급을 선택하면 완벽하게 작동합니다. 불행히도, 어떤 경우에는 오디오 스트림이 좋아하는 오디오 믹서 (예 : alsa 또는 pulseaudio, jack 등)에 의해 관리됩니다.이를 위해 우리가 사용할 오디오 스트림을 말하기 위해 코드를 미세 조정해야 할 수도 있습니다 특정 비디오 장치에서의 캡처 또한 더 많은 스트림을 캡처할수록 더 많은 리소스가 필요합니다.
Geppettvs D' Constanzo


0

가장 간단한 명령입니다.

ffmpeg -i /dev/video0 output.mp4

안녕하세요, Ask Ubuntu에 오신 것을 환영합니다! 댓글의 작동 방식과 OP의 문제를 가장 잘 해결할 수있는 방법을 설명하기 위해 답변 을 편집 할 수 있습니까? 감사합니다 :)
grooveplex

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.