Bất cứ điều gì tốt hơn Cheese để quay video?


56

Tôi cần ghi lại một số video từ webcam của mình và trong khi Cheese hoạt động, nó thiếu cài đặt và chỉ xuất ra định dạng webm đầy lỗi, v.v.

Dường như không thể tìm thấy bất kỳ thay thế ...

Câu trả lời:


57

Guvcview nhằm mục đích cung cấp giao diện GTK đơn giản để quay và xem video từ các thiết bị được hỗ trợ bởi trình điều khiển UVC của Linux, mặc dù nó cũng sẽ hoạt động với mọi thiết bị tương thích v4l2.

Dự án dựa trên luvcview để hiển thị video, nhưng tất cả các điều khiển đều được xây dựng bằng giao diện GTK2.

Guvcview (kể từ phiên bản 0.9.9) có cửa sổ chỉ điều khiển, (từ bảng điều khiển guvcview --control_only:), điều này cho phép kiểm soát hình ảnh trên các ứng dụng khác, như ekiga, phô mai, mplayer, skype ...

Âm thanh.

Hỗ trợ âm thanh Guvcview dựa trên thư viện portaudio, cho đến phiên bản 0.9.3 API chặn được sử dụng để ghi âm, vì phiên bản 0.9.4 được sử dụng thay thế, điều này cung cấp hiệu suất tốt hơn, đây cũng là phương pháp ưa thích cho API portaudio.

Tất cả các giao diện (ALSA, OSD, JACK, ...) được hỗ trợ bởi portaudio nên có sẵn trong guvcview. Chỉ cần đảm bảo portaudio được biên dịch với các giao diện mong muốn được kích hoạt.

Điều khiển động UVC.

Trình điều khiển UVC Linux có một triển khai cho các điều khiển mở rộng (đây là các điều khiển cụ thể của nhà cung cấp và được hỗ trợ trong thông số UVC.), Chúng được gọi là các điều khiển động do chúng phải được tải động vào trình điều khiển.

Cho đến ngày hôm nay, chỉ có logitech đã cung cấp thông số kỹ thuật cho các điều khiển mở rộng webcam UVC của họ, những điều này được guvcview hỗ trợ.

Trong bản sửa đổi trình điều khiển mới, cần có quyền quản trị để thêm các điều khiển này vào trình điều khiển, vì vậy về cơ bản có hai giải pháp:

  1. bắt đầu guvcview với quyền root (sử dụng sudo) ít nhất một lần mỗi phiên, kể từ phiên bản 1.2.0, bạn có thể thực hiện việc này với tùy chọn --add_ctrlstránh việc phải khởi chạy hoàn toàn guvcview

  2. cài đặt libwebcam phần mềm này có tập lệnh udev sẽ thêm các điều khiển cần thiết vào máy ảnh logitech của bạn.

Cài đặt Guvcview lên Ubuntu 12.04 qua ppa

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

1
Ứng dụng này là tuyệt vời. BTW - hầu hết các điều khiển hoạt động tốt mà không phải làm gì cả.
HDave

Pho mát đơn giản là không làm việc cho tôi, Guvcview hoạt động hoàn hảo. Điều duy nhất là tìm được nguồn đầu vào audo phù hợp mất một phút để chơi, nhưng vẫn không cần phải đọc hướng dẫn hoặc làm một số phép thuật để làm cho nó hoạt động.
jdarling

2
Đối với tất cả các giao diện guvcview tuyệt vời, hiện tại nó đã bị hủy hoại (ít nhất là trong 16.04) bởi bug.launchpad.net/ubfox/+source/guvcview/+orms/1558060 (video bị đóng băng). Thay vào đó, tôi đang sử dụng dòng mencoder từ Commandlinefu.com/commands/view/3498/ (điều chỉnh chiều rộng và chiều cao) và nó hoạt động hoàn hảo.
Miguev

@miguev Phiên bản này có vẻ khắc phục sự cố.
Skippy le Grand Gourou

"Lỗi Guvcview không thể khởi động luồng video trong thiết bị" GUVCVIEW (1): Lỗi Guvcview chỉ số độ phân giải không hợp lệ GUVCVIEW: chỉ số độ phân giải không hợp lệ Lỗi phân đoạn (bị đổ lõi)
Aaron Franke


11

Các phần của câu hỏi này xuất phát từ câu trả lời trong câu hỏi này: Ghi từ băng VHS .

Chúng ta cần đảm bảo rằng phần mềm đang thu thập dữ liệu phù hợp từ thiết bị phù hợp. Hãy bỏ một truy vấn trong thiết bị đầu cuối sẽ cho chúng tôi xem có bao nhiêu thiết bị được kết nối với máy tính của bạn, có thể được sử dụng để thu thập hình ảnh, sử dụng lệnh này trong một thiết bị đầu cuối:

