Jak mogę wyodrębnić obraz z określonego czasu filmu w Xubuntu 16.04?

8

Szukam opcji wiersza polecenia.

Na przykład, jeśli mam wideo sample-video.mp4i chcę wygenerować plik obrazu sample-image.jpgz wideo o godzinie 00:00:26, jakie polecenie powinienem wydać?

Przydałoby się również szczegółowe wyjaśnienie funkcji każdego argumentu polecenia.

Sonevol
źródło
2
Zgodnie z tym pytaniem i jego odpowiedziami ffmpegwydaje się, że obsługuje nazwy plików wyjściowych.
IQV

Odpowiedzi:

8

Możesz użyć mplayer(z pakietu mplayer, domyślnie nie instalowany):

mplayer -vo jpeg -ss 00:00:26 -frames 1 sample-video.mp4

Spowoduje to utworzenie pliku, 00000001.jpgwięc musisz zmienić jego nazwę. O ile wiem, nie ma sposobu na określenie nazwy pliku.

-vo jpegoznacza, że ​​chcesz wyjściowy plik JPEG, -ss 00:00:26szuka określonej pozycji, -frames 1oznacza przetworzenie jednej klatki, a następnie wyjście.

Florian Diesch
źródło
Jaka jest zaleta uzyskania więcej niż 1 ramki? Czy będą to kopie, czy każda klatka będzie się różnić o sekundę?
Sonevol,
Obrazy utworzone z większej liczby ramek będą się różnić o ułamki sekundy. Dokładna wartość zależy od filmu.
Florian Diesch
5
@Sonevol Ramka dokładnie o godzinie 0:00:26 może nie być dokładnie taka , jak chcesz. Możesz wziąć ~ 50 klatek między 0:00:25 a 0:00:27 (lub nawet tylko 3-4 klatki wokół znaku 0:00:26), a następnie przeglądać je, aby wybrać najlepszą.
xDaizu
1
@FlorianDiesch Możliwe jest również wyjście do formatu png za pomocą czegoś takiego: -vo png:z=9z ustawieniem -z określającym poziom kompresji. Dla plików JPEG można również dodać w ustawieniach jakości: -vo jpeg:quality=100. Ale twoja odpowiedź jest świetna, bo już jest :)
andrew.46
13

Możesz użyć ffmpeg

ffmpeg -loglevel quiet -ss 26 -i sample-video.mp4  -t 1 -f image2 anyfilename.jpeg
  • -loglevel ustawił logoutput na cichy, ponieważ ffmpeg jest bardzo rozmowny
  • -ss szuka (w sekundach, tzn. gdzie chcesz zrobić migawkę)
  • -i wejściowy plik wideo
  • -t ramy czasowe migawki (w sekundach)
  • -f typ pliku

Możesz także bawić się z opcjami, takimi jak kontrola jakości wyjścia JPEG -q:v <linear integer 1-10>lub rozdzielczość -s 480x300.

Więcej pomysłów tutaj


Metoda VLC

cvlc sample-video.mp4 --start-time=26 --run-time=1 --rate=1 --video-filter=scene --vout=dummy --aout=dummy  --scene-ratio=24 --scene-prefix=sample-image --scene-replace vlc://quit
  • cvlc - ponieważ jego linia poleceń i nie chcemy otwierać żadnych okien. oznacza to również, że możemy go uruchomić bez X11.

  • --start-time = 26 - jest dokładną pozycją migawki w sekundach

  • --run-time = 1 - jak długo wideo będzie „odtwarzane” w kilka sekund. Gramy przez jedną sekundę, aby zrobić zrzut ekranu z tej sekundy
  • --rate = 1 kiedy zrobić zrzut ekranu. Zasadniczo oznacza to „co sekundę” i jest przydatne, jeśli masz dłuższe pliki, do robienia zrzutów ekranu co 60 sekund lub co 5 minut
  • --video-filter = scena mówi VLC, że chcemy robić zrzuty ekranu
  • --vout = fikcyjny brak wyjścia dla wideo na X11, nie jest nam potrzebny
  • --aout = manekin brak wyjścia audio, nie potrzebujemy tego
  • --scene-ratio = 24 mówimy VLC, że jest około 24 klatek na sekundę
  • --scene-prefix = przykładowy obraz nazwa pliku zrzutu ekranu
  • - zastępowanie scen zastępuje wszystkie pliki, które są nazywane jak zrzut ekranu, sample-image.pngbieżącym zrzutem ekranu. Jeśli pominiesz to, VLC rozpocznie numerowanie zrzutów ekranu
  • vlc: // quit quit vlc, gdy skończymy

Pełna dokumentacja tutaj

Robert Riedl
źródło
Co rozumiesz przez czat? I chcę migawkę po 26 sekundach. Po co więc określać przedział czasowy przez -t. Robię zdjęcie, a nie wideo.
Sonevol,
3
„Chatty”, ponieważ ffmpeg drukuje za pomocą tego polecenia ponad 40 wierszy wyników dziennika, takich jak bieżąca wersja, typ konfiguracji i informacje o wejściowym pliku wideo - co jest dla ciebie nieciekawe. W tym celu prawdopodobnie możesz pominąć „-t 1”. Wydaje się, że domyślnie jest to jedna sekunda lub ułamek tego, co jest dobre dla zrzutu ekranu. Dobrą różnicą jest możliwość zdefiniowania wyjściowej nazwy pliku i poprawienia jakości / rozdzielczości itp.
Robert Riedl