Skocz do zawartości

"); //]]>
Zdjęcie

Virtualdub + ffmpeg import plugin


  • Zaloguj się, aby dodać odpowiedź
2 odpowiedzi w tym temacie

#1

roland

roland

    Newbie

  • Użytkownik
  • 34 postów
  • Miejscowość:Międzygórze
  • Kamera: Gopro Hero1, Hero3 Black
  • Karta pamięci: Sandisk SD16GB, mSD64GB(10)

Virtualdub jest znanym programem do obróbki video. Nie jest to program do montażu, gdyż porównując go do innych NLE, posiada jedną ścieżkę video i audio oraz pozwala na przejście typu scene cut, więc jest on bardziej przydatny do przetwarzania video. Jego wielką siłą jest bardzo bogaty wybór wszelakich plugin-ów realizujących różnorakie cele. W kolejnych postach będę omawiał te co ciekawsze stosowane przeze mnie.

W tym temacie pokażę jak bezproblemowo zaciągnąć do virtualdub-a praktycznie każdy dowolny plik audio/video. Oryginalnie virtualdub wspiera kontener AVI oraz wszystkie kodeki zarejestrowane w windowsie, mowa tutaj o kodekach Video For Windows a nie kodekach DirectShow-owych. Na dzisiejsze czasy jest to zbyt uboga funkcjonalność, kontener AVI jest wypierany przez MP4, MKV itd. Nasze kamery z reguły używają kontenera MP4 i popularną metodą była konwersja do AVI aby można było film załadować do virtualduba. To rozwiązanie ma wiele wad, potrzeba czasu i przestrzeni dyskowej na konwersję, konwersja też powoduje pewną utratę jakości. Lepszą metodą którą sam kiedyś stosowałem było zainstalowanie AviSynth-a, który posiada importer DirectShow a następnie napisanie prostego skryptu który używa źródła DirectShow do pliku. Virtualdub bezpośrednio wspiera skrypty AviSyntha a że z reguły każdy ma poinstalowane kodeki DirectShow-owe odtwarzające interesujące nas pliki więc tą pokrętną metodą dało się uniknąć konwersji do AVI.

Teraz przedstawiam rozwiązanie które jest prostsze i lepsze pod każdym względem. Jest nim plugin do virtualdub-a bazujący na ffmpeg-u jako zestawie kodeków. Krótko czym jest ffmpeg? Jest to open sourcowy projekt kodeków praktycznie do wszystkiego. Ma pewne niedoróbki ale w naszych zastosowaniach są one nieistotne. Bardzo dużo softu korzysta z ffmpeg-a, zapewne każdy instalował sobie pakiet ffdshow który wystawia jego kodeki jako filtry DirectShow-a.

Okej, koniec gadania, czas do czynów.

1) Wchodzimy na stronę projektu: i ściągamy najnowszą wersję.

2) Ściągnięte archiwum zip zawiera katalogi plugins32, plugins64 oraz plik readme.txt. Upewniamy się że virtual dub jest wyłączony, kopiujemy te dwa katalogi ze ściągniętego archiwum do katalogu w którym mamy binarki virtual dub-a.

3) Gotowe! Odpalamy virtual dub-a i teraz możemy sobie załadować do niego dowolny plik video. MP4 z H264 pójdzie bez żadnego problemu. Pójdzie także video skompresowane HEVC-em, rozdzielczość 4K itd co tam sobie ktoś wymyśli. Wydajnościowo też jest bardzo dobrze, jak ktoś ma wiele corów (a kto nie ma?) to wszystkie będą używane. Plugin ten jest dyskutowany na forum virtualdub-a: Tam też więcej zagadnien gdyby kogoś to interesowało.

 

Znane problemy. FFmpeg jest dość ułomny w kwestii seekowania w kontenerze mpeg TS i PS (transport stream i program stream). Generalnie chodzi o pliki z rozszerzeniem *.ts, *.m2ts, *.mpg. Miałem kłopoty plikami z pewnej kamery, seekowanie nie było precyzyjne a seekowanie wstecz po prostu nie działało (kompletny zwis). To było jednak ze starszą wersją tego plugina, dzisiaj jeszcze sprawdzę jak to wygląda na najnowszej wersji.

 

pozdrawiam

 

Roland



#2

maxtip

maxtip

    Newbie

  • Użytkownik
  • 22 postów
  • Miejscowość:Polska
  • Kamera: brak
  • Karta pamięci: brak

Czy taki plik MP4 możemy przyciąć w tak zmodyfikowanym Virtualdubie i zapisać (wycięty, wybrany fragment) bez rekompresji?



#3

roland

roland

    Newbie

  • Użytkownik
  • 34 postów
  • Miejscowość:Międzygórze
  • Kamera: Gopro Hero1, Hero3 Black
  • Karta pamięci: Sandisk SD16GB, mSD64GB(10)

Czy taki plik MP4 możemy przyciąć w tak zmodyfikowanym Virtualdubie i zapisać (wycięty, wybrany fragment) bez rekompresji?

Nie możemy. Plugin który opisuję dokonuje dekompresji video używając do tego ffmpeg-a tak że późniejszy zapis będzie wymagał ponownej kompresji. No chyba że zapiszesz wynik w formie nieskompresowanej, ale to jest hardkor pod względem wielkości plików.