2009-03-18

DVB-T televizijos įrašų konvertavimas Linux sistemoje

Šiame straipsnyje pabandysiu aprašyti kaip tvarkingai konvertuoti DVB-T *.ts formato įrašus į *.avi   (XviD) formatą. Kurį puikiai supranta visi kompiuterio ir daugelis buitinių grotuvų.

Aprašymas parašytas, kaip visus darbus atlikti Linux sistemose, bet daug ką galima lygiai taip pat atlikti ir kitose OS.

Kaip žinia *.ts įrašai konvertavimo požiūriu yra gana įnoringi. Daugelyje įrašų vis dėlto pasitaiko įrašymo klaidų, mat DVB-T televizija transliuojama oru, o ne kabeliais ir dėl to kitaip tiesiog neįmanoma. Būtent dėlto daugelis įprastinių video konvertavimo priemonių, su *.ts įrašais nesusidoroja ir konvertavimo metu prarandama audio/video sinchronizacija.

Konvertavimui reikalinga:

  • Linux arba kita *nix sistema.
  • Mencoder
  • Naujausia Avidemux versija
  • Keleto GB laisvos disko vietos
  • Na ir žinoma pačio *.ts formato DVB-T įrašo.

Pats konvertavimas vyks dviem etapais. Pirmo etapo metu bus įrašas perkonvertuotas į mpeg2 formatą kurį puikiai supranta visos video redagavimo programos. Antrame etape bus iškarpomos reklamos, nukarpomi juodi video įrašo kraštai, pritaikomi kiti filtrai ir pats video failas suglaudinamas XviD kodeku.

Pirmas etapas:

Pirmiausia turėsite susikurti paprastą bash skriptą pavadinimu „convertTS.sh“:
#!/bin/sh
name=$(echo $1 | awk -F"." '{print $1}');
mencoder $1 -vf yadif=2 -pp 6 -mc 20 -oac mp3lame -lameopts cbr:br=128 -ovc lavc -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_minrate=6000:vrc_maxrate=9800:vbitrate=8000:keyint=10:aspect=1.333:trell -o "$name.avi"

Šis skriptas tiesiog paleidžia mencoder programą su tam tikromis nuostatomis. Pabandysiu nusakyti pagrindines nuostatas:
-vf yadif=2 Deinterlace filtras, be jo greito judesio scenose po konvertavimo atsirastų „šukos“.
-pp 6 Įjungiamas Post Proccesing, su juo gaunama geresnė vaizdo kokybė
-mc 20 Garso/vaizdo sinchronizacijos lygis. Ypač svarbi nuostata konvertuojant DVB-T televizijos įrašus.
-oac mp3lame -lameopts cbr:br=128 Garsas iškart perkonvertuojamas į MP3 128kbps.
-ovc lavc -lavcopts vcodec=mpeg2video........ Vaizdas perkonvertuojamas į mpeg2. Konvertuojama į mpeg2 todėl, kad konvertuojant į šį formatą disko vietos sunaudojama pakankamai mažai, o kokybė prarandama minimaliai.

Šį skriptą paleisti galime paprastai konsolėje įrašę:
> sh convertTS.sh file.ts
Vietoje „file.ts“ nurodykite savo DVB-T failo buvimo vietą. Paleidę skriptą, tame pačiame Video „bitrate“ kataloge atsiras *.avi formato failas. Ir noriu iškart įspėti, jis užims daug, 10min. įrašo reikės apie 500MB disko vietos. Dėl to, kas šis failas dar nėra glaudintas.

Beje pats konvertavimo procesas šiek tiek užtruks, gal būt 10min., gal pusvalandį. Viskas priklauso nuo jūsų turimo procesoriaus bei vaizdo įrašo ilgio.

Kai skriptas baigs konvertavimo darbą, iškart galite pereiti prie antrojo etapo:

Antras etapas:

Šio etapo metu vyks vaizdo įrašo redagavimas ir suspaudimas.

Pirmiausia atverkite Avidemux programą ir skripto pagamintą failą (File→Open). O po to atlikite veiksmus iš eilės:

  • Reklamų pašalinimas:

