Lista winnt@man.lodz.pl
[Lista archiwów] [Inne Listy]

Re: [WINNT] Pzyspieszyć materiał video, coś ala youtube x1,25 x1,5 x1,5

To: winnt@man.lodz.pl
Subject: Re: [WINNT] Pzyspieszyć materiał video, coś ala youtube x1,25 x1,5 x1,5 x1,75 x2,0 - ffmpeg pod XP
From: "radekp@konto.pl" <radekp@konto.pl>
Date: Sun, 22 Mar 2020 17:16:40 +0100
Sun, 22 Mar 2020 13:23:23 +0100, w <%MIdG.50587$ffc1.12972@usenetxs.com>,
"jedrek" <wonzespamem@w.on> napisał(-a):

> Plik mam w kontenerze mp4. Na podstawie tego co wskazałeś, zrobiłem tak:
> 
> ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" -filter:a "atempo=2.0" -vn 
> output.mkv
> 
> Coś podobnego próbowałem kilka miesięcy temy ale odpuściłem bo efekt był 
> podobny.
> Na XP jest kumunikat na czerwono:
> 
> Only '-af atempo=2.0' read, ignoring remaining -af options: Use ',' to 
> separate filters
> 
> i wypluwa wnikowo tylko samą fonię w kontenerze mkv.
> Czyli komenda dla video coś mu się nie widzi.

Może filtry trzeba umieścić w jednym cudzysłowiu.
A może stara wersja pod XP nie obsługuje tego, hmm...

A próbowałeś tego?
>ffmpeg -i input.mkv -filter_complex 
>"[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mkv

> Zrobienie samego przyspieszenia video bez fonii, czyli:
> 
> ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" output.mkv
> 
> Robi bez problemu.
> Ale złożenie dwóch komend nie podoba się programowi to co poleciłeś jako 
> zbiorcze polecenie.

Zawsze można dłubać tak, że robisz obie komendy ffmpeg (do output-video.mp4 i
do output-audio.mp4), a potem łączysz to przez:
>ffmpeg -i output-video.mp4 -i output-audio.mp4 -map 0:0 -map 1:1 -codec copy 
>output.mp4
tylko map trzeba poprawić.

Zrobisz batcha i pójdzie. Ale powinno udać się jedną komendą.

> Potem te dwa osobne klocki audio i video składam ręcznie przez mktoolnix to 
> nie ma zastrzeżeń.

w/w komenda załatwi to

> Czy te wartości przyspieszeń muszą być krotnością parzystą?

Tego nie sprawdzałem, ale atempo=2.0 to max (2-krotne przyspieszenie). Jeżeli
chcesz szybciej to musisz to poskładać w "atempo=2.0,atempo=2.0" (to daje
4-krotność).
Na stronie, którą podałem, jest to ładnie wytłumaczone.

> Czy raczej mogą być dowolną liczbą z ułamkiem nieskończonym?
> Jak będzie wyglądać przyspieszenie o 1,5 czy 1,75?
> Dla przyspieszenie x1,75 wstawiamy setpts 0,5714 czy jak?
> A dla przyspieszenie x1,5  wstawiamy setpts 0,6666?
> W przypadku parzystej wielkości widzę, że parametr setpts jest odwrotnością 
> parametru atempo stąd taka dedukcja.

Też tak myślę. Wypróbuj :)

> Jakie wartości mają przyjąć wtedy parametry x.x y.y
> setpts=x.x*PTS[v];[0:a]atempo=y.y

Na logikę ich pomnożenie musi dać 1, czyli jeżeli x.x=0,66 to y.y=1,515151...

> Kolejne polecenie, które wskazałeś
> ffmpeg -i input.mkv -filter_complex 
> "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mkv
> 
> Działa bez problemu.
> Ale chcę ciut wolniej niż 2x przyspieszać
> Próba dla 1,75x da radę? Co wstawić?

Próbuj :)

> A z tym AVI to video musi być jakimś starszym kodekiem typu Xvid robione 
> żeby przyspieszyć przez zmianę parametru fps?

Tak. Najprościej VirtualDubem.

> Czy można to także robić do materiałów kodowanych AVC?

Jest wersja VirtualDuba dla H264/AVC, ale w tej wersji chyba zawsze rekodowało
strumień video. 

> Które narzędzie do zmiany fps w AVI się najlepiej sprawdza?
> Zrobię wtedy próbę jak z tym AVI się to zachowa.

VirtualDub.
Video leci bez rekompresji, audio trzeba zrekodować, ale to idzie szybko.
https://superuser.com/questions/523465/changing-video-speed-without-transcoding-reencoding

> Bo jeżeli sam kodek jakim była kompresja robiona nie ma znaczenia a tylko 
> kontener ma tu wpływ to przeładuję to AVC do kontenera AVI i zrobię próbę.

Możesz spróbować, ale powątpiewam czy VirtualDub (w wersji dla AVI) będzie
współpracował z AVC. O ile oczywiście uda się w ogóle przeładować.
Ja bym odradzał takie dzierganie i raczej skupił się na ffmpeg.

Jeżeli jednak:

You can use avc2avi to put an avc stream (.264 file) outputed by X264.exe in an
avi. This is currently the easiest tool to do that.
Not recommended....but doable.
roozhou
9th April 2010, 04:08
Look at this (http://forum.doom9.org/showthread.php?t=152419). This is
currently the best tool to mux avc to avi.
It currently supports raw/avi/mkv/mp4/flv/ts -> avi remuxing.

Also with my x264 build (http://forum.doom9.org/showthread.php?t=141441), it's
possible to generate avi from x264.

Anyone who claims that avc does not belong to avi knows little about avi. We
don't need special "hacks" to store avc in avi. All we need is splitting
Annex-B stream into separate frames and store them in chunks like other video
codecs. If you try to put MP4-style avc header and frames in avi, of course you
will fail.

> W przypadku zmiany fps rozumiem, że żadne klatki nie są pomijane i np z 
> 25fps robi się np 50fps?

Tak.

> A z tego co widzę w oknie linii komend dla ffmpeg, w czasie realizacji 
> pierwszego proponowanego polecenia, co któraś klatka jest brana do nowego 
> materiału, a reszta przeskakiwana? Czyli powstaje taki jakiś kastrat video? 

Raczej tak.
Ale możesz też zmienić fps bez utraty klatek, tylko czy nie dużo ich będzie na
sekundę i nici z płynnego odtwarzania? Dekodery na kartach mają swój max.

> ffmpeg -i input.mkv -r 100 -filter:v “setpts=0.25*PTS” output.mkv

Parametr -r to docelowa liczba klastek na sekundę.
Czyli miałeś np. 25fps, to będziesz miał 100fps i 4x szybsze video.


<Pop. w Wątku] Aktualny Wątek [Nast. w Wątku>