2011-08-08 23 views
6

Używam FFmpeg do wyodrębniania pojedynczych klatek do obrazu. Choć niektóre googling, okazuje się, że prowadzenie:FFmpeg -ss dziwne zachowanie

ffmpeg.exe -i video.avi -ss 00:30:00 -y -an -vframes 1 test.png 

... przebiega znacznie wolniej niż poniżej, która jest prawie identyczne, ale chwilowa:

ffmpeg.exe -ss 00:30:00 -i video.avi -y -an -vframes 1 test.png 

Jedyną różnicą jest kolejność - i i -ss. Czy jest to zamierzona "funkcja"? Czy istnieje tutaj jakiś techniczny powód różnicy?

Odpowiedz

6

To jest wykształcone zgadywanie. Kiedy -ss pojawia się przed -i, jest traktowane jako instrukcje dla wejścia, więc pierwsza klatka strumienia wideo jest tą po 30 sekundach. Gdy -ss występuje po -i, jest traktowane jako efekt, a pierwsze 30 sekund klatek jest odczytywanych i upuszczanych, co prowadzi do różnicy wydajności.

6

Odpowiedź wberry jest rzeczywiście bardzo wykształcona. Przeczytanie dokumentacji pomoże nawet dalej:

„-ss pozycję (wejście/wyjście)”

Kiedy stosowany jako opcja wejścia (przed -i), zmierza w tym pliku wejściowego do pozycji . W przypadku użycia jako opcji wyjściowej (przed nazwą pliku wyjściowego) dekoduje, ale odrzuca dane wejściowe, dopóki znaczniki czasu nie osiągną pozycji. Jest to wolniejsze, ale dokładniejsze.

(pozycja może być w sekundach lub HH: MM: SS [.xxx] formie.)

(jak stwierdzono w http://ffmpeg.org/ffmpeg.html#Main-options)

ja obecnie pisania aplikacja audio grabber, i jako taka używam wolniejszej, ale dokładniejszej metody. To Ty wybierasz najlepsze podejście.

1

Gdy -ss występuje przed -i, przechodzi do najbliższej klatki kluczowej (co 10 sekund w plikach H.264 dla 25 klatek na sekundę, ponieważ H.264 użyje GOP równej 250). To sprawia, że ​​wyszukiwanie jest naprawdę szybkie, więc możesz dodać kolejne -ss po -i, aby przejść do ułamkowej lokalizacji po pierwszym -ss.

Posiadanie -ss po -i będzie szukało dokładnej lokalizacji, ale jest bardzo wolne.

Zobacz https://trac.ffmpeg.org/wiki/Seeking przykładów i więcej informacji

1

Ja również właśnie zakończył aplikację, która generuje miniaturki z treści wideo.

Należy to sprawdzić, http://ffmpeg.org/trac/ffmpeg/wiki/Seeking%20with%20FFmpeg

Opisuje metodę łączenia -ss flagę (od obu lokalizacjach) w jednolitą polecenia, które zapewnia ramy time dokładność, z szybszej selekcji ramki.

ffmpeg -ss 00:02:30 -i Underworld.Awakening.avi -ss 00:00:30 -vframes 1 out3.jpg

a także zawiera linki do innych możliwych sztuczek, jak wielu kciuki z jednego filmu.