Reklamas pašalinti paprasta. Tiesiog slankiokite apačioje esantį slankiklį ir stenkitės pažymėti reklamos pradžią ir pabaigą. Norėdami pažymėti reklamos pradžią nuspauskite šalia slinkiklio esantį mygtuką su raide „A“. O norėdami pažymėti pabaigą nuspauskite mygtuką su raide „B“.
Avidemux
Norėdami tiksliau nustatyti reklamos pradžią ar pabaigą, naudokitės klaviatūros rodyklių klavišais.
Kai pažymėjote savo norimą iškarpą, eikite į meniu ir nuspauskite: „Edit→Cut“.

Šitaip kartokite, kol neliks nė vienos reklamos ir vaizdo įraše nebebus nieko nereikalingo.

  • Video „bitrate“ apskaičiavimas
„Video bitrate“ tai vaizdo duomenų srauto dydis. Kitaip tariant tai tas kiekis informacijos bitų kuris tenka užkoduoti vienai sekundei vaizdo. Kuo „Video bitrate“ didesnis, tuo vaizdo kokybė gaunasi geresnė, bet tuo pačiu ir failo dydis gausis didesnis. Priešingu atveju gausis mažesnis failas, bet ir vaizdo kokybė atitinkamai suprastės.

Kaip pasirinkti tinkamo dydžio bitrate?
a.) Jei jums nerūpi  būsimo failo dydis, galite rinktis bitrate 1000kbps. Šio dydžio visiškai pakanka užkoduoti dabartinės kokybės DVB-T televizijos įrašams. Na žinoma galite rinktis ir šiek tiek daugiau, 1200kbs ar 1400kbs. jei norite būti tikri dėl kokybės.
b.) Jei jums vis dėl to svarbus failų dydis, pasinaudokite skaičiuokle: Ją paleisti galite iš meniu: „Tools→Calculator...“. Ir atsivėrusiame lange nustatykite nustatymą „Medium“ į „Custom“ ir „Custom size“ langelyje nurodykite savo norimą būsimo failo dydį. Taip kaip parodyta šioje nuotraukoje:
Avidemux Calculator
Rekomenduojami failų dydžiai:
Video įrašo trukmė (min) Rekomenduojamas failo dydis (MB)
18:00-23:59 175
24:00-34:59 233
35:00-52:59 350
53:00-59:59 440
60:00-64:59 525
65:00-95:00 700
Šie failų dydžiai yra jau nuo seniai plačiai naudojami internetinėse bendruomenėse. Tad patariu ir jums juos naudoti.
Bet, kad ir kokį failo dydį pasirinktumėte, „video bitrate“, negali būti mažesnis nei 800kbps, nes jei bus mažesnė, per nelyg nukentės video kokybė. Taip pat nėra prasmės „video bitrate“ taikyti daugiau nei 1500kbps, nes tai tebus tik be reikalingas disko vietos švaistymas.

Taip pat skaičiuodami busimą failo dydį, papildomai pridėkite 2MB. Nes būsimas failas dažniausiai visada gaunasi šiek tiek mažesnis nei buvo numatyta.
  • Vaizdo įrašo suspaudimo (koduotės) nustatymai:
Kai iškarpėte reklamas, nustatykite šoninėje nustatymų juostoje video suspaudimo kodeką į „MPEG-4 ASP (Xvid4)“. Taip kaip parodyta šioje nuotraukoje:
Avidemux
Vėliau būtinai paspauskite šiek tiek žemiau „Video“ dalyje esantį „Configure“ mygtuką. Atsivėrusiame lange nustatykite dvi nuostatas:
„Encoding mode“ - „Two Pass - Average Bitrate“
„Average bitrate (kb/s) - nurodykite „video bitrate“ kurį apskaičiavote anksčiau.
Pavyzdys:
Avidemux XviD Settings
Kai viską šiame lange nustatysite, nepamirškite nuspausti mygtuko „OK“.

Juodų vaizdo kraštų apkarpymas:
Kadangi pas mus skaitmeninė DVB-T televizija dar nėra visai skaitmeninė, tai vaizdo kraštuose dėl to atsiranda juodos juostos. Matyt dar iš studijų gaunamas signalas yra analoginis ir tik kažkuriame perdavimo etape jis konvertuojamas į skaitmeninį. Tikėkimės, kad netolimoje ateityje Lietuvoje bus pereita prie „gryno“ skaitmeninio signalo. Tada šio punkto nereikės vykdyti.

Norėdami pašalinti juodus vaizdo kraštus spauskite meniu punktą „Video→Filters“. Atsiradusiame lange susiraskite filtrą pavadinimu „Crop“. Jis yra „Transform“ skiltyje. Tada tą filtrą du kart spustelėkite ir atsidarys langas. Tada atsidariusiame lange nustatykite „Left“, „Right“, „Top“ ir „Bottom“ reikšmes taip, kad apačioje esančiame vaizde nesimatytų juodų kraštų. Po visko nepamirškite nuspausti mygtuko „OK“.



  • Video rezoliucijos nustatymas:
Kadangi pas mus televizijos raiška nestandartinė (544x576), o dar nukarpius kraštus ji gali tapti tokia kuri bus netinkama užkoduoti XviD kodeku. Todėl todėl reikia keisti rezoliuciją. Rekomenduoju jums naudoti 640x480, 640 - plotis, 480 -aukštis. Plačiaformačio formato įrašams atitinkamai: 640x400.

Žinoma galite rinktis ir kitokią rezoliuciją, tik atminkite rezoliucijos kraštinių dydžiai (aukštis ir plotis) būtinai turi dalintis iš 16. Nes tik tokiu atveju video suspaudimo kodekai geriausiai atlieka savo darbą.

Rezoliuciją pakeisti galite atsidarę filtrų langą: „Video→Filters“. Ir ten susiradę „Resize“ filtrą. Jis yra „Transform“ skiltyje. Ir atsidariusiame lange suveskite parametrus:
nuimkite varnelę nuo  „Lock Aspect Ratio“.
„Width“ ir „Height“ langeliuose įveskite savo norimą rezoliuciją. 
„Resize Method“ nustatykite į „Lanzcos3“.

Avidemux Resize Filter

Lanzcos3 vaizdo ištempimą patariu naudoti todėl, kad šis filtras pats kokybiškiausias. Tik jis turi vieną trūkumą - jis lėtas. Jei labai skubate galite naudoti „Bilinear“ ar „Bicubic“, jie žymiai spartesni, tik su jais vaizdo kokybė gaunama tik šiek tiek blogesnė.
Po visko nepamirškite nuspausti mygtuko „OK“.

  • Logotipų šalinimas:
Šis žingsnis iš esmės nėra būtinas. Jo metu tiesiog užmaskuojuomas televizijos logotipas.

Kaip atrodo pašalintas logotipas:
Avidemux Mplayer Delogo Sample

 Bet vis dėlto šis filtras nėra tobulas ir užmaskuotoje vietoje vis teik lieka šiek tiek susiliejusi „dėmė“. Lėto judesio laidose šis filtras išties pateikia puikių rezultatų, bet greito judesio scenose geriau jo nenaudoti.

Šį filtrą galite įjungti atsidarę filtrų langą: „Video→Filters“. Ir ten sussiradę „MPlayer delogo“ filtrą, kuris yra „Miscellaneous“ dalyje. Ir atsidariusiame lange keiskite „X“, „Y“, „Width“ ir „Height“ reikšmes taip, kad lange esantis žalio stačiakampio viduryje atsirastų jums nepatinkantis logotipas. Ir dar patariu stačiakampį padaryti šiek tiek didesnį, nei logotipas, paliekant iš kraštų šiek tiek vietos. Taip tiesiog geriau veikia.

 Darykite taip kaip parodyta pavyzdyje:

Po visko nepamirškite nuspausti mygtuko „OK“.

  • Filtrų eiliškumas:
Dėdami video filtrus, būtinai atkreipkite dėmesį į jų eiliškumą. Pirmoje vietoje būtinai turi būti „Crop“ filtras, po to „Resize“, o poto „Delogo“. Jei kažkurios sukeisite vietomis, gausite visai ne tokius rezultatus kokių tikitės.
 
Filtrų eiliškumas turi atrodyti būtent taip:


  • Kaip atrodys būsimas video failas?:
Avidemux programoje galite iškart peržiūrėti būsimą video failą, kaip jis atrodys ateityje. Ir jei kur nors suklydote, galėsite iškart ištaisyti klaidas.

Jums tiesiog tereikia įjungti galutinio failo peržiūrą. Ją įjungti galite paspaudę meniu: „View→Preview Mode→Output“.

Ir tada jums tiesiog tereikės įjungti mygtuką „Play“ ir matysi galutinį video failo vaizdą.
Jei leidžiant video failą įjungus šį režimą programa trūkčios, nenusigąskite. Tiesiog jūsų kompiuterio procesorius nepajėgia realiu laiku apdoroti jūsų video failo. Trūkčiojimo galutiniame faile tikrai nebus.

  • Video failo išsaugojimas:

Na ir priėjome galutinį etapą, t.y. video failo išsaugojimą bei suspaudimą. Kai viską programoje nustatėte, nustatėtė koduotę, video bitrate, parinkote tinkamus filtrus, tada galite pradėti šį procesą.

Paleisti video failo išsaugojimą galite paspaudę meniu: „File→Save→Save Video“.

Ir įspėju šis konvertavimo procesas šiek tiek užtruks. O kiek daug priklauso tik nuo jūsų turimo kompiuterio procesoriaus, su Intel Core i7 ar Phenom 2 užtruks gal keliolika minučių, o senam Celeron procesoriui gal būt nepakaks ir pusdienio.

Avidemux Encoding

Apibendrinimas

Gal būt čia prirašiau daug labai ir jums pasirodys čia labai sudėtinga. Bet iš tiesų taip nėra, vieną telvizijos įrašą galima apdoroti vos per kelias minutes. Tik pats konvertavimo procesas užtruks gerokai ilgiau.
Galėjau aprašymą parašyti žymiai trumpesnį, tik norėjau paaiškinti kam kiekvienas etapas yra reikalingas ir kokia jo prasmė.

17 komentarų:

  1. -mc opcija daug zadanti :)

    bet kiek trumpai pasibandziau tai mencoder vis dar tose video vietose kur yra interlace dvigubina kadru skaiciu, ko pasekoje vaizdas suleteja, bet -mc veliau atstato a/v sinchronizacija :) bet vistiek tai neiseitis.

    o kokia mencoder versija naudoji?

    AtsakytiPanaikinti
  2. Su mencoder viskas veikia gerai ir be jokių problemų. Jau gal kokį pusšimtį vaizdo įrašų taip perkonvertavau.

    Tik svarbiausia konvertavimo metu, konvertuoti iškart garsą, vaizdą ir būtina -mc opcija. Kitokiu atveju pradings sinchronizacija.

    O interlace čia ne prie ko.

    Naudojama mencoder versija:
    MEncoder dev-SVN-r27637-4.3
    MPlayer-1.0rc2_r27637

    AtsakytiPanaikinti
  3. na man tai arba suletejmai arba vaizdo trukciojimai ant tu vietu kur interlace (nes tose vietose buna 50i o ne 25p).

    jei nesunku gal galetum savo metodu sukonvertuoti si sample ir patalpinti internete? http://ikelk.lt/items/7SLpzqEPUi

    AtsakytiPanaikinti
  4. http://ikelk.lt/items/Y9Y4J3tvCe

    Tas tavo vaizdo klipas baisiai trumpas. Ir dar ko gero su viena klaida. Konvertuojant vaizdo įrašo sinchronizacija susitvarko tik maždaug po 10sek nuo įrašo pradžios. Tadėl visada pradžią reikia po konvertavimo nukirpti.

    Įrašo gale irgi tas pats, garsas arba vaizdas ten pasibaigia ne vienu metu.

    Ir ko tu čia tą vis interlace kartoji?
    Nėra jokių 50i ar 25p.
    Lietuvoje naudojamas PAL standartas ir griežtai jo laikomasi. Dėl to įrašų metu rodomi 25 kadrai per sekundę ir nei daugiau ir nei mažiau.

    O Interlace reiškia reiškia, kad kiekvieno kadro metu atnaujinama tik kas antra eilutė. Ir interlace naudojamas mūsų televizijoje visą laiką, nesvarbu ar tai greito, ar tai lėto judesio scena. Tik lėto judesio scenose, net ir be deinterlace filtrų nesimato vaizdo defektų („šukų“).
    Beje mūsų televizijos oficialus žymėjimas „576i“.

    AtsakytiPanaikinti
  5. anas irasas yra be klaidu, va kaip atrodo teisingai sukonvertuotas tas sample http://ikelk.lt/items/6B9AWdoHqE

    o tavo sukonvertuotame su mencoder matosi aiskus trukciojimai, ismesti kadrai, todel sinchronizacija nepastovi

    interlace kartoju nes lietuvoje skaitmenines tv standartas yra H.264, ir lietuviskiems kanalams yra taikomas PAFF interlacinimo metodas (kai kuriems kanalams MBAFF). Du PAFF paaiskinimai: PAFF: a mix of interlaced and progressive frames ir PAFF allows to decide, on a frame basis, whether to encode each frame as a frame or as two fields.

    jeigu manim netiki, gali TS atsidaryti tiesiai su Avidemux (avidemux nepalaiko nei PAFF nei MBAFF), ir pamatysi kad video trukme bus ilgesne nei sakykim tau rodys VLC, todel kad tiek avidemux tiek mencoder rodys interlaced kadrus kaip du atskitus, o mencoderio -mc opcija ismeto kadrus kad palaikytu a/v sinchronizacija, todel ir matosi trukciojimas

    bet gera zinia kad naujausias (svn) ffmpeg jau susidoroja su sia problema, tai tikekimes greitu metu ir mencoderis patobules

    beje sio interlace metodo palaikyma i ffmpeg idiege http://www.kdenlive.org/ programos autorius

    AtsakytiPanaikinti
  6. Jau seniai PAFF palaikymas į mplayer/mencoder įdiegtas.

    Anksčiau su mplayer net žiūrėti įrašų nebuvo galima. O po to kai buvo pataisymas įdiegtas, nuo tada kuo puikiausiai rodo.

    Esu įsitikinęs, kad su mencoder kuo puikiausiai galima konvertuoti įrašus.
    Tik reikia parinkti tinkamas parinktis. Su -mc nuostata jau visai neblogi rezultatai, nors gal ir neidealūs.
    Reikės dar kartą mencoder nuostatas panagrinėti.

    AtsakytiPanaikinti
  7. PAFF palaikymas yra idiegtas i libavcodec, kuri naudoja mplayer/mencoder, o teisingas dekoduoto vaizdo rodymas yra mplayer/mencoder darbas

    pabandyk ana sample ts paleisti per mplayer be jokiu parametru ir pamatysi suletejima kai kuriom vietom, o per VLC (irgi naudoja libavcodec) viskas gerai

    AtsakytiPanaikinti
  8. su ffmpeg 0.5 (isleistas 2009 03 10) su sia komanta berods konvertuoja idealiai:

    ffmpeg -i pradinis.ts -async 20 -r 25 -vcodec ffvhuff -acodec pcm_s16le outas.avi

    -i failas kuri konvertuoji
    -async 20 sinchronizuoja jei irase buvo klaida (kazkas tokio ar net tas pats kas -mc ant mencoder)
    -r 25 kad konvertuotas video tikrai butu 25 fps (be sios opcijos ffmpeg kartais susimaiso ir naudoja 50fps)
    -vcodec ffvhuff video losseless codekas - visiskai jokio kokybes praradimo bet dideli failai bus
    -acodec pcm_s16le standartinis wav - audio konvertavimas be kokybes praradimo
    outas.avi sukonvertuotas failas

    siuo budu konvertuojant video su laaaabai daug iraso klaidu man nuluzo ffmpeg

    AtsakytiPanaikinti
  9. Gal kokių nuorodų turite į kodekų pliusų ir minusų sąrašų puslapius? Noriu suspausti 1920x1080 video medžiagą, nes MPEG2 1GB užima 12 GB. Pafilmavai vieną dieną ir jau 60 GB kitą dieną dar 40 GB ir jau 100 GB :D Nespėju pirkti HDD :D

    AtsakytiPanaikinti
  10. to Kęstutis:

    HD Video suspaudimui nelabai yra iš ko rinktis:
    h264/AVC - Pats populiariausias šiuo metu naudojamas kodekas HD suspausdinimui. Juo koduojami daugelis BluRay filmų, po internetą laisvai plaukiojančių HD Rip HDTV Rip ir t.t. Populiariausias encoderis - x264. Taip pat yra daugybė komercinių alternatyvų.

    VC-1 - Pasižymi šiek tiek geresnėmis video suspaudimo galimybėmis. Bet kiadangi šis kodekas yra Mi$rosoft nuosavybė, todėl bendras šio kodeko palaikymas yra labai prastas. Šiuo kodeku koduoti failus, ko gero galima tik vieninteliu MS siūlomu kodavimo įrankiu. Nėra galimybės šio kodeko naudoti su MKV, MP4 konteineriais ir t.t.

    Visi kiti kodekai arba jau yra pasenę (XviD, DivX ir t.t.)
    Arba yra labai ankstyvoje kūrimo stadijoje, kaip pvz: Snow Wavelet Codec

    AtsakytiPanaikinti
  11. to: nieko_nera
    ffmpeg irgi ne išeitis.

    1. ffmpeg lūžta vos tik pasitaiko pirma dvb-t įrašo klaida.
    2. ffmpeg neturi normalaus deinterlace. Su -deinterlace nuostata naudojamas kažkoks pats paprasčiausias deinterlace filtras.

    AtsakytiPanaikinti
  12. @Vytax, uzvakar susikompiliavau FFmpeg version SVN-r18213, tai si versija jau nebenuluzta net ant irasu su laaaabai daug klaidu (46 sekundziu irase 764 klaidos :))

    deinterlace galima atlikti veliau, kad ir avidemuxas turi yadif

    truputi patobulinta comandu versija, geresnis susspaudimas, ~34mbps

    ffmpeg -i LNK.ts -r 25 -async 20 -vcodec ffvhuff -pred 2 -context 1 -acodec pcm_s16le outas.avi

    AtsakytiPanaikinti
  13. To Tadas:
    Dėkui. Naujausia ffmpeg svn versija ištiesų nelūžta.

    O kas dėl deinterlace. Tai taikant deinterlace tik antrame etape irgi gaunasi nelabai kokybiškas vaizdas. Įtariu, kad ffvhuff kodekas nėra visiškas lossless.

    AtsakytiPanaikinti
  14. ffvhuff tikrai yra lossless, tai patobulintas huffyuv codeko variantas http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-enc-libavcodec.html#menc-feat-enc-libavcodec-video-codecs

    na jei konvertuoji i lossless kodeka tai neprarasi kokybes deinterlace darydamas veliau

    tik kazkodel man nedraugauja tie avi (konvertuoti su ffmpeg) su avidemux (su windows bandziau), parasiau sia problema i avidemux foruma, gal isspres si reikala http://avidemux.org/admForum/viewtopic.php?id=5856

    Tadas/nieko_nera

    AtsakytiPanaikinti
  15. O nera teke pasiseske ar teke bandyti konvertuoti gyvos transliacijos (sumazinti bitrate)? Buciau be galo dekingas, jei tinklarascio autorius galetu parasyti el. pastu: tomasa@list.ru

    AtsakytiPanaikinti
  16. Viska dariau pagal jusu duota aprasyma,raso kad failas issaugotas,bet pagal tai kaip as ji ivardinau kompiuteris neranda. Kur jis pradingo???

    AtsakytiPanaikinti