Kaip pašalinti reklamas iš įrašyto filmo

Facebooktwittergoogle_pluspinterestlinkedintumblrmail
Filmo „Lesė“ kadras
Filmo „Lesė“ kadras

Prieš kurį laiką vaikams įrašiau per televizorių rodytą filmą „Lesė“. Į įrašą taip pat papuolė iškart po „Lesės“ rodytas „Kaip prisijaukinti slibiną“ serijos filmukas „Kaulų traiškytojas“. Taigi, skaitmeninės televizijos priedėlyje esančiame USB rakte radau 1,9 GB *.ts failą. Pakartotinai žiūrint šį filmą erzina reklamos, kurias TV priedėlyje reikia „prasukti“, o jei nori pasižiūrėti tik „Kaulų traiškytoją“, „prasukti“ reikia beveik pusantros valandos. Nepatogu.

Taigi, kaip „iškirpti“ iš įrašo reklamas ir išskirstyti filmus į atskirus failus? Šiame įraše paaiškinsiu, kaip tai padaryti. Rašau daugiau sau nei kitiems – kartas nuo karto vis prisireikia tai padaryti, tad jei čia pasirašysiu, kitą sykį žinosiu, kur ieškoti 🙂

ffmpeg logotipas
ffmpeg logotipas
Sakykime, kad mūsų įrašo failo pavadinimas – irasas.ts. Darbui naudosime programą ffmpeg. Ji prieinama ir Windows, ir Linux bei Mac operacinėms sistemoms.

Trumpa instrukcija, kaip parengti ffmpeg darbui Windows OS, pridėta šio įrašo gale. Daugelis čia aprašytų komandų be modifikacijų turėtų veikti Windows OS.

Aš pats naudoju Linux OS; ffmpeg yra turbūt visuose Linux distributyvuose, ir galima šią programą įdiegti bet kurio distributyvo programų valdymo priemonėmis. Daug kur ši programa yra įdiegta iš anksto.

Tiesa, programa veikia komandų eilutės aplinkoje 🙂 Taigi, Linux OS reikės naudoti kokį nors terminalo emuliatorių (Xterm, Konsole ar pan.), o Windows OS atsidarykite Windows komandų eilutės programą cmd (jei nežinote kaip, žiūrėkite čia. ir nukeliaukite toje programoje į aplanką, kur yra ffmpeg.exe ir irasas.ts failai.

Mūsų įrašo tvarkymas – trijų žingsnių procesas. Visų pirma reikia perkoduoti įrašą į formatą, kuriuo norėsime saugoti filmus. Antra, reikia iškirpti iš įrašo naudingas dalis (tai yra, dalis, kuriose nėra reklamų). Ir trečia, reikia sujungti filmo dalis – atskirus failus – į vieną failą.

Perkoduojame filmą

Taigi, pirma perkoduokime įrašo failą iš ts (Transmission Stream) į mp4 (MPEG-4) formatą, kuriuo norėsime išsaugoti filmą.

ffmpeg -i irasas.ts irasas.mp4

Tai užtruks. Kai programa baigs darbą, pasižiūrėkime, kiek vietos užima failai. Mano įrašo atveju, jo apimtis sumažėjo nuo 1,9GB iki 1,1GB, nes mp4 formatas kur kas geriau suspaudžia duomenis.

Iškerpame naudingas įrašo dalis

Dabar galime peržiūrėti įrašą ir nustatyti, kur prasideda ir baigiasi naudingos įrašo dalys. Tiesiog paleiskime VLC ar kitą programą ir suraskime taškus laike, kai reklama prasideda ar pasibaigia, ir kur prasideda ir pasibaigia pats filmas.

Mano įrašo atveju tie taškai buvo tokie:

00:00:00 - įrašo ir filmo „Lesė“ pradžia
00:28:39 - pirmojo reklamos bloko pradžia
00:42:14 - pirmojo reklamos epizodo pabaiga
01:22:50 - antrojo reklamos epizodo pradžia
01:35:42 - antrojo reklamos epizodo pabaiga
01:52:55 - filmo „Lesė“ pabaiga
01:53:04 - filmuko „Kaulų traiškytojas“ pradžia
02:06:02 - filmuko „Kaulų traiškytojas“ pabaiga

Taigi, mums reikalingos šios įrašo atkarpos:

pradžia    pabaiga
„Lesė“:
00:00:00 - 00:28:39
00:42:14 - 01:22:50
01:35:42 - 01:52:55

„Kaulų traiškytojas“
01:53:04 - 02:06:02

Programai ffmpeg šiuos reikia nurodyti kiekvieno epizodo pradžios tašką bei epizodo trukmę. Eee, o mes turime tik pradžios taškus ir pabaigos taškus. Ką gi, nėra taip sudėtinga suskaičiuoti epizodų trukmę atėmus iš pabaigos taško pradžios tašką, tačiau tai sudėtingiau, jei turime ne sekundes, o taškus valandos:minutės:sekundės formatu. Kad ši problema sumažėtų, galima pasinaudoti specialiu internete prieinamu skaičiuotuvu, skirtu operacijoms su laiku atlikti.

Pasinaudoję skaičiuotuvu sužinome, kad:

pradžia    trukmė
„Lesė“:
00:00:00 - 00:28:39
00:42:14 - 00:40:36
01:35:42 - 00:17:13

„Kaulų traiškytojas“
01:53:04 - 00:12:58

Dabar reikia visus šiuos taškus suvesti į ffmpeg programos komandą, kuri atrodo štai taip:

ffmpeg -i irasas.mp4 -ss 00:00:00 -t 00:28:39 -c copy lese1.mp4 \
    -ss 00:42:14 -t 00:40:36 -c copy lese2.mp4 \
    -ss 01:35:42 -t 00:17:12 -c copy lese3.mp4 \
    -ss 01:53:04 -t 00:12:58 -c copy kaulu-traiskytojas.mp4

Aukščiau įrašytoje komandoje -ss parinktis nurodo kiekvieno epizodo pradžią, -t parinktis – epizodo ilgį, -c copy parinktis nurodo, kad perkoduoti nereikia, kad audio ir video takeliai tiesiog kopijuojami. Pasvirojo brukšnelio simbolis paprasčiausiai nurodo, kad komanda bus tęsiama kitoje eilutėje (taip daroma Linux’e; Windows’uose tam vartojamas ^ simbolis; šie eilučių lūžiai visiškai nebūtini, visa komanda gali būti vienoje eilutėje).

Taigi, vykdome komandą. Ji bus įvykdyta palyginti greitai, nes failas tik „sukarpomas“, nevykdomas perkodavimas.

Turime tokius nurodytų dydžių failus:

110M - kaulu-traiskytojas.mp4
230M - lese1.mp4
336M - lese2.mp4
211M - lese3.mp4

Galime pasitikrinti, ar tiksliai ffmpeg nustatė iškarpų pradžias ir pabaigas (nes ffmpeg skaičiuoja įrašo laiką kiek kitaip, nei VLC ar kiti grotuvai, todėl galimi nedideli neatitikimai). Jei randame neatitikimų, galime šiek tiek pakoreguoti įrašų pradžias ir trukmes ir pakartotinai įvykdyti komandą.

Epizodų sujungimas

Beliko sujungti tris filmo „Lesė“ dalis, kad vėl turėtume vieną failą.

ffmpeg -f concat \
    -i <(printf "file '%s'\n" $(pwd)/lese*.mp4) \
    -c copy lese.mp4

Ši komanda sujungia visus tris failus, kurie prasideda žodžiu lese, ir baigiasi priesaga mp4, į vieną didelį failą.

Plačiau paaiškinti, ką daro eilutės fragmentas -i <(printf "file '%s'\n" $(pwd)/lese*.mp4) ganėtinai sudėtinga. Be to, ši komanda neveiks Windows OS. Tad galima ir paprasčiau daryti. Pasirašyti tokį štai tokio turinio teksto failiuką greta apdorojamų mp4 failų:

file lese1.mp4
file lese2.mp4
file lese3.mp4

Pavadinkime failą map.txt, ir įvykdykime tokią komandą:

ffmpeg -f concat -i map.txt -c copy lese.mp4

Taigi, rezultatas toks. Turime 110MB dydžio filmuką kaulu-traiskytojas.mp4 ir 776MB failą lese.mp4 – be intarpų ar reklamų.

Tikiuosi, kam nors bus naudinga!

Ffmpeg ir Windows

Ffmpeg Windows sistemai galima atsisiųsti iš čia.

ffmpeg atsisiuntimas
ffmpeg atsisiuntimas

Iš atsisiųsto *.zip archyvo, jame esančio bin/ aplanko, ištraukite ffmpeg.exe failą ir nukipijuokite jį ten pat, kur yra filmo failas.

Facebooktwittergoogle_pluspinterestlinkedintumblrmail