ls -l /dev/video*

Kết quả nên như thế này:

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

Trong trường hợp của tôi, tôi có 3 thiết bị video, trong đó một trong số đó là Bộ điều chỉnh TV USB mà tôi sử dụng để xem / ghi chương trình truyền hình trực tiếp / VTR / VCR / RF-DVD / Bộ chuyển đổi video và các Tín hiệu RF khác.

Các thiết bị khác là USB Webcam được gắn vào khe cắm USB trên máy tính.

Nếu webcam của bạn có micrô, cả âm thanh và video đều có thể được ghi bằng tập lệnh tvcap của Andreas Schalk , mã tôi đặt ở đây để thuận tiện cho bạn:

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

Chỉ cần sao chép / dán tất cả mã này vào một tệp có tên tvcap-script.sh, cấp quyền thực thi và chạy mã trong thiết bị đầu cuối. Quá trình này khá dễ dàng và tôi sẽ giải thích như sau:

1.- Sau khi nhấn Enter, bạn sẽ được hỏi về nguồn chụp và phụ thuộc vào vị trí của thiết bị (đã được kiểm tra trước đó), bạn có thể có - như trong trường hợp của tôi - một số nguồn video, tôi đang sử dụng / dev / video2 cho việc này ví dụ, đề cập đến Bộ điều chỉnh TV USB của tôi. Lưu ý rằng ảnh chụp màn hình này không nhận được trang trí cửa sổ nhưng các tùy chọn và nút "OK" có thể được nhìn thấy ngay tại đó.

nhập mô tả hình ảnh ở đây

2.- Bây giờ chúng tôi cần xác định định mức, ở Mexico, chúng tôi sử dụng NTSC và trừ khi bạn muốn quay video bằng một định mức khác với tỷ lệ khung hình vuông, bạn không nên sử dụng PAL, điều này thực sự có thể gây hại đến chất lượng video của bạn. Nó cũng phụ thuộc vào nơi bạn sống và tiêu chuẩn của đất nước bạn.

nhập mô tả hình ảnh ở đây

3.- Bộ điều chỉnh TV của tôi có nhiều đầu vào, đầu vào của bạn có thể có một lượng đầu vào khác nhau, hãy kiểm tra và chạy bao nhiêu thử nghiệm mà bạn cần để xác định xem đầu vào nào là tốt nhất cho việc chụp của bạn. Tôi sẽ sử dụng một trong đó đề cập đến TV. (Đầu vào 1 (TV))

nhập mô tả hình ảnh ở đây

4.- Tiếp theo, bạn có thể (hoặc không) được cảnh báo và đưa ra giải pháp nếu có sự cố xảy ra trong quá trình thu âm (cả âm thanh và video sẽ được ghi lại ngay lập tức nhưng nếu mô-đun snd_usb_audio của bạn đã được tải thì có thể bị sập thu âm và do đó tự quay video)

nhập mô tả hình ảnh ở đây

5.- Bộ điều chỉnh TV của tôi hỗ trợ một số đầu vào âm thanh, bao gồm tích hợp với thiết bị âm thanh nhúng trong bo mạch chủ của tôi (thông qua kết nối cáp với đường dây phụ và được điều khiển bằng bộ trộn âm thanh), bạn kiểm tra xem cái nào là tốt nhất bạn và hãy nhớ rằng mặc định thường được đánh dấu là "tốt nhất cho bạn".

nhập mô tả hình ảnh ở đây

6.- Nếu mọi thứ đều ổn, bạn sẽ thấy một cửa sổ nhỏ với thông báo đọc một cái gì đó như thế này:

"THÀNH CÔNG! / Dev / video2 có thể đọc được và ghi được!"

nhấp vào "OK" để tiếp tục.

nhập mô tả hình ảnh ở đây

7.- Sau đó, bạn có thể chọn từ danh sách các tùy chọn ghi có sẵn trên hệ thống của mình. Tôi đã cài đặt những gì bạn có thể nhìn thấy trong ảnh chụp màn hình tiếp theo. Bất cứ ai cũng hợp lệ và chất lượng không phản ánh những thay đổi lớn nhưng cá nhân tôi thích mencoder hơn . Nếu bạn chưa cài đặt bất kỳ thứ nào trong số này, bạn nên cài đặt nó để chạy thử nghiệm.

nhập mô tả hình ảnh ở đây

8.- Sau khi bạn đã chọn tùy chọn phần mềm mã hóa (ở bước trước), bạn sẽ được hỏi về tỷ lệ khung hình. Nếu bạn không có kinh nghiệm về điều này, hãy để nó như vậy. Nó thường mặc định phù hợp hơn với tín hiệu TV Tuner của bạn.

nhập mô tả hình ảnh ở đây

9.- Dựa trên lựa chọn của bạn liên quan đến tỷ lệ khung hình, bạn sẽ có một số tùy chọn cho chất lượng video, cũng dựa trên bitrate, mô tả trong cửa sổ tiếp theo rất cụ thể. Hãy nhớ rằng: bitrate cao hơn (chất lượng tốt nhất) kích thước tệp video có thể trở thành một số lượng lớn.

nhập mô tả hình ảnh ở đây

10.- Sau đó, chúng tôi chỉ cần chọn thời gian quay video của chúng tôi. Có một số cài đặt trước, tôi đã chọn "30 giây để thử nghiệm" trong ví dụ này nhưng bạn có thể chọn bất kỳ hoặc thậm chí chọn "không giới hạn" để bạn quyết định khi nào dừng ghi.

nhập mô tả hình ảnh ở đây

11.- Tiếp theo, bạn sẽ được yêu cầu đặt tên tệp, đặt tên theo mặc định, bạn có thể thay đổi trong màn hình này.

nhập mô tả hình ảnh ở đây

12.- Bạn sẽ được nhắc kiểm tra "Tùy chọn ghi âm" trong màn hình tiếp theo, chỉ cần nhấp vào "OK".

nhập mô tả hình ảnh ở đây

13.- Chỉ cần một cú nhấp chuột nữa để bắt đầu.

nhập mô tả hình ảnh ở đây

14.- Khi ghi âm, thiết bị đầu cuối có thể hiển thị một số hoạt động và một cửa sổ nhỏ như thế này:

nhập mô tả hình ảnh ở đây

15.- Khi kết thúc quá trình, bạn sẽ nhận được một cửa sổ xác nhận.

nhập mô tả hình ảnh ở đây

Và ... đó là ...

Bạn có thể hủy bản ghi hoặc quá trình bằng cách nhấn ESC bất cứ lúc nào, sẽ không có thay đổi nào cả.

Khi kết thúc ghi, bạn sẽ có video ở vị trí bạn chọn trong bước 11, đồng hành với tệp nhật ký có tên như: "testvideo0.log" hoặc đại loại như thế.

Đây là cách dễ nhất để mã hóa từ Bộ điều chỉnh TV Tín hiệu RF, thu thập cả âm thanh và video trong cùng một tệp.

Tôi có một quy trình khác đạt được bằng quy trình python có GUI, trong đó bạn có thể xử lý một số điều hữu ích, như thay đổi kênh, chạy thử nghiệm ghi trước và thậm chí ghi lại nhưng đôi khi nó làm tôi thất bại. Nếu bạn muốn nó xin vui lòng cho tôi biết làm thế nào tôi có thể tiếp cận với bạn. Tôi không muốn viết giấy da hoặc một cuốn kinh thánh ... LOL!

Nếu quy trình này không hiệu quả với trường hợp của bạn, vui lòng cho tôi biết bao gồm cả kết quả của bạn để cung cấp một số hỗ trợ trước khi xóa câu trả lời này. Cảm ơn bạn và...

Chúc may mắn!


Bạn khuyên dùng thẻ USB TV Tuner nào và giải pháp trên có hoạt động với hơn 2-3 nguồn cấp dữ liệu video trên một máy linux không? Tôi muốn thử quay 4-8 video trên một máy. Điều đó có khả thi theo ý kiến ​​của bạn không?
CP3O

Bất kỳ thẻ TV Tuner tương tự, cả PCI và / hoặc USB đều phải hoạt động nếu và chỉ khi thiết bị được phát hiện và cài đặt đúng cách. Đối với những gì liên quan đến bản ghi đa nguồn cấp, giải pháp này sẽ hoạt động hoàn hảo nếu bạn chạy một số trường hợp và chọn nguồn cấp dữ liệu đa phương tiện phù hợp. Thật không may, trong một số trường hợp, luồng âm thanh được quản lý bởi bộ trộn âm thanh yêu thích của bạn (giả sử alsa hoặc pulseaudio, jack, v.v.) điều này có thể sẽ cần tinh chỉnh mã để nói luồng âm thanh nào chúng ta sẽ sử dụng cho chụp trên thiết bị video nhất định. Ngoài ra, bạn càng thu được nhiều luồng, càng cần nhiều tài nguyên hơn.
Geppettvs D'Constanzo


0

Đây là lệnh đơn giản nhất:

ffmpeg -i /dev/video0 output.mp4

Xin chào, chào mừng bạn đến hỏi Ubuntu! Bạn có thể vui lòng dành chút thời gian để chỉnh sửa câu trả lời của mình để giải thích cách hoạt động của bình luận và cách giải quyết vấn đề của OP tốt nhất không? Cảm ơn :)
grooveplex

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.