CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Ffmpeg i szybkie przetwarzanie

Ffmpeg i szybkie przetwarzanie

problemy związane z oprogramowaniem wszelkiego rodzaju.

Ffmpeg i szybkie przetwarzanie

Nowy postprzez Slynx » poniedziałek, 27 lutego 2012, 00:38

Nie znam ffmpeg i jedyne co udało mi się złożyć to:

KOD text:     UKRYJ  
ffmpeg.exe -loglevel info -stats -i file -f null -


Moje pytanie brzmi. Jakie parametry... jak powinno wyglądać całe polecenie by proces przetwarzania był jak najkrótszy.
Jak widać całość i tak nie jest zapisywana (null) i zależy mi na tym by jak najszybciej ffmpeg przetworzył podany plik.
Ktoś potrafi złożyć takie polecenie ?
(-loglevel info -stats -f null muszą pozostać)

Jak coś będzie niejasne to pytać, bo problem dość nietypowy.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: Ffmpeg i szybkie przetwarzanie

Nowy postprzez Cyfrowy Baron » poniedziałek, 27 lutego 2012, 05:57

Możesz opisać dokładniej o co chodzi?! Chcesz przekonwertować film? Bo na tym akurat trochę się znam. Przekonwertowałem i przerobiłem setki filmów. Dlaczego upierasz się przy ffmpeg. U mnie konwersja 1,5h filmu do dowolnego formatu trwa około 9-12 min.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Ffmpeg i szybkie przetwarzanie

Nowy postprzez Slynx » poniedziałek, 27 lutego 2012, 12:47

Napisałem bardzo wyraźnie. Chcę by dany film przeszedł przez ffmpeg. Plik wyjściowy (którego i tak nie będzie (jak widać jest null)) może być dowolnej jakości, to nie ma znaczenia co będzie na wyjściu, ważne żeby ffmpeg przetworzył ten plik, tak jak każdy inny plik podczas konwersji, tylko w najszybszy możliwy sposób. Aktualnie konwersja trwa około 2-3 minut (plik 700 MB). Chciałbym zmniejszyć ten czas.
Jeszcze raz - stworzone polecenie powinno przetwarzać dane wejściowe tak jak to co stworzyłem, jednak to co jest na wyjściu nie ma żadnego znaczenia, chcę by to było wykorzystane do przyśpieszenie czasu takiej konwersji. I właśnie o takie polecenie mi chodzi. Możliwie najszybsze przetworzenie danego filmu. (No chyba, że samo ustawienie na null powoduje maksymalną szybkość przetwarzania takiego filmu - nie wiem, dlatego pytam)

----
Przed chwilą sprawdzałem, dokładnie 2 minuty.
Chcę po prostu by film przeszedł przez algorytmy ffmpeg.

// ----------
A tak swoją drogą, co do tej konwersji. Odpowiedź na pytanie "jak to robisz" byłaby trochę obszerna, trudno żebyś podawał wszystkie opcje podczas konwersji, więc może lepiej - gdzie można znaleźć informacje na temat konwersji z lepszej do gorszej jakości. W internecie jest trochę stronek, ale chodzi mi o coś sensownego, konkretnego, może coś z czego sam korzystałeś.
Często mam filmy w jakości 1080p, które potrafią ważyć po 10 GB. U mnie standardem jest 720 przy bitrate 3000+ pozwalającym osiągnąć plik ok. 2.4 do 3.2 GB. Nigdy nie udaje mi się tego uzyskać w bardzo dobrej jakości, zawsze wychodzi jakoś tragicznie porównując do innych tego typu konwersji (konwersji które przeprowadzały inne osoby by uzyskać podobną jakość). W 99 % kombinowałem tylko z rozdzielczością, bitrate i kodowaniem dwuprzebiegowym, reszty raczej nie ruszałem.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: Ffmpeg i szybkie przetwarzanie

Nowy postprzez Cyfrowy Baron » poniedziałek, 27 lutego 2012, 18:55

Kluczem do jakości przy konwersji jest wartość video bitrate im większa wartość tym lepsza jakość filmu. Istotne są również kodeki i tak np. w przypadku plików AVI najlepszym kodekiem dającym dobrą jakość przy stosunkowo małej wartości video bitrate jest kodek H.264. Daje on lepszą jakość od popularnych kodeków Xvid i DivX. Konwertowałem swego czasu film z DVD Video na AVi i bez widocznej utraty jakości z użyciem kodeka H.264 wystarczyła wartość video bitrate - 1800.

Do konwersji używam programu Xilisoft Video Converter i ImTOO Video Converter. Programy są niemal identyczne. Jeżeli posiadasz kartę graficzną NVIDIA z funkcją CUDA to przy konwersji z użyciem kodeka h.264 programy wykorzystują funkcję CUDA co w zależności od możliwości karty graficznej przyspiesza czas konwersji i daje jeszcze lepszą jakość. CUDA jednak dają znaczne przyspieszenie tam gdzie procesor główny kiepsko sobie radzi, w przeciwnym razie przyspieszenie jest niewielkie.

Do edycji filmów głównie w formacie MPEG 2 zgodnym z DVD używam programu SONY Vegas Pro. Natomiast do tworzenia filmów w formacie DVD Video używam programu SONY DVD Architect Pro.

Do nakładania napisów na filmy korzystam z programu VirtualDub.

Do zmiany szybkości klatek z jakimi film jest odtwarzany np. z 23.976 Fps na 25.000 Fps używam programów VirtualDub Mod i BeSweet. Zmiana klatek z wartośći niżej na wyższą nie jest wcale tak prosta, nie wystarczy przekonwertować filmu używając wyższej wartości Fps, gdyż obraz w filmie będzie się rwał. Trzeba oddzielnie przetworzyć strumień video poprzez przesunięcie wskaźnika klatek w filmie do wyższej wartości i oddzielnie przetworzyć dźwięk, a potem to połączyć tak by obraz zgrywał się z dźwiękiem.



Co się zaś tyczy ffmpeg.exe to u mnie konwersja filmu 700 MB o długości 95 min. trwała 48 sekund. Przy czym o tym jak długo to trwa decyduje długość filmu, a nie rozmiar pliku.
Po zmianie polecenia na:

KOD text:     UKRYJ  
ffmpeg.exe -loglevel info -stats -input.avi  output.avi


Konwersja trwała 4 min. 15 sek. a otrzymany plik był w fatalnej jakości.
Po zmianie polecenia na:

KOD text:     UKRYJ  
ffmpeg -i input.avi -b:v 800k output.avi


czyli zmieniając wartość video bitrate na wyższą konwersja trwała już 5 min. 45 sek. Pomimo iż wartość bitrate nieznacznie wzrosła to otrzymany plik był gorszej jakości. Wynika to zapewne z tego, że zmianie uległa biblioteka zamiast XviD'a ffmpeg użył biblioteki Lavc53.60.100.

Postanowiłem sprawdzić jak poradzi sobie program VirtualDub Mod i okazało się że przetworzenie całego pliku AVI bez zmiany czegokolwiek w tym pliku trwało 18 sek. Gorzej jednak wypadła pełna dekompresja ze zmianą wartości video bitrate, gdyż trwałą 15 min. 20 sek., ale otrzymany plik wyjściowy nie różnił się wizualnie jakością z plikiem wejściowym.

Sprawdziłem jak sprawa przedstawia się w programie ImTOO Video Converter. W tym programie nie można wykonać szybkiej dekompresji, tutaj zawsze plik jest przetwarzany w całości. Zmiana wartości bitrate w pliku wyjściowym z zachowaniem kodeka XviD MPEG 4 trwała 10 min 14 sek., a plik wyjściowy nie różnił się wizualnie od pliku wejściowego. Po zmianie kodeka na H.264 i wartości video bitrate program zaczął korzystać z funkcji CUDA karty graficznej i czas konwersji skrócił się do 8 min. 46 sek. plik wyjściowy wydawał mi się wizualnie nieco lepszy od pliku wejściowego, ale trudno to jednoznacznie stwierdzić, gdyż tylko w scenach gdzie na XviD linie ukośne były ząbkowane na H.264 były wygładzone, poza tym brak większej różnicy, poza wzrostem rozmiaru pliku, co wynikało z wyższej wartości bitrate.



Slynx napisał(a):W 99 % kombinowałem tylko z rozdzielczością, bitrate i kodowaniem dwuprzebiegowym, reszty raczej nie ruszałem.


Wraz ze zmianą rozdzielczości trzeba zmienić wartość video bitrate. Większa rozdzielczość -> większa wartość bitrate, w przeciwnym razie film będzie mniej lub bardziej pikselowaty. Zmiana rozdzielczości nie wpływa na rozmiar pliku wyjściowego, gdyż liczy się tylko wartość bitrate. Ta zasada nie dotyczy plików MPEG zarówno 1 jak i 2, być może i innych formatów, ale nie testowałem. W przypadku AVI nie wpływa na rozmiar o ile nie zwiększysz video bitrate, różnica polega jednak na tym, że np. video bitrate 900 kbps przy rozdzielczości np. 624x336 daje obraz dość dobrej jakości, ale ta sama wartość bitrate przy rozdzielczości np. 720x480 sprawi, że obraz będzie pikselowaty, gdyż przy większej rozdzielczości trzeba zwiększyć wartość video bitrate. By dla rozdzielczości 720x480 uzyskać obraz dobrej jakości trzeba video bitrate zwiększyć co najmniej do 1600 kbps.

Kodowanie dwuprzebiegowe czasami może dać obraz gorszej jakości, jeżeli np. wejściowy plik AVI był już wcześniej dekodowany dwuprzebiegowo.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Ffmpeg i szybkie przetwarzanie

Nowy postprzez Slynx » poniedziałek, 27 lutego 2012, 20:44

No to żeś się rozpisał. Co do tego drugiego pytania to ok. Rozumiem, następnym razem tak zrobię (najczęściej konwertuje na format mkv), ale co do pierwszego... wciąż mi nie odpowiedziałeś. Cały czas dookoła, ale bez dotykania głównego tematu. Przedstawiasz mi czas w różnych programach wykorzystujących ffmpeg (jednak nie podajesz polecenia, jedynie wspominasz o ustawieniach na poziomie gui) i wspominasz o otrzymywanej jakości. Na początku powiedziałem, że plik wynikowy NIE MA ZNACZENIA, bo i tak ni zostanie zapisany na dysku. Chodzi jedynie o przetworzenie pliku. Gdzieś wspominasz o szybkiej dekompresji i ...normalnej, tj. co masz dokładnie na myśli ? Przetworzenie powinno wykorzystywać te same algorytmy... no dobra, co mi tam.

Potrzebuję by ffmpeg przeprowadził próbę konwersji filmu. W przypadku uszkodzonego filmu program przy poleceniu, które stosuje wysypuje różnymi błędami. Podaje czas, miejsce i typ błędu. W testowym pliku było dokładnie 30 komunikatów o błędach. Czas operacji zajął 2 minuty. To co chcę osiągnąć to optymalizacja czasu przetwarzania. Przeglądałem kiedyś dokumentację ffmpeg, jest tam masa różnego rodzaju przełączników, a ktoś kto się na tym zna z pewnością wiedziałby jakie użyć i w jaki sposób by czas takiej konwersji był jak najkrótszy, wiedząc, że plik wyjściowy nie ma znaczenia. Poprawność danego polecenia można sprawdzić (przynajmniej częściowo) ponownie analizując taki plik. Jeśli z nowym poleceniem ponownie zbierze 30 komunikatów o błędach to można je uznać za poprawne.
I dokładnie to jest mi potrzebne. Odpowiednie polecenie w trybie TEKSTOWYM, które zmniejszyło by czas operacji.

Cały czas bierzmy po uwagę, że czas operacji jest i tak zależny tylko od szybkości CPU i odczytu pliku z dysku, bo zapis już nie jest wykonywany.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: Ffmpeg i szybkie przetwarzanie

Nowy postprzez Cyfrowy Baron » poniedziałek, 27 lutego 2012, 22:26

Z moich testów wynika, że najszybszy sposób to ten który zastosowałeś, z wartością NULL zamiast pliku wyjściowego. Nie znam jednak tego programu na tyle dobrze, żeby się orientować, we wszystkich jego przełącznikach.
Ja jeżeli mam uszkodzony plik to go konwertuję w VirtualDub lub SONY Vegas pro i naprawiam. Na prędkości rzędu minuta krócej mi nie zależy.
Swój wywód oparłem na założeniu, że chcesz konwertować filmy z jak największą wydajnością i jakością, a nie na tym, że szukasz błędów.
Do wyszukiwania błędów w plikach AVI dobry jest program AllPlayer.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Software

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 1 gość

cron