Czy można użyć ffmpeg do przycięcia X sekund od początku filmu o nieokreślonej długości?


20

Muszę skrócić pierwsze 1 lub 2 sekundy z serii nagrań FLV o różnych, nieokreślonych długościach. Znalazłem wiele zasobów do wyodrębnienia określonego czasu trwania z filmu (np. 30-sekundowe klipy), ale żadnych do kontynuowania do końca filmu.

Obie te próby dają po prostu skopiowaną wersję wideo, bez pożądanego przycinania:

ffmpeg -ss 2 -vcodec copy -acodec copy -i input.flv output.flv

ffmpeg -ss 2 -t 120 -vcodec copy -acodec copy -i input.flv output.flv

Drugą myślą było: może gdybym określił długość przekraczającą to, co było możliwe, to po prostu doszłoby do końca. Nie ma kości.

Wiem, że to nie jest problem z kodekami lub używaniem sekund zamiast kodu czasowego, ponieważ następujące działały:

ffmpeg -ss 2 -t 5 -vcodec copy -acodec copy -i input.flv output.flv

Jakieś inne pomysły? Jestem otwarty na używanie innych (opartych na Windows) narzędzi wiersza poleceń, jednak zdecydowanie faworyzuję ffmpeg, ponieważ już go używam do tworzenia miniatur i jestem z nim zaznajomiony.

Jeśli to pomoże, moje filmy będą miały mniej niż 2 minuty.

AKTUALIZACJA:

Przeszedłem na używanie Mencodera ( http://www.mplayerhq.hu/ ), ponieważ wygląda na to, że ffmpeg nie osiągnie tego bez dodatkowego hakowania.

Składnia Mencodera służąca do osiągnięcia tego, co postanowiłem zrobić, to:

mencoder.exe -ss 2 -oac copy -ovc copy input.flv -o output.flv

Więc co wolisz; mencoderprzykład, powyżej; lub ffmpegprzykład poniżej?
głosy

Odpowiedzi:


16

Próbować:

ffmpeg -i input.flv -ss 2 -vcodec copy -acodec copy output.flv

Myślę, że parametr wejściowy powinien być pierwszy.


Dzięki za odpowiedzi. Użyty powyżej parametr porządkowania zapewnia ten sam wynik, więc nie sądzę, że jest to kolejność. Po rezygnacji z ffmpeg mój interwał klatek kluczowych powodował problemy z innymi narzędziami. Po ponownym przejrzeniu tego, w końcu był to interwał klatki kluczowej. Został ustawiony na 5 sekund wcześniej i od tego czasu ustawiłem go na 1 sekundę. Po 5 sekundach zarówno twoje polecenie, jak i te, których próbowałem powyżej, na początku dały czarny odstęp (3 sekundy, co nie powinno dziwić). Po 1 sekundzie działa zgodnie z oczekiwaniami.
marcelebrate,

Działa to również w przypadku mp3
geotheory

4
Jak wyjaśniono w FFmpeg Seeking , użycie -ss jako parametru wejściowego (przed -i) podczas kopiowania, a nawet transkodowanie ze starszą wersją FFmpeg, wykorzystuje wyszukiwanie klatek kluczowych. Jest to znacznie szybsze, ale poświęca dokładność. Jeśli użyjesz go jako parametru wyjściowego, proces jest potencjalnie znacznie wolniejszy (wejście jest dekodowane klatka po klatce nawet dla odrzuconych części), ale dokładny. Chociaż pytanie jest stare, myślę, że powinna to być zaakceptowana odpowiedź.
Jonathan Y.,

23

Okazuje się tego polecenia będzie przyciąć film od 2 sekund na, zgodnie z oczekiwaniami:

ffmpeg -i input.flv -ss 2 -vcodec copy -acodec copy output.flv

Problem dotyczył interwału klatki kluczowej w input.flv. Został ustawiony na 5 sekund, co dało 3 sekundy wartości czarnych klatek na początku filmu (5 - 2 = 3). Od tego czasu zmieniłem interwał klatki kluczowej na 1 sekundę, chociaż 2 sekundy prawdopodobnie przyniosą pożądane rezultaty w moim przypadku.

AKTUALIZACJA: Zaktualizowano kolejność -ii -ssparametry według odpowiedzi Dave'a, którą zaakceptowałem na kredyt.


2
Miałem również ten problem. Ten post zrobił to dla mnie. Ugryzłem pocisk i przestałem próbować używać -vcodec copy -acodec copywszystkich poleceń edycyjnych. Ponowne kodowanie zapobiegło pojawieniu się czarnych klatek na początku mojego filmu lub braku cięcia we właściwym miejscu (różnica sekundy bez ponownego kodowania przekładała się na prawie 5-sekundową różnicę w filmie). Więc skończyło się na wymianie -vcodec copyz -vcodec libx264 -crf 0.
Hendy,

2
Właśnie spotkałem to samo. Odkryłem, że nie mogę, -vcodec copyponieważ wycinek nie zaczyna się od klatki kluczowej. Dostawałem nieruchomy obraz lub czarny obraz przez N sekund do następnej klatki kluczowej. Jeśli faktycznie ponownie koduję, a nie kopiuję, działa to zgodnie z oczekiwaniami. Więc chociaż moje wejście i wyjście to zarówno H264, nadal musiałem przekodować (używając -vcodec libx264zamiast -vcodec copy).
Karl Wilbur

Odpowiedź Dave'a jest poprawna od najnowszej wersji ffmpeg. -iPowinny pochodzić przed -ss.
Arete

0

Użyj -ss i -to przed -i w ten sposób:

ffmpeg -ss 00:01:10 -to 00:02:10 -i input -c copy output

0

Aktualizując tę ​​odpowiedź, od 2019 r. Polecenie jest teraz:

ffmpeg -i input.flv -ss 2 -c copy output.flv
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.