我需要从我的网络摄像头录制一些视频,虽然 Cheese 可以工作,但是它缺少设置,并且只能输出充满卡顿的 webm 格式等。
似乎找不到任何替代方案...
答案1
古夫克维旨在提供一个简单的 GTK 接口,用于从 Linux UVC 驱动程序支持的设备捕获和查看视频,尽管它也应该适用于任何 v4l2 兼容设备。
该项目基于 luvcview 进行视频渲染,但所有控件都是使用 GTK2 界面构建的。
Guvcview(自 0.9.9 版起)有一个仅控制窗口(来自控制台:guvcview --control_only
,--control_panel
在较新版本中),这允许在其他应用程序上控制图像,例如 ekiga、cheese、mplayer、skype...
声音的。
Guvcview 音频支持基于 portaudio 库,直到版本 0.9.3 为止,都使用阻塞 API 进行音频捕获,从版本 0.9.4 开始使用回调方法,这提供了更好的性能,它也是 portaudio API 的首选方法。
portaudio 支持的所有接口(ALSA、OSD、JACK 等)都应该在 guvcview 中可用。只需确保 portaudio 在编译时启用了所需的接口即可。
UVC 动态控制。
Linux UVC 驱动程序具有扩展控件的实现(这些是特定于供应商的控件,并在 UVC 规范中受支持),它们被称为动态控件,因为它们必须动态加载到驱动程序中。
到目前为止,只有罗技提供了其 UVC 网络摄像头扩展控制的规格,这些规格由 guvcview 支持。
在新的驱动程序修订中,需要管理员权限才能将这些控件添加到驱动程序,因此基本上有两种解决方案:
每次会话至少以 root 身份启动 guvcview(使用
sudo
),自 1.2.0 版本以来,你可以选择--add_ctrls
避免完全启动 guvcview安装 libwebcam 该软件有一个 udev 脚本,可以为你的罗技相机添加必要的控制。
通过 ppa 将 Guvcview 安装到 Ubuntu 12.04
sudo add-apt-repository ppa:pj-assis/ppa
sudo apt-get update
sudo apt-get install guvcview
答案2
如果你需要一个新的应用程序,guvcview很好。
答案3
这个问题的部分内容来自于这个问题的答案:从 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 电视调谐器,我用它来观看/录制直播电视节目/VTR/VCR/RF-DVD/视频转换器和其他 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: [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
只需将所有代码复制/粘贴到名为 tvcap-script.sh 的文件中,授予执行权限并在终端中运行它即可。这个过程非常简单,我将解释如下:
1.-按下 Enter 键后,系统会要求您输入捕获源,并且根据设备的位置(之前已测试过),您可以拥有多个视频源(如我的情况一样),我在此示例中使用 /dev/video2,它指的是我的 USB 电视调谐器。请注意,此屏幕截图没有获得窗口装饰器,但可以在那里看到选项和“确定”按钮。
2.-现在我们需要定义标准,在墨西哥我们使用 NTSC,除非您希望使用具有正方形纵横比的不同标准来捕捉视频,否则您不应该使用 PAL,这确实会损害您的视频质量。这还取决于您居住的地方和您所在国家的标准。
3.-我的电视调谐器有多个输入,您的电视调谐器可以有不同数量的输入,请检查并运行尽可能多的测试,以确定哪一个最适合您的捕获。我将使用与电视相关的输入。(输入 1(电视))
4.-接下来,如果在声音捕获过程中出现问题,您可能会(或不会)收到警告并提供解决方案(音频和视频将同时被捕获,但如果您的 snd_usb_audio 模块已经加载,则可能会导致音频捕获崩溃,从而导致视频捕获本身崩溃)
5.-我的电视调谐器支持多种音频输入,包括与主板上嵌入式声音设备的集成(通过将电缆连接到辅助线并由声音混音器控制),您可以检查哪一个最适合您,并记住默认值通常标记为“最适合您”。
6.- 如果一切顺利,您将看到一个小窗口,其中显示如下消息:
“成功!/dev/video2 可读写!”
单击“确定”继续。
7.-之后,您可以从系统上可用的录制选项列表中进行选择。我安装了您在下一个屏幕截图中看到的内容。任何人都有效,质量没有反映出重大变化,但我个人更喜欢门编码器。如果您尚未安装任何这些,则应安装它以运行您的测试。
8.-在您选择编码软件首选项(在上一步中)后,系统将要求您输入宽高比。如果您没有这方面的经验,请保留原样。它通常默认为更适合您的电视调谐器信号的比率。
9.-根据您对宽高比的选择,您将有多种视频质量选项,同样基于比特率,下一个窗口中的描述非常具体。请记住:比特率越高(最佳质量),视频文件大小就会变得非常大。
10.-之后,我们只需要选择视频录制的时间长度。有几种预设,我在本例中选择了“30 秒用于测试”,但你可以选择任意时间,甚至可以选择“无限制”,以便决定何时停止录制。
11.-接下来,系统会要求您输入文件名,默认情况下会提供一个文件名,您可以在此屏幕中更改该文件名。
12.-系统将提示您在下一个屏幕中检查“录制选项”,只需单击“确定”即可。
13.-只需再单击一次即可开始。
14.-录制的时候,终端可能会显示一些活动,以及如下的小窗口:
15.- 在该过程结束时,您将收到一个确认窗口。
就这样...
您可以随时按 ESC 取消录制或过程本身,不会发生任何变化。
录制结束时,您将在步骤 11 中选择的位置看到视频,同时还有一个日志文件,名称类似:“testvideo0.log”或类似的。
这是从 RF 信号电视调谐器进行编码的最简单方法,将音频和视频收集在同一个文件中。
我有另一个使用 Python 进程实现的进程,该进程具有 GUI,您可以在其中处理一些有用的事情,例如更改频道、运行预录制测试甚至录制,但有时它会让我失败。如果您想要它,请告诉我如何联系您。我不想写羊皮纸或圣经……哈哈!
如果此过程不适用于您的情况,请在删除此答案之前告知我您的结果,以便提供一些支持。谢谢您...
祝你好运!
答案4
最简单的命令ffmpeg:
ffmpeg -i /dev/video0 output.mp4