Próbuję użyć ffmpeg, aby wyciąć pliki wideo w ściśle określonych momentach. Pomoc ffmpeg pokazuje opcję -timecode_frame_start, aby określić ramkę początkową, ale nie jestem w stanie uruchomić tej komendy. Powstały film zawsze zaczyna się na początku oryginalnego filmu. Oto przykład polecenia, które uruchamiam:
ffmpeg -i input.mpg -acodec copy -vcodec copy -timecode_frame_start 200 -vframes 210 -n ouput.mpg
Przesunąłem opcję timecode_frame_start przed innymi opcjami i po nich, bez zmiany wyników. Czy muszę podać dodatkową opcję? Próbowałem różnych formatów plików, mkv, avi, mp4, i nie wydaje się, że problem jest związany z kodekiem. Oto jeden plik, który próbowałem:
http://www.seaotter.com/marine/movies/hermit-long-01.mpg
Czy coś brakuje?
melt
, zobacz Dokładne wycinanie plików wideo z wiersza poleceń - Super UżytkownikOdpowiedzi:
Właśnie dowiedziałem się, że
timecode_frame_start
tak nie działa. Jedynym sposobem na rozpoczęcie od określonych ramek jest konwersja wielu ramek nass.ms
składnię lubhh:mm:ss.ms
. Tak więc, jeśli Twój film ma prędkość 25 klatek na sekundę, a chcesz zacząć od 133 klatek, potrzebujeszWięc biegnij
Należy pamiętać, że wycinanie dokładnych ramek za pomocą funkcji Bitstream Copy (
-c:v copy
) nie jest możliwe, ponieważ nie wszystkie ramki są kodowane wewnętrznie i mogą działać samodzielnie.-ss
zawsze będzie dokładny do ramki.Jeśli chcesz zakodować określoną liczbę ramek, użyj
-frames:v
na przykład:Możesz także użyć filtrów wideo , ale obsługa dźwięku może nie być dokładna. I najwyraźniej wyszukiwanie na ramkach wciąż nie jest cechą. Możesz śledzić ten wątek listy adresowej użytkowników FFmpeg, aby uzyskać więcej informacji:
źródło
select=gte(n\,100)
metoda działa, ale poszukiwanie je się wydajność. Jeśli testujesz, kodując tylko 30 klatek na raz, im dalej w filmie zacznę, tym dłużej trwa ffmpeg z powodu wyszukiwania.Opcja
na przykład,tnie wideo z (obejmuje) 200. na (obejmuje) 300. ramkę, liczenie sekwencji rozpoczyna się od 0.
źródło