Tuesday, October 30, 2012

Repararea desincronizarii din containerele FLV/MP4 bazate pe H264 video si AAC audio

E simplu: desincronizarea asta care apare la conversia fisierului in orice altceva, fenomen despre care vorbeam si saptamina trecuta, nu se rezolva in toate cazurile. Nu exista, ca atare, o solutie suta la suta functionala. S-a tot spus ca encoderul bazat pe ffmpeg se descurca cel mai bine cu asa ceva; dupa testele din ultimele saptamini, mi se pare ca se descurca cel mai prost. Astfel, dupa probarea fara succes a majoritatii softurilor care il folosesc ca si "engine" de compresie video, am constatat ca se obtin rezultate mai bune cu softurile bazate pe motorul de compresie mencoder. Un astfel de soft este Super (Super Video Converter), un soft free, care reuseste sa converteasca fisierele bazate pe codecul video H264 in combinatie cu AAC (AAC+) pentru audio fara desincronizare ori "freeze"-uri pe sonor.

Setari folosite:

Output Container - MPG
Output video codec - MPEG-II
Output audio codec - MP2
Engine - Mencoder
Video scale size - no change (rezolutia originala)
FPS - 29.97 (original)
Bitrate - 4000 (setarea cam de trei sau patru ori peste bitrate-ul fisierului original va produce un mpeg "curat" din care se va putea crea orice alt tip de fisier video/audio)
Audio sampling - original (44100 in cazul de fata)
Audio channels - Dual
Audio bitrate - 224 kbps

Monday, October 1, 2012

Metode pentru repararea fisierelor .flv defecte

Atit eu cit si cei care, ca mine, inregistreaza diverse emisiuni de pe stream-urile TV live aflate pe Internet, avem o problema: un stream continuu va fi "taiat" de catre softul de inregistrare absolut aleator, pentru a extrage partea dorita de catre utilizator. Aceasta este, eventual, reproductibila in VLC sau intr-un FLV Player, dar nu functioneaza cu cele mai multe playere si nu poate fi convertita cum trebuie intr-un alt format deoarece nu contine informatiile utile pentru recunoasterea sa de catre soft ori player. Uneori fps-ul e incorect, alteori durata nu e recunoscuta, alteori codecul video ori audio nu este recunoscut, toate ducind, in cazul convertirii fisierului, la desincronizarea audio-video. Una peste alta, metode de reparat un astfel de fisier exista, dar nu sint prea multe (si, in cazul anumitor fisiere, nici prea eficiente).

Metoda 1 - Remuxarea fisierului FLV intr-un fisier MP4

Remuxarea inseamna asocierea streamului video cu cel audio intr-un anume container (format) recunoscut de catre playerul video. Demuxarea e procesul invers, separarea pistei audio de pista video.

Softuri necesare: FLV Extract si MP4Box.

In casuta softului FLV Extract se trage (drag and drop) fisierul flv cu probleme. Se bifeaza ce anume trebuie extras (video + audio), dupa care se lasa sa-si faca treaba. Vor rezulta 2 fisiere, un fisier .264 (fisierul video) si .aac (fisierul audio).

Dupa aceea se creeaza si se executa un fisier .bat (un fisier text, facut in Notepad, si salvat cu terminatia .bat) care contine urmatoarea comanda si este plasat in acelasi director cu programul mp4box.exe:

mp4box.exe -add "filename.264:fps=23.976" -add "filename.aac" "filename_output.mp4

In principiu, rezultatul ar trebui sa fie un fisier sincronizat. Daca nu exista sincronicitate, puteti incerca valoarea fps 29.970. Daca nici asa nu merge, metoda nu functioneaza in cazul fisierului vostru.

Metoda 2 - Injectarea informatiilor suplimentare in fisierul .flv cu ajutorul programului RMC4

RMC4 - Replay Media Catcher 4.0 (versiune portabila sau versiune instalabila)

Se ia programul Replay Media Catcher (de la versiunea 4.0 in sus), se instaleaza, dupa care se incarca fisierul cu probleme in meniul Tools (Tools --> Fix FLV --> Fix duration --> dupa procesul de reparare, se deschide meniul File Contents si se stabileste valoarea "Timestamp" la 15, dupa care se da click pe butonul "Fix time".

Metoda 3 - Folosirea programului FLV Metadata Injector

Programul se gaseste aici si are doua componente, FLVMDI.exe si FLVMDIGUI.exe care trebuiesc puse in acelasi director. Se ruleaza FLVMDIGUI.exe, se incarca fisierul .flv cu probleme, dupa care se da click pe butonul "Run FLVMDI".

Metoda 4 - Reconstructia informatiei privind durata pistei audio VBR cu programul AviDemux

Se descarca Avidemux si, dupa instalare, se deschide cu el fisierul flv cu probleme. Dupa mai multe secunde (ori chiar minute), de gindire, AviDemux ne va avertiza ca avem de-a face cu un container cu erori in frame-uri, dam click pe OK, dupa care mergem la meniul "Audio" si alegem optiunea "Build VBR time map", asteptam ca procesul sa se incheie, dupa care mergem in meniul "Tools" si alegem optiunea "Rebuild I & B frames", asteptam si ca aceasta operatiune sa se termine, dupa care vom salva fisierul cu o noua denumire, dindu-i terminatia .flv.

Metoda 5 - Repararea fisierului folosind un script PHP

Se copiaza scriptul de aici intr-un fisier text, salvindu-se ca flvfixer.php, dupa care se instaleaza un soft PHP server, se copiaza in acelasi director fisierul .php si fisierul .flv cu probleme, dupa care se creeaza un fisier .bat cu un continut de genul:

php flvfixer.php --in denumire_fisier.flv --out denumire_fisier_rezultat.flv

Se executa fisierul .bat.

Metoda 6 - Conversia fisierului flv in format DVD cu ajutorul programului ConvertXtoDVD

ConvertXtoDVD este unul dintre putinele programe adresate neprofesionistilor care are facilitati de reparare a surselor video cu probleme si care accepta o sumedenie de formate. Cind nici una din metodele de sus nu mai merge, deschideti fisierul .flv in programul ConvertXtoDVD, alegeti parametrii corespunzatori de conversie in DVD (de regula PAL/25 fps/Highest Quality/Target DVD-9 - care va produce un fisier mare ca dimensiune, dar care poate fi, ulterior, convertit in altceva fara probleme) si demarati procesul de conversie. In 9 din 10 cazuri fisierul rezultat va avea timpii de sincronizare corectati.

Odata reparat, fisierul flv se poate converti in .avi sau alte formate video cu ajutorul utilitarului FLV Converter.

Spor la lucru!