Próbuję wyodrębnić „dokładnie 1 klatkę na każde 10” klatek filmu (tzn. Wyodrębnić 1, pozostaw 9, a następnie powtórz) do celów naukowych. Film ma 105 klatek, 3,5 sekundy, 29,97 kl./s (h.264,. Mov, wyprodukowany przez Nikona D3100).
Mam wysłał go tutaj .
VLC
Poniższe polecenie powinno wygenerować 10 klatek, ale daje tylko 6 obrazów. Próbowałem różnych proporcji scen i żadna z nich nie generowała poprawnej liczby klatek (nawet nie blisko korekty).
vlc 1.mov --video-filter=scene --vout=dummy --scene-ratio=10 --scene-prefix=img- --scene-path=. vlc://quit
Czy ktoś mógłby mi powiedzieć, na czym polega problem?
FFmpeg
FFmpeg nie wydaje się mieć komendy dokładnie dla mojego celu. Poniższe polecenie wyodrębnia 3 klatki z każdej sekundy, ale ponieważ liczba klatek na sekundę nie wynosi dokładnie 30 (raczej 2,97), nie będzie to dla mnie poprawnych wyników.
Ponadto nawet FFmpeg nie podaje prawidłowej liczby ramek nawet za pomocą tego polecenia. Na 3,5 sekundy filmu oczekuję maksymalnie 10 klatek, ale dostaję 12 klatek!
ffmpeg -i 1.mov -y -an -sameq -r 3 -f image2 -vcodec mjpeg %03d.jpg
Jak mogę osiągnąć to, czego chcę?
-sameq
nie robi tego, co prawdopodobnie myślisz, i zostało usunięte z bieżącej wersji (to znaczy prawdziwego ffmpeg, nie jestem pewien, czy jest w fałszywym ffmpeg Ubuntu). Zamiast tego użyj qscale.Odpowiedzi:
Wybierz 1 klatkę na każde 10 klatek
Możesz użyć
select
filtra wideo,ffmpeg
aby to zrobić:Dla wyjścia JPG możesz zmieniać jakość
-q:v
. Efektywny zakres wynosi od 2 (najlepsza jakość) do 31 (najgorsza jakość). Nie potrzebujesz tej opcji, jeśli chcesz zamiast tego wyświetlać dane w formacie PNG.Wyjście to wola
img_001.jpg
,img_002.jpg
,img_003.jpg
, itd.źródło
unrecognized option '-filter:v'
” z „wersją FFmpeg SVN-r0.5.1-4: 0.5.1-1ubuntu1.3” (--enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable -libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib - disable-stripping --disable-vhook --enable-runtime-cpudetect - -enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static)"
.Najważniejszym aspektem twojego pytania jest fakt, że wideo wykorzystuje 29,97 klatek na sekundę, a nie 30. Pesky NTSC.
W każdym razie myślę, że najłatwiej byłoby po prostu wyodrębnić każdą ramkę , a następnie usunąć te, których nie potrzebujesz:
Następnie usuń te, których nie potrzebujesz. Ponieważ co dziesiąta klatka kończy się na
1.jpg
, możemy po prostu zabrać wszystkie pozostałe…… A kiedy masz pewność, że są to te, które chcesz usunąć:
Jeśli możesz użyć
mencoder
, możesz wypróbować tęframestep
opcję, jak wyjaśniono w dokumentacji , tak jakframestep=10
w twoim przypadku. Osobiście nie mogłem zainstalować / wypróbować.źródło
Jeśli miałbyś najpierw przekonwertować wideo na serię nieprzetworzonych obrazów rgb24 lub rgb32, być może będziesz w stanie uzyskać odpowiednią liczbę klatek, ponieważ w oryginalnej formie wydaje się, że zawierają niezwykłe typy klatek, które mogą wcale nie być obrazami? ?
Na oryginalnych dyskach laserowych cały film składał się z serii obrazów z indywidualnymi numerami klatek od 1 do 100 000 lub więcej, i tak naprawdę jest to właściwy sposób na ustanowienie linii bazowej dla przyszłych konwersji lub manipulacji.
Przemysł zmienił się na ten dziwny pomysł na kompresję po prostu w celu zmniejszenia wypłaconych pieniędzy i zepsucia prawdziwych naukowych form postępowania z liczbami.
Najpierw musisz wyodrębnić dowolny plik audio jako plik fali, aby nie stracić go całkowicie. Wygląda na to, że FFMPEG umieszcza informacje identyfikujące w każdym wyodrębnionym obrazie, ponieważ jeśli spróbujesz połączyć obrazy razem z dopiero co wyodrębnionymi i miksujesz inne obrazy z innych źródeł o tym samym rozszerzeniu, ffmpeg zignoruje obrazy, które próbujesz ułożyć na środku wszystkiego .
W przypadku formatu dysku laserowego częstotliwość klatek jest po prostu podyktowana dowolną częstotliwością wyświetlania kolejnych zdjęć i nie jest w żaden sposób kontrolowana przez same obrazy.
FFMPEG może czerpać naukę z nauki zamiast sztuki, aby prawidłowo obsługiwać i wyświetlać obrazy dowolnego rodzaju. A może cała branża AV. Przemysł naprawdę musi poprawić możliwości sprzętu i korzystać z surowych danych, które wymagają dużej ilości pamięci / pamięci. Nic nie przebije surowych danych pod względem precyzji i dokładności.
źródło