ffmpeg: Jak tworzyć przycięte miniatury?

10

Aby utworzyć miniaturę wideo za ffmpegpomocą tego polecenia:

ffmpeg -itsoffset -4 -i video.mp4 -vframes 1 thumb.jpg

To daje mi miniaturę o tym samym rozmiarze filmu (który ma nieznany rozmiar, np. 960 x 540). Ale potrzebuję kwadratowej ( przyciętej ) miniatury o danym rozmiarze (np. 200 x 200). Nie można zmieniać rozmiaru wyniku, ale przyciąć go od środka, a proporcje nie powinny się zmienić.

Jak można tego dokonać?

Georg Ledermann
źródło
Dlaczego warto korzystać -itsoffsetzamiast -ss? Ostatnio zauważyłem zwiększone wykorzystanie tego przez użytkowników tworzących obrazy z filmów.
llogan
@ LordNeckbeard: Przepraszamy, pomieszane opcje. Znalazłem to, aby uzyskać więcej informacji na temat -itsoffsetvs -ss.: superuser.com/questions/538031/...
Georg Ledermann,

Odpowiedzi:

12

Możesz użyć cropfiltra wideo:

ffmpeg -ss 4 -i video.mp4 -vf crop=200:200 -vframes 1 output.jpg
  • Domyślnie przycięcie zostanie wyśrodkowane.

  • Użyj -sszamiast, -itsoffsetaby wybrać czas przesunięcia.

  • Możesz kontrolować jakość wyjściową JPEG za pomocą -qscale:v. Używanie wartości 2-5 jest zwykle dobre; niższa wartość oznacza wyższą jakość.

  • cropFiltr może również przyjąć szerokość wejścia i wyjścia oraz wysokość jak wartości: iw, ih, ow, oh. Pozwala to na bardziej elastyczne i kreatywne filtrowanie: crop=iw-100:ih-50.

Możesz przetestować za pomocą, ffplayaby uzyskać podgląd:

ffplay video.mp4 -vf crop=200:200

Oryginalny obraz (wygenerowany za pomocą testsrcfiltra źródłowego:

ffmpeg -f lavfi -i testsrc -vframes 1 output.jpg 

oryginalny obraz

Przycięty obraz:
przycięty obraz

Llogan
źródło
6

Możesz go najpierw przeskalować, a następnie przyciąć, aby uzyskać lepszą wydajność;)

ffmpeg -ss 10 -i "Ali_Video.mp4" -vframes 1 -filter "scale=-1:300,crop=400:300" "output.jpg"

wejście wideo o 0:49 obraz wyjściowy

ffmpeg -ss 10 -i "Ali_Video.mp4" -vframes 1 -filter "scale=-1:150,crop=200:150" "output.jpg"

kolejna miniatura

SMMousavi
źródło