Mam problem ze znalezieniem aplikacji cli, która może pobrać plik wideo (najlepiej avi, mkv i mp4) i wyciąć bardzo krótkie klipy (2-6 sekund) z dokładnością do czasu. Próbowałem ffmpeg , mencoder , avidemux i mp4box, ale wszystkie wycinały klatki kluczowe, które tworzą ponad 6 sekund klipów. Czy istnieje narzędzie, które ponownie zakoduje plik wejściowy i skróci dokładny czas lub skróci niedokładnie, ponownie zakoduje, a następnie dokona dokładnego cięcia?
command-line
video
video-editing
mp4
curmil
źródło
źródło
-ss
parametr po-i
), powinno być dokładniejsze.Odpowiedzi:
Cięcie wideo za pomocą
ffmpeg
Państwo może precyzyjnie wyciąć filmy z FFmpeg. Od wersji 2.5 jest to bardzo łatwe. Skróciłoby to na przykład 10 sekund, zaczynając od 0 minut, 3 sekund i 123 milisekund.
Pozycja i czas mogą być w sekundach lub w
hh:mm:ss[.xxx]
formie.Należy zauważyć, że w tych przykładach wideo zostanie ponownie zakodowane przy użyciu kodera x264 ; dźwięk jest kopiowany.
Możesz także użyć
-to
zamiast,-t
aby określić punkt końcowy zamiast czasu trwania. W tym przypadku jest to jednak-to
równoważne-t
, ponieważ umieszczając-ss
przed nim-i
, ffmpeg najpierw szuka tego punktu, a następnie zaczyna generować.Zobacz także wpis Wiki w poszukiwaniu .
Dokładne cięcie dla starszych
ffmpeg
wersjiJeśli masz starszą wersję ffmpeg, a następnie w celu dokładnego wyszukiwania, musisz umieścić
-ss
później-i
, co powoduje, że proces kodowania jest nieco wolniejszy, ponieważ najpierw należy zdekodować cały film:Tutaj,
-to
i-t
zachowywać się inaczej.-t 10
utworzy klip o długości 10 sekund,-to 10
a klip o długości siedmiu sekund.źródło
-c:v libx264 -c:a libfaac
myślę, że możemy użyć polecenia,-acodec copy -vcodec copy
które mówi ffmpeg, aby wykrył i używał tych samych kodeków co oryginalny plik. Czy ktoś może potwierdzić?-c:a aac -strict experimental
. To najprostsze rozwiązanie.Jedynym dotychczasowym narzędziem wiersza polecenia systemu Linux, które można wycinać z dokładną klatką (lub, z dokładnością do ramki), jest
melt
(sudo apt-get install melt
).Powiedzmy, że masz
inputvid.mp4
- najpierw sprawdź ustawienia kodowania za pomocą sayffmpeg
(tutaj, po prostu mówię, że chcę go ponownie zakodować-f mp4
, ale jako plik,/dev/null
więc dane wyjściowe są odrzucane; przekierowuję stderr, dzięki czemu mogę grep przez to - uwaga na środku) , polecenie wyświetla monit i powinieneś odpowiedziećy
klawiszem ENTER, więc proces jest kontynuowany i zrzuca użyteczne informacje; jest to wersja ffmpeg 3.3.3 na Ubuntu 14):Ok, więc możemy zobaczyć
ffmpeg
wyborylibx264
iaac
kodery tego filmu; możemy wprowadzić to dlamelt
:.... i
melt
będzie wyciąć z kawałka między ramkami 7235 i 7349 do nowego plikucut.mp4
. Następnie, aby sprawdzić, czycut.mp4
pętle działają poprawnie, użyjmelt
ponownie, aby odtworzyć go dwukrotnie - i odtworzyć w oknie SDL:... a oto, co
ffmpeg
widzi ten plik:Ustawienia kodowania wideo
cut.mp4
wydają się być identyczne, zinputvid.mp4
wyjątkiem zmienionej przepływności wideo z 389 kb / s do 526 kb / s, a także ustawienia kodowania audio są prawie takie same, z wyjątkiem częstotliwości próbkowania zmienionej z 44100 na 48000 Hz; chociaż można to regulować za pomocą:... jednak nawet przy tym końcowa szybkość transmisji wideo dla mnie wynosi 337 kb / s. Mimo to cięcia są w porządku (i obejmuje to dźwięk) podczas odtwarzania w pętli, więc sądzę, że jest to rzeczywiście dokładność klatek ...
źródło
melt
ponownie koduje wideo i korzysta z bibliotek FFmpeg pod spodem. Jeśli zezwolisz na ponowne kodowanie, ffmpeg może wygenerować to samo wyjście.melt
korzysta z bibliotek FFmpeg), dobrze wiedzieć!Jak powiedział Baodad w komentarzach (zamieszczam, ponieważ nie jest łatwo znaleźć, jeśli czytasz szybko), lepszym podejściem jest automatyczne wykrywanie koderów audio / wideo przez ffmpeg, więc:
źródło