Gå til innhold

[OpenSUSE] Hvordan ta opp video med lyd fra webkamera?


Anbefalte innlegg

Hei folkens.

 

Nå har jeg satt i mange timer og prøvd å løse det som viste seg å bli en utfordring, i stedet for en enkel affære.

Jeg vil noe så enkelt som å spille inn video med lyd fra webcam, i Linux (OpenSUSE).

 

Cheese funger bra helt til jeg begynner å spille inn. Da hakker videoen, og bildet blir dårlig/korrupt.

wxCam fungerer greit kvalitetsmessig, men bildet går alt for raskt.

mencoder gjør også det.

 

Jeg sitter og vurderer å installere Windows på maskinen, men fysj for et nederlag det hadde vært. Det er det samme som å si "det gikk ikke med linux, så jeg måtte installere Windows for første gang på flere år igjen.."... hehe

 

Jeg holder på å sette opp en maskin som skal være en "klikk her for å spille inn en hilsen til brudeparet"-maskin i bryllupet vårt.

Noen som har forslag til hvordan jeg kan gjøre dette?

 

Det hadde vært supert om noen kunne hjelpe meg med dette :)

Endret av cyclo
Emnetittel forbedret
Lenke til kommentar
Videoannonse
Annonse

 

Jeg testet det nettopp, med programmet bare quitter når jeg starter innspillingen...

 

Det er veldig lett med f.eks ffmpeg. Om det er greit med en .sh-fil på skrivebordet som avsluttes med ctrl-c kan jeg lett hjelpe deg.

 

Spennende!

 

Hva med å kjøre 100 % konsollbasert?

Bare at det kommer tekst midt på skjermen som sier "Trykk SPACE for å starte innspilling", "Innspilling pågår, trykk SPACE for å avslutte" og "Videoen ble lagret!"?

 

Kan man trylle frem noe slikt mon tro?

Endret av reminett
Lenke til kommentar

Hva med å kjøre 100 % konsollbasert?

Bare at det kommer tekst midt på skjermen som sier "Trykk SPACE for å starte innspilling", "Innspilling pågår, trykk SPACE for å avslutte" og "Videoen ble lagret!"?

Det skal gå greit, men om X er med kan videoen avspilles tilbake etter opptak.

Lenke til kommentar

Gøy utfordring!

Lagde et kjapt lite script:

 

#!/bin/bash

folder="`pwd`/video"
mkdir -p "$folder"
while true
do
count=`ls -1 "$folder" | wc -l`
(( count += 1 ))
clear
echo "Her kan du legge igjen en videobeskjed!"
echo "Skriv inn navnet ditt og trykk enter for å starte."
echo
read navn
echo
echo "Når du er ferdig kan du trykke enter for å stoppe."
sleep 1 && echo -n "Kamera går om 5 "
sleep 1 && echo -n "4 "
sleep 1 && echo -n "3 "
sleep 1 && echo -n "2 "
sleep 1 && echo -n "1 "
sleep 1 && echo "NÅ!"

ffmpeg -f video4linux2 -s 640x480 -r 30 -i /dev/video0 -f oss -i /dev/dsp -f mp4 "$folder/$count.$navn.mpg" &>/dev/null &

echo
echo "Trykk enter når du er ferdig"
read done
kill %1
echo
echo "Takk for ditt bidrag!"
sleep 5
done

 

Lag en mappe (bryllupsvideo f.eks), legg scriptet i mappen og naviger dit med terminalen. Gjør det kjørbart med chmod +x filnavn og kjør med ./filnavn.

 

Scriptet lager en mappe som heter video der klippene lagres nummerert og merket med navn.

 

Fikk ikke lyd med ffmpeg-linja jeg brukte, men det var bare noe jeg fant på google. Du får det sikkert til hvis du leker litt med den :)

 

Om X er inne i bildet kan videoen spilles av med mplayer etterpå ja :thumbup:

Lenke til kommentar

Det fungerer perfekt, min gode mann!

 

Det eneste jeg måtte gjøre var å legge til en -itsoffset for å synce lyden, og justere bitrade (byttet ut "-f mp4" med "-vcodec mpeg4 5000000").

 

 

Ja, jeg har X. Hvordan ordner vi det?

 

PS: Er det mulig å få teksten større, og midtstilt?

Sånn som vi lekte med Q-Basic i DOS-tidene? :D

Edit 2: Kan kanskje byttes ut med et jpg-bilde?

 

Edit: Er det mulig å kjøre en superenkel X til dette, altså uten KDE osv? Prøvde å leke meg litt fra runlevel 3, med mplayer filnavn.mpg -display 1. Men jeg må seff loade X først.. hvordan loader jeg en strippet X slik at video kan vises?

Endret av reminett
Lenke til kommentar

"xinit kommando"

 

er i alle fall sånn jeg starter XBMC fra terminalen uten DM/DE

 

Det funker med f. eks. Firefox.

Men "mplayer 1.mpg" funker ikke.. skjermen bare flikker til svart, og går tilbake igjen til kommandolinjen..

Lenke til kommentar

Nå har jeg fått til auto-avspilling etter at videoen er spilt inn :)

 

Nå er det bare det siste som gjenstår: Grafisk brukergrensesnitt :D

Kan jeg få til store bokstaver, eller enda bedre; JPG-bilder som vister teksten "Trykk for å spille inn" osv..?

 

PS: Jeg publiserer hele scriptet når det er ferdig, så kan dere se hvordan jeg det ble til slutt.

Lenke til kommentar

Titta litt på det nå.. La inn antiwm (som kjører alt i fullscreen) og brukte xterm. Skal ikke være værre enn å sette en font i .Xdefaults for å få større bokstaver.

 

.xinitrc:

#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)

exec antiwm &
xterm -bg black -fg white

Lenke til kommentar

Gøy utfordring!

Lagde et kjapt lite script:

Flott! Nyaktig hva jeg hadde i tankene, du sparte meg for arbeidet. :)

 

Det eneste jeg måtte gjøre var å legge til en -itsoffset for å synce lyden, og justere bitrade (byttet ut "-f mp4" med "-vcodec mpeg4 5000000").

Jeg hadde heller tatt opp i MPEG(1) med høy bitrate enn MPEG4 ASP som jeg syntes komprimerer for aggresivt. Det gjør det også lettere å brenne på DVD-plater som sikkert er et mål.

 

-f mpegvideo -vcodec mpeg1video -b 4000k -acodec mp2 -ab 224k

Lenke til kommentar

Titta litt på det nå.. La inn antiwm (som kjører alt i fullscreen) og brukte xterm. Skal ikke være værre enn å sette en font i .Xdefaults for å få større bokstaver.

 

.xinitrc:

#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)

exec antiwm &
xterm -bg black -fg white

 

Kan du forklare dette litt nærmere? Skjønte faktisk ingen ting :D

Lenke til kommentar

Antiwm er en ekstremt minimalistisk vindusbehandler. Finnes i aur hvis du bruker arch.

 

.xinitrc er en fil som kjøres når X starter (dersom du bruker startx-kommandoen). Du kan gjøre mye det samme med xinit kommando, men dette er enklere. For å starte en server nr to kan du benytte "startx -- :2".

 

.Xdefaults er en som inneholder konfigurasjon for f.eks xterm og urxvt.

 

Automatisk sentrering av teksten tror jeg blir vanskelig, men du kan jo alltids kjøre på med mellomrom i scriptet for å plassere ting sånn ca midt på skjermen.

Lenke til kommentar

Her er revidert utgave av scriptet :)

 

#!/bin/bash
# 
folder="`pwd`/video"
mkdir -p "$folder"

while true
do
count=`ls -1 "$folder" | wc -l`
(( count += 1 ))
clear
echo "Her kan du legge igjen en videobeskjed!"
echo "Skriv inn navnet ditt og trykk enter for å starte."
echo
read navn
echo
echo "Når du er ferdig kan du trykke enter for å stoppe."
sleep 1 && echo -n "Kamera går om 5.."
sleep 1 && echo -n "4.."
sleep 1 && echo -n "3.."
sleep 1 && echo -n "2.."
sleep 1 && echo -n "1.."
sleep 1 && clear && echo "Kamera går!"

ffmpeg -f video4linux2 -s 640x480 -r 30 -i /dev/video0 -f oss -i /dev/dsp -f mp4 "$folder/$count.$navn.mpg" &>/dev/null &

echo
echo "Trykk enter når du er ferdig"
read done
kill %1
echo
echo "Spiller video"
sleep 2

mplayer -fs "$folder/$count.$navn.mpg" &>/dev/null

clear
echo "Takk for ditt bidrag!"
sleep 6
done

 

Og .xinitrc:

#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)
exec antiwm &
xterm -bg black -fg white -fn 12x24 -e test/testscript
pkill antiwm

 

antiwm ble liggende og bruke 100% cpu etter at x var avsluttet, så jeg la inn pkill antiwm på slutten.

 

Trengte ikke gjøre noe med .Xdefaults for å få større tekst :new_woot:

 

Har en ide om hvordan teksten kanskje kan sentreres. Finnes det en variabel for linjelengde i terminalen? (altså hvor mange bokstaver i bredden). Hvis ikke får vi gjette litt.. Skal leke litt med det :cool:

Lenke til kommentar
  • 2 måneder senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...