Kirjoittaja Aihe: Mencoder ja kuvasuhde  (Luettu 2394 kertaa)

vtp

  • Käyttäjä
  • Viestejä: 285
    • Profiili
Mencoder ja kuvasuhde
« : 14.02.10 - klo:19.23 »
Nyt tarvittaisiin viisaampien jelppiä. Tarkoituksena on muuntaa mencoder-ohjelmalla yuv-muotoista raakavideota vähän paremmin pakattuun dv-muotoon. Ankaran googlettamisen ja kokeilemisen jälkeen olen päätynyt seuraavaan komentoon, jossa lopputuloksena on quicktime-tiedosto:

mencoder <video.yuv> -mc 0 -noskip -vf unsharp -of lavf -lavfopts format=mov -ovc lavc -lavcopts vcodec=dvvideo -o <video.mov>

Tätä on helppo sitten jatkokäsitellä vaikka cinelerrassa. Ongelma on siinä, että video on 16:9 -muotoa, eli pitäisi leveyssuunnassa skaalata 720:sta 1024 -levyiseksi. Tuon ymppääminen komentoon ei ole minulta onnistunut, enkä ole googlella löytänyt toimivaa esimerkkiä.

Saisiko apuja täältä? FFmpeg-ohjelmalla tuotettu .mov-tiedosto ei lataudu cinelerraan oikein, joten siksi kokeilin mencoder-ohjelmaa. Ffmpeg:llä kuva oli jakautunut pystysuunnassa kahteen osaan: vasemmasta sivusta oli ikäänkuin saksittu pala pois ja se oli siirtynyt oikeaan reunaan. Tämä mencoder toimii oikein kunhan saisi tuon kuvasuhteen kohdalleen. Toki tuon voi korjata myös cinelerrassa, joten ei ole katastrofi, mikäli ratkaisua ei ole.

nm

  • Käyttäjä
  • Viestejä: 16354
    • Profiili
Vs: Mencoder ja kuvasuhde
« Vastaus #1 : 15.02.10 - klo:20.01 »
Nyt tarvittaisiin viisaampien jelppiä. Tarkoituksena on muuntaa mencoder-ohjelmalla yuv-muotoista raakavideota vähän paremmin pakattuun dv-muotoon. Ankaran googlettamisen ja kokeilemisen jälkeen olen päätynyt seuraavaan komentoon, jossa lopputuloksena on quicktime-tiedosto:

mencoder <video.yuv> -mc 0 -noskip -vf unsharp -of lavf -lavfopts format=mov -ovc lavc -lavcopts vcodec=dvvideo -o <video.mov>

Tätä on helppo sitten jatkokäsitellä vaikka cinelerrassa. Ongelma on siinä, että video on 16:9 -muotoa, eli pitäisi leveyssuunnassa skaalata 720:sta 1024 -levyiseksi. Tuon ymppääminen komentoon ei ole minulta onnistunut, enkä ole googlella löytänyt toimivaa esimerkkiä.

Eipä taida onnistua MEncoderilla, kun se ei nähtävästi välitä kuvasuhdetietoa libavformatille. FFmpegillä -aspect-parametri ja kuvasuhdeautomatiikka toimii kyllä MOV-formaatissakin.

Lainaus
Ffmpeg:llä kuva oli jakautunut pystysuunnassa kahteen osaan: vasemmasta sivusta oli ikäänkuin saksittu pala pois ja se oli siirtynyt oikeaan reunaan.

YUV-videotiedostosi on ilmeisesti yuv4mpeg-muotoa, kun MEncoder lukee sitä suoraan ilman -rawvideo-säätöjä, eli siinä on alussa headeri. Ehkä ffmpeg-versiosi sekoaa siitä. Testasin itsekin samaa ffmpeg r21450:llä, mutta en havainnut tuollaista ongelmaa. Jos käytät jotain vanhempaa ffmpegin versiota, kokeile päivittää vähintään johonkin vuoden 2009 kehitysversioon. Kokeile myös vaihtaa tiedostotarkenne .y4m:ksi.

vtp

  • Käyttäjä
  • Viestejä: 285
    • Profiili
Vs: Mencoder ja kuvasuhde
« Vastaus #2 : 17.02.10 - klo:10.46 »
Kiitokset! Vastaus selvensi asiaa paljon. Turhaan siis yritin mencoderille kertoa oikeita parametreja.

Kuvan jakautumisessa omat epäilykseni vahvistuivat. Se on todellakin yuv4mpeg-muotoa ja tiedostossa on tosiaan joku headeri, koska ensimmäinen kuvan juova sisältää alussa valkoisen osan, joka siirtää sitten tuota videodataa ja kuva vippaa sivuun!

Käytän Hardyä 8.04, joten en taida lähteä päivittelemään yksittäisiä osia. Voisin tietty hakea ffmpeg:n sorsat ja kääntää sen /usr/local -hakemistoon. Kohtahan tulee uusi 10.04, joten pystyn hyvin elämään siihen asti ongelman kanssa. En ole oikein innostunt näistä välijulkaisuista, vaikka LTS:n kanssa ohjelmat tahtovatkin vanhentua käsiin.

Joka tapauksessa suurkiitokset vastauksesta!

nm

  • Käyttäjä
  • Viestejä: 16354
    • Profiili
Vs: Mencoder ja kuvasuhde
« Vastaus #3 : 17.02.10 - klo:13.10 »
Kuvan jakautumisessa omat epäilykseni vahvistuivat. Se on todellakin yuv4mpeg-muotoa ja tiedostossa on tosiaan joku headeri, koska ensimmäinen kuvan juova sisältää alussa valkoisen osan, joka siirtää sitten tuota videodataa ja kuva vippaa sivuun!

Käänsin Hardyn ffmpegin itselleni, mutta en vieläkään onnistunut toistamaan ongelmaasi. Komentoni oli muotoa: ffmpeg -i tiedosto.yuv -vcodec dvvideo tiedosto.mov (missä tiedosto.yuv:n formaatti on yuv4mpeg).

vtp

  • Käyttäjä
  • Viestejä: 285
    • Profiili
Vs: Mencoder ja kuvasuhde
« Vastaus #4 : 17.02.10 - klo:20.52 »
Itsellänikin ongelma näkyy vaan Cinelerrassa. Muut ohjelmat näyttävät tuon .mov-tiedoston oikein, mutta Cinelerra keksii tuohon alkuun vaalean juovan, joka sitten siirtää loppupäätä eteenpäin, jolloin videon paikka muuttuu.

Selvennetääs taustoja hieman. Minulla siis on Canon FS-100 -videokamera, joka tuottaa lomitettua PAL-kuvaa, siis 25i:tä. Sille on tarkoitus tehdä kohinanpoisto, lomituksen poisto sekä muunnos .mov-muotoon mahdollisimman pienellä pakkauksella, jotta sitä olisi näppärä editoida. Haluan nimenomaan tuosta lomituksesta eroon, jotta se ei häiritse editoitaessa, Samaten haluan äänen omaan ac3-tiedostoon.

Seuraavassa on scripti. Siinä varmasti on parantamisen varaa, mutta se tekee juuri nyt sen, mitä pitääkin. Kamerasta tulee aina jonkin verran kohinaa ja olen löytänyt nyt sellaiset arvot yuvdenoiselle, että kohina häviää verottamatta terävyytä juuri lainkaan. Tämän voisi varmaan putkittaa, jolloin gigaluokan yuv-tiedostoja ei syntyisi, mutta minusta on hauska seurata, kun tiedostot kasvavat. Levytilaakin on riittävästi. Silti parannusehdotuksia otetaan vastaan ja luonnollisesti kuka tahansa, joka omistaa vastaavan kameran, voipi ihan vapaasti käyttää ja parantaa tätä koodia.

#!/bin/bash

if [ $1x == x ]; then
  exit 1
fi

if [ $2x == x ]; then
  FRAMERATE="50:1"
else
  FRAMERATE="$2"
fi

FILE=$(echo "$1"|awk -F'\/' '{print $NF}')
BASE="$(echo $FILE|cut -d'.' -f1)"
AUDIO="$(echo $BASE).ac3"
RAWVIDEO="$(echo $BASE).yuv"
VIDEO0="0_$(echo $RAWVIDEO)"
VIDEO1="1_$(echo $RAWVIDEO)"
FINALVIDEO="$(echo $BASE).mov"

# Äänen ja kuvan erotus
mplayer "$FILE" -nosound -mc 0 -vo yuv4mpeg:file="$RAWVIDEO"
ffmpeg -y -i "$FILE" -vn -acodec copy "$AUDIO"

# Kohinan poisto, osa 1 (temporal noise filter)
cat "$RAWVIDEO" | yuvcorrect -T INTERLACED_BOTTOM_FIRST > "$VIDEO1"

# Kohinan poisto, osa 2 (spatial noise filter)
cat "$VIDEO1" | yuvdenoise -s 2,6,6 -g 0,255,255 -t 4,8,8 > "$VIDEO0"

# Lomituksen poisto kuvasta
mplayer "$VIDEO0" -mc 0 -fps 50 -vf yadif=1,mcdeint=1:1:10 -vo yuv4mpeg:file="$VIDEO1"

# Framerate-muunnos
cat "$VIDEO1" | yuvfps -s 50:1 -r $2 | yuvmotionfps -r 50:1 -p 10 > "$VIDEO0"

# Muunnos dv-muotoon
#ffmpeg -y -i "$VIDEO0" -vcodec dvvideo "$FINALVIDEO"
mencoder "$VIDEO0" -mc 0 -noskip -vf unsharp -of lavf -lavfopts format=mov -ovc lavc -lavcopts vcodec=dvvideo -o "$FINALVIDEO"

# Väliaikaisten tiedostojen poisto
rm "$RAWVIDEO" "$VIDEO0" "$VIDEO1"
exit 0


Se toimii siis näin:
preprocess video_kamerasta.mpg <framerate:1>

Kakkosparametri ei ole pakollinen, mutta siinä suljinajan, jolla video on otettu. Skriptissä ajetaan video yuvmotionfps:n läpi, jolloin laskennallisesti tehdään puuttuvat kuvat väliin. Tulos on videosta riippuen joko hyvä tai huono.

Tuoksena siis on .dv:tä sisältävä .mov-tiedosto, joka on progressiivista videota 50 kuvaa/sek, eli säilyttää aika hyvin sekä liikkeen, että tarkkuuden. Tätä voin sitten vapaasti pyöritellä tai leikellä. Minua suunnattomasti ärsyttää tuo nykiminen, joka tulee 25p -videosta, joten siksi tällainen viritys. Normaali lomituksenpoisto siis ei riitä alkuunkaan.
« Viimeksi muokattu: 17.02.10 - klo:20.55 kirjoittanut vtp »