ฉันต้องบันทึกวิดีโอบางส่วนจากเว็บแคมของฉันและในขณะที่ชีสใช้งานได้มันขาดการตั้งค่าและแสดงผลเฉพาะรูปแบบ webm ที่เต็มไปด้วย stutters เป็นต้น
ดูเหมือนจะไม่พบทางเลือกอื่น ...
ฉันต้องบันทึกวิดีโอบางส่วนจากเว็บแคมของฉันและในขณะที่ชีสใช้งานได้มันขาดการตั้งค่าและแสดงผลเฉพาะรูปแบบ webm ที่เต็มไปด้วย stutters เป็นต้น
ดูเหมือนจะไม่พบทางเลือกอื่น ...
คำตอบ:
Guvcviewมุ่งหวังที่จะให้อินเตอร์เฟส GTK แบบง่าย ๆ สำหรับการจับภาพและดูวิดีโอจากอุปกรณ์ที่รองรับโดยไดรเวอร์ Linux UVC ถึงแม้ว่ามันจะทำงานร่วมกับอุปกรณ์ที่รองรับ v4l2
โครงการนี้ใช้ luvcview สำหรับการเรนเดอร์วิดีโอ แต่ตัวควบคุมทั้งหมดกำลังสร้างโดยใช้อินเตอร์เฟส GTK2
Guvcview (ตั้งแต่รุ่น 0.9.9) มีหน้าต่างควบคุมเพียงตัวเดียว (จากคอนโซลguvcview --control_only
:) ทำให้สามารถควบคุมรูปภาพในแอพอื่น ๆ เช่น ekiga, ชีส, mplayer, skype ...
การสนับสนุนเสียง Guvcview ขึ้นอยู่กับไลบรารี portaudio จนถึงรุ่น 0.9.3 API การบล็อกถูกใช้สำหรับการบันทึกเสียงตั้งแต่รุ่น 0.9.4 ใช้วิธีการโทรกลับแทนซึ่งจะให้ประสิทธิภาพที่ดีขึ้นและเป็นวิธีที่ดีที่สุดสำหรับ portaudio API
อินเทอร์เฟซทั้งหมด (ALSA, OSD, JACK, ... ) ที่สนับสนุนโดย portaudio ควรมีใน guvcview เพียงให้แน่ใจว่า portaudio ได้รับการคอมไพล์ด้วยอินเทอร์เฟซที่เปิดใช้งานที่ต้องการ
ไดรเวอร์ Linux UVC มีการใช้งานสำหรับการควบคุมส่วนขยาย (นี่คือการควบคุมเฉพาะของผู้ขายและได้รับการสนับสนุนในข้อมูลจำเพาะ UVC) ซึ่งเรียกว่าการควบคุมแบบไดนามิกเนื่องจากจะต้องโหลดแบบไดนามิกลงในไดรเวอร์
จนถึงทุกวันนี้มีเพียง Logitech เท่านั้นที่ให้ข้อมูลจำเพาะสำหรับการควบคุมส่วนขยาย UVC ของเว็บแคมซึ่งได้รับการสนับสนุนโดย guvcview
ในการแก้ไขไดรเวอร์ใหม่จำเป็นต้องมีสิทธิ์ผู้ดูแลระบบเพื่อเพิ่มการควบคุมเหล่านี้ไปยังไดรเวอร์ดังนั้นจึงมีสองวิธีแก้ไข:
เริ่ม guvcview เป็น root (โดยใช้sudo
) อย่างน้อยหนึ่งครั้งต่อเซสชันตั้งแต่เวอร์ชัน 1.2.0 คุณสามารถทำได้ด้วยตัวเลือกที่--add_ctrls
ไม่จำเป็นต้องเรียกใช้ guvcview อย่างเต็มที่
ติดตั้ง libwebcam ซอฟต์แวร์นี้มีสคริปต์ udev ที่ควรเพิ่มการควบคุมที่จำเป็นในกล้องโลจิเทคของคุณ
sudo add-apt-repository ppa:pj-assis/ppa
sudo apt-get update
sudo apt-get install guvcview
ส่วนของคำถามนี้มาจากคำตอบในคำถามนี้: บันทึกจากเทป 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 อุปกรณ์วิดีโอซึ่งหนึ่งในนั้นคือ USB TV Tuner ที่ฉันใช้สำหรับการดู / บันทึกรายการทีวีถ่ายทอดสด / VTR / VCR / RF-DVD / Video Converter และสัญญาณ RF อื่น ๆ
อุปกรณ์อื่น ๆ คือเว็บแคม USB ที่ต่อกับช่องเสียบ USB บนคอมพิวเตอร์
หากเว็บแคมของคุณมีไมโครโฟนคุณสามารถบันทึกทั้งเสียงและวิดีโอโดยใช้สคริปต์ tvcap โดย Andreas Schalkซึ่งฉันวางรหัสไว้ที่นี่เพื่อความสะดวกของคุณ:
#!/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 คุณจะถูกถามถึงแหล่งดักจับและขึ้นอยู่กับตำแหน่งของอุปกรณ์ (ทดสอบก่อนหน้านี้) คุณสามารถมี -as ในกรณีของฉัน - แหล่งวิดีโอหลายแหล่งฉันใช้ / dev / video2 สำหรับสิ่งนี้ ตัวอย่างซึ่งอ้างถึงเครื่องรับสัญญาณทีวี USB ของฉัน โปรดทราบว่าภาพหน้าจอนี้ไม่ได้รับตัวประดับหน้าต่าง แต่สามารถดูตัวเลือกและปุ่ม "ตกลง" ได้ที่นั่น
2.-ตอนนี้เราจำเป็นต้องกำหนดบรรทัดฐาน, ในเม็กซิโกเราใช้ NTSC, และถ้าคุณไม่ต้องการที่จะจับภาพวิดีโอของคุณโดยใช้บรรทัดฐานอื่นที่มีอัตราส่วนกว้างยาวแบบสี่เหลี่ยมคุณไม่ควรใช้ PAL, ซึ่งอาจเป็นอันตรายต่อคุณภาพวิดีโอของคุณ นอกจากนี้ยังขึ้นอยู่กับว่าคุณอาศัยอยู่ที่ไหนและบรรทัดฐานของประเทศของคุณ
3.-เครื่องรับสัญญาณทีวีของฉันมีอินพุตหลายตัวคุณสามารถมีอินพุตที่แตกต่างกันตรวจสอบและทำการทดสอบได้มากเท่าที่คุณต้องการเพื่อพิจารณาว่าอันไหนดีที่สุดสำหรับการจับภาพของคุณ ฉันจะใช้อันที่อ้างอิงถึงทีวี (อินพุต 1 (ทีวี))
4.-ถัดไปคุณอาจ (หรือไม่) ได้รับการเตือนและนำเสนอวิธีการแก้ปัญหาหากมีสิ่งผิดปกติเกิดขึ้นในระหว่างการบันทึกเสียง (ทั้งเสียงและวิดีโอจะถูกดักจับพร้อมกัน แต่ถ้าโมดูล snd_usb_audio ของคุณได้โหลดไปแล้ว การจับเสียงและวิดีโอนั้นเอง)
5.-คุณสมบัติ TV Tuner ของฉันรองรับหลายอินพุตเสียงซึ่งรวมถึงการรวมเข้ากับอุปกรณ์เสียงฝังตัวในแผงวงจรหลักของฉัน (ผ่านการเชื่อมต่อสายเคเบิลไปยัง aux-line และควบคุมโดย sound mixer) คุณตรวจสอบว่าอันไหนดีที่สุดสำหรับ คุณและจำไว้ว่าค่าเริ่มต้นมักจะถูกทำเครื่องหมายว่า "ดีที่สุดสำหรับคุณ"
6.- หากทุกอย่างเรียบร้อยคุณจะเห็นหน้าต่างเล็ก ๆ พร้อมข้อความที่อ่านดังนี้:
"ความสำเร็จ! / dev / video2 สามารถอ่าน - และเขียนได้!"
คลิก "ตกลง" เพื่อดำเนินการต่อ
7.-หลังจากนั้นคุณสามารถเลือกจากรายการตัวเลือกการบันทึกที่มีอยู่ในระบบของคุณ ฉันได้ติดตั้งสิ่งที่คุณเห็นในภาพหน้าจอถัดไป ทุกคนที่ถูกต้องและมีคุณภาพไม่ได้สะท้อนให้เห็นถึงการเปลี่ยนแปลงที่สำคัญ แต่ผมเองชอบmencoder หากคุณยังไม่มีการติดตั้งใด ๆ คุณควรติดตั้งเพื่อทำการทดสอบ
8.-หลังจากที่คุณเลือกการตั้งค่าซอฟต์แวร์การเข้ารหัสของคุณ (ในขั้นตอนก่อนหน้า) คุณจะถูกถามถึงอัตราส่วนภาพ หากคุณไม่มีประสบการณ์เกี่ยวกับเรื่องนี้ให้ทิ้งมันไว้อย่างที่เป็นอยู่ โดยปกติแล้วจะเป็นค่าเริ่มต้นที่เหมาะกับสัญญาณทีวีจูนเนอร์ของคุณ
9.-ขึ้นอยู่กับตัวเลือกของคุณที่เกี่ยวข้องกับอัตราส่วนกว้างยาวคุณจะมีหลายตัวเลือกสำหรับคุณภาพของวิดีโอรวมถึงบิตเรตคำอธิบายในหน้าต่างถัดไปนั้นมีความเฉพาะเจาะจงมาก โปรดจำไว้ว่า: บิตเรตที่สูงขึ้น (คุณภาพดีที่สุด) ขนาดไฟล์วิดีโอจะกลายเป็นจำนวนมหาศาล
10.-หลังจากนั้นเราต้องเลือกว่าการจับภาพวิดีโอของเราจะนานแค่ไหน มีสถานีที่ตั้งไว้ล่วงหน้าหลายแห่งฉันเลือก "30 วินาทีสำหรับการทดสอบ" ในตัวอย่างนี้ แต่คุณสามารถเลือกใด ๆ หรือแม้กระทั่งเลือก "ไม่ จำกัด " เพื่อให้คุณตัดสินใจเมื่อจะหยุดการบันทึก
11.-ถัดไปคุณจะถูกถามชื่อไฟล์โดยตั้งเป็นค่าเริ่มต้นซึ่งคุณสามารถเปลี่ยนได้ในหน้าจอนี้
12.-คุณจะได้รับแจ้งให้ตรวจสอบ "ตัวเลือกการบันทึก" ของคุณในหน้าจอถัดไปเพียงคลิก "ตกลง"
13.-คลิกอีกครั้งเพื่อเริ่มต้น
14.-เมื่อทำการบันทึกเทอร์มินัลอาจแสดงกิจกรรมบางอย่างและมีหน้าต่างเล็ก ๆ ดังนี้:
15.- เมื่อสิ้นสุดกระบวนการคุณจะได้รับหน้าต่างยืนยัน
และ ... แค่นั้นแหละ ...
คุณสามารถยกเลิกการบันทึกหรือดำเนินการเองได้โดยกด ESC เมื่อใดก็ได้จะไม่มีการเปลี่ยนแปลงเลย
ในตอนท้ายของการบันทึกคุณจะมีวิดีโอในสถานที่ที่คุณเลือกในขั้นตอนที่ 11 ร่วมกับไฟล์บันทึกที่มีชื่อเช่น: "testvideo0.log" หรืออะไรทำนองนั้น
นี่เป็นวิธีที่ง่ายที่สุดในการเข้ารหัสจากเครื่องรับสัญญาณโทรทัศน์ RF รวบรวมเสียงและวิดีโอในไฟล์เดียวกัน
ฉันมีกระบวนการอื่นที่สามารถทำได้โดยใช้กระบวนการ python ซึ่งมี GUI ซึ่งคุณสามารถจัดการกับสิ่งที่มีประโยชน์หลายอย่างเช่นการเปลี่ยนช่องทางทำการทดสอบก่อนบันทึกและแม้แต่บันทึก แต่บางครั้งมันก็ทำให้ฉันล้มเหลว หากคุณต้องการโปรดแจ้งให้เราทราบว่าฉันจะติดต่อคุณได้อย่างไร ฉันไม่ต้องการที่จะเขียน parchments หรือพระคัมภีร์ ... ฮ่า ๆ !
หากกระบวนการนี้ใช้ไม่ได้กับกรณีของคุณโปรดแจ้งให้เราทราบรวมถึงผลลัพธ์ของคุณเพื่อให้การสนับสนุนก่อนที่จะลบคำตอบนี้ ขอบคุณและ...
โชคดี!
คุณต้องลอง "QtCAM" - ซอฟต์แวร์โอเพ่นซอร์ส Linux Webcamera ฟรีพร้อมการตั้งค่าการควบคุมภาพมากกว่า 10 รายการ
นี่คือคำสั่งที่ง่ายที่สุด:
ffmpeg -i /dev/video0 output.mp4