Как создать гифку

S John
168
Как вы можете догадаться, существует миллион разных способов. Я предложу вам основанный на FFmpeg. Пакет не просто солидный, а уникальный по своей зна́чимости в индустрии обработки видео. На базе его библиотек построено множество свободных (например, VLC) и коммерческих (например, Гугл Хром и Ютуб) систем. Софт стоит даже на марсоходе "Персеверанс".

Приложение свободно распространяется в исходных кодах и бинарных пакетах для Linux, Windows и macOS. Я буду ориентироваться на Windows 10 и файловый менеджер Far, но вы можете с небольшими переделками воспользоваться моими советами в другом окружении. См.
Если он у вас еще не стоит, зайдите сюда: farmanager.com/download.php. Это официальное место для бинарных пакетов и я никогда нигде не слышал, чтобы оно было заражено вирусами. Самым первым будет каталог "Stable builds". Ткните в подразделе "x64" кнопку "msi". Скачайте, установите и запустите. Там уже все настроено.

Вместо Far Manager вы можете применить комбинацию File Explorer, Cmd.exe и 7-Zip. Если захотите.
.

Почему FFmpeg? Большинство приложений, которые будут решать требуемую задачу, все равно реализованы как оболочка над ним. Тогда зачем бороться с вирусами, клянчением денег, багами и ограниченными возможностями левых пакетов, если можно воспользоваться оригинальным? Тем более, как увидите, работа с ним не доставит вам серьезных трудностей.
Как я пришел к FFmpeg
...раз за разом я упирался в невозможность выполнить самые тривиальные операции или это требовало таких усилий, что я предпочитал их избегать. Все стандартно еле шевелилось и постоянно валилось. Визуальные редакторы требовали напряжения сил, совершенно несоразмерных полученному результату.

Надо отметить, что в обсуждениях ссылки на FFmpeg появлялись с завидной регулярностью. Вначале отсутствие графического интерфейса FFmpeg мне казалось неустранимым препятствием, тем более, что большинство использованных мной утилит все равно базировались на нем. Зачем пользоваться чем-то базовым и сложным, если работу уже сделали до меня?

Я потратил массу времени и сил, чтобы освоить десятки кривых пакетов. Примерно год назад я перестал парить мозги и наконец-то занялся FFmpeg. Первое время это вызывало жуткую головную боль. Моя статья как раз предназначена для тех, кто пойдет по тому же пути, что и я.

Практическое руководство по FFmpeg

КАК СКАЧАТЬ FFMPEG
Официальное место для бинарных пакетов FFmpeg находится здесь: www.gyan.dev/ffmpeg/builds/. Никто никогда не жаловался, что оно заражено вирусами.

Находим заголовок "release builds". Самым первым будет подраздел "latest release". Находим слова "ffmpeg-release-full.7z", тыркаем в них и скачиваем. Открываем архив и копируем файл "ffmpeg.exe" из подкаталога "bin" в то место, где у вас находится видео файл.

ПРОСТЕЙШИЙ ПРИМЕР
Я желаю создать гифку шествующих кошечек из эндинга аниме Кот, мастер на все лапки, сегодня снова грустит. Видео я возьму отсюда: sakugabooru.com/post/show/232256. Оно скачалось под именем "9795b7803f34d6a4b3ecfb630b852cee.mp4". Переименую в "9795b.mp4", чтобы не загромождать текст статьи.

Первый кадр нужного мне отрезка видео находится на позиции 7.424 (в секундах), последний на 8.925.

Выполняем команду
ffmpeg.exe -ss 7.424 -to 8.925 -i 9795b.mp4 video.gif -y

Открываем GIF хостинг, например imgur.com. Тыркаем в "New post". Тыркаем в "Choose Photo/Video". Загружаем свой "video.gif". В браузере по правой кнопке мышки выбираем "Open image in new tab". Копируем URL (с расширением .gif) и вставляем его в ваш комментарий/статью:
[img]https://i.imgur.com/zSumvBc.gif[/img]
Результат

Обратите внимание, что imgur со временем удаляет гифки. Так что как-то решайте проблему с постоянным хранением сами.

ОДНАКО ОСТАЛИСЬ ВОПРОСЫ
Как найти таймкод первого и последнего кадра для гифки?
Подавляющее большинство все за незначительными исключениями видео плееры предоставляют только самую грубую информацию о позициях кадров и минимальные возможности навигации по видео. В простейшем случае вы можете поставить значения таймкодов с запасом и воспользоваться методом из следующего раздела статьи, чтобы из получившихся кадров выбрать нужные.

Альтернативным подходом является установка плеера MPV, с помощью которого вы сможете найти позиции кадров с точностью до миллисекунд. См.
Официальные бинарники находятся здесь: sourceforge.net/projects/mpv-player-windows/files/64bit/. Я сам не сталкивался с его вирусами, однако я не могу говорить о пакете с такой же уверенностью, как о бинарниках FFmpeg и Far Manager. Ткните в самую верхнюю строчку и сохраните файл на своем компьютере. Откройте сохраненный .7z архив и скопируйте mpv.exe в тот же каталог, где у вас находится видео файл.

Запустите mpv.exe с параметром имени вашего видео файла. Пока файл проигрывается, нажмите пробел, чтобы его остановить. Нажмите del и появится поле управления. Кликните левой клавишей мышки в левое поле показа времени, оно станет показывать миллисекунды. Теперь вы можете пробелом продолжать и останавливать проигрывание, стрелками влево/вправо смещаться на примерно 10 секунд и запятой/точкой смещаться влево/вправо на один кадр. Не забудьте переключиться на английскую раскладку.
.

Как задать таймкод продолжительностью больше одной минуты?
Общий формат: "часы:минуты:секунды.дробная_часть_секунды". Вы можете опустить любую часть справа и/или слева от "секунды". Например, ровно 5 минут и 3 секунды может задаваться как "5:3", "00:05:03" или "05:03.0".

Как посмотреть созданную гифку?
В большинстве браузеров вы можете нажать Ctrl-O и открыть файл гифки. После ее регенерации нажмите Ctrl-R, чтобы увидеть новую версию.

Если открыть вашу гифку, то там в конце что-то мелькает
А вот это больной вопрос. Все дело в том, что FFmpeg указанный отрезок видео вырезает с задержкой. Причем эта задержка может измениться при смене исходного видео и версии FFmpeg. Команда разработчиков упорно ничего не желает делать на этот счет.

Простейшее решение в нашем случае - отнимите 0.06 секунды в ваших параметрах.
ffmpeg.exe -ss 7.364 -to 8.865 -i 9795b.mp4 video.gif -y
Результат

Вы в самом начале сказали, что все будет просто, однако оказалось, что это не совсем так
Если вы воспользуетесь другими пакетами или сервисами, все равно они скорее всего будут основаны на FFmpeg и у них будут те же самые проблемы. Только там, столкнувшись с чем-то похожим, вы не будете знать, как найти решение. На самом деле от вас потребуется совсем немного усилий.

БОЛЕЕ СЛОЖНЫЙ АЛГОРИТМ
Прежде всего, не пугайтесь. Ничего принципиально не изменится, просто вы не будете копировать видео напрямую. Вначале сохраните графические файлы, а уже затем их преобразуете в гифку. Это позволит вам сразу понять, какой результат вы получите, и даже его подправить простейшими средствами.

Создаем подкаталог, пусть он называется "img". Сохраняем в него покадрово графические файлы в формате PNG:
ffmpeg.exe -ss 7.424 -to 8.925 -i 9795b.mp4 img\%03d.png -y

Просматриваем файлы и обнаруживаем, что последний лишний. Удаляем его. Конвертируем оставшиеся файлы в гифку:
ffmpeg.exe -r ntsc-film -i img\%03d.png video.gif -y

Все графические файлы должны иметь один и тот же размер по горизонтали и по вертикали. Файлы из подкаталога "img" берутся в пронумерованном порядке, начиная с индекса 001 и пока они идут последовательно. То есть если вы удалили файлы из середины, вам понадобится перенумеровывать оставшиеся. Если имена файлов начинаются с другого индекса, вы можете задать его в качестве дополнительного параметра "-start_number индекс". Например, чтобы начинать с индекса 015:
ffmpeg.exe -r ntsc-film -start_number 015 -i img\%03d.png video.gif -y

ИМЕНА ФАЙЛОВ
FFmpeg очень капризен к именам файлов и я вам рекомендую для них использовать только латинские буквы и цифры. Если в имени имеются пробелы, заключите имя в двойные кавычки. Если имеются специальные символы, буквы из других кодовых таблиц (например, кириллицы) или Unicode символы, просто переименуйте файлы.

ИЗМЕНЕНИЕ ЧАСТОТЫ КАДРОВ
Самая распространенная частота кадров видео файлов - это 23.98 в секунду, ее символьное обозначение "ntsc-film". Для гифок ее можно сократить где-то до 10. Если еще меньше, то будет восприниматься как мелькание. Частота задается с помощью параметра "-r частота", где "частота" задается в количестве кадров в секунду.

ffmpeg.exe -ss 7.424 -to 8.925 -i 9795b.mp4 -r 10 img\%03d.png -y
ffmpeg.exe -r 10 -i img\%03d.png video.gif -y
Результат

Обратите внимание, что если вы меняете частоту кадров видео, то параметр "-r частота" ставится оба раза: при конверсии в PNG и из них. Если не меняете, то он все равно указывается при конверсии из PNG. Это необходимо, поскольку утилита не знает, с какой скоростью надо проигрывать кадры.

ИЗМЕНЕНИЕ РАЗРЕШЕНИЯ ИЗОБРАЖЕНИЯ
Можно сделать с помощью параметра "-vf scale=-1:высота", который помещается сразу после имени входного файла. Высота задается в пикселях. Ширина выставляется автоматически так, чтобы сохранить соотношение сторон.

Например, разрешение в исходном видео было 480p, а мы хотим его конвертировать в 360:
ffmpeg.exe -ss 7.424 -to 8.925 -i 9795b.mp4 -vf scale=-1:360 img\%03d.png -y
ffmpeg.exe -r ntsc-film -i img\%03d.png video.gif -y
Результат

Вы можете менять одновременно частоту кадров и разрешение изображения - вначале параметр разрешения, зачем частоты:
ffmpeg.exe -ss 7.424 -to 8.925 -i 9795b.mp4 -vf scale=-1:360 -r 10 img\%03d.png -y

СКЛЕИВАНИЕ ГИФОК
Выполняется с помощью параметра "-filter_complex concat=число", где "число" - количество склеиваемых гифок. Все исходные гифки должны иметь один и тот же размер по горизонтали и по вертикали.

Например, мы хотим склеить 2 видео фрагмента в один.
ffmpeg.exe -ss 7.424 -to 8.925 -i 9795b.mp4 img1\%03d.png -y
ffmpeg.exe -ss 17.726 -to 18.435 -i 9795b.mp4 img2\%03d.png -y
ffmpeg.exe -r ntsc-film -i img1\%03d.png -r ntsc-film -i img2\%03d.png -filter_complex concat=2 video.gif -y
Результат

Вы также можете склеить готовые гифки.
ffmpeg.exe -i video1.gif -i video2.gif -filter_complex concat=2 video.gif -y

ИСПОЛЬЗОВАНИЕ КОМАНДНЫХ ФАЙЛОВ
Сохраните последовательность команд в файл с расширением ".bat". Удвойте каждый знак процента в каждой из команд. Например, набор команд из предыдущего подраздела будет выглядеть так:
ffmpeg.exe -ss 7.424 -to 8.925 -i 9795b.mp4 img1\%%03d.png -y
ffmpeg.exe -ss 17.726 -to 18.435 -i 9795b.mp4 img2\%%03d.png -y
ffmpeg.exe -r ntsc-film -i img1\%%03d.png -r ntsc-film -i img2\%%03d.png -filter_complex concat=2 video.gif -y

ДРУГИЕ ВОЗМОЖНОСТИ
На настоящий момент в библиотеке FFmpeg имеется 292 различных фильтра, позволяющих модифицировать видео изображения. См. раздел 11 "Video Filters" документации.
Примеры фильтров
  • Transformations
** Cropping
** Fading
** Scaling
** Padding
** Rotation
** Transposition
** Others:
*** Lens correction
*** OpenCV filtering
*** Perspective correction
  • Temporal editing
** Framerate interpolation
** Looping
** Trimming
  • Deinterlacing
  • Inverse Telecine
  • Filtering
** Blurring
** Convolution filters
*** Convolution
*** Edge detection
*** Sobel Filter
*** Prewitt Filter
*** Unsharp masking
  • Noise reduction
  • Logo removal
  • Subtitles
  • Alpha channel editing
  • Chroma key
  • Frame detection
** Black frame detection
** Thumbnail selection
  • Frame Blending
  • Video stabilization
  • Color and Level adjustments
** Color balance and levels
** Channel mixing
** Color space
** Parametric adjustments
  • Histograms and visualization
** CIE Scope
** Vectorscope
** Waveform monitor
** Color histogram
  • Drawing
  • OCR
  • Quality measures
** SSIM
** PSNR
  • Lookup Tables

en.wikipedia.org/wiki/FFmpeg

Например, фильтр "eq" позволяет изменить яркость, контрастность, цветовую насыщенность и гамму. Увеличиваем яркость на 20%:
ffmpeg.exe -ss 7.424 -to 8.925 -i 9795b.mp4 -vf eq=brightness=0.2 img\%03d.png -y
Результат
852x480 852x480
Оригинальный и модифицированный кадры

Вы можете комбинировать фильтры через запятые. Например:
ffmpeg.exe -ss 7.424 -to 8.925 -i 9795b.mp4 -vf scale=-1:360,eq=brightness=0.2 img\%03d.png -y

:perveted:

FFMPEG ПРОТИВ EZGIF.COM
Мы попробуем воспроизвести тот же случай, что и в подразделе "ПРОСТЕЙШИЙ ПРИМЕР", но в более реальной ситуации - в качестве исходника у нас будет полноценный видеофайл всего эпизода. Скачиваем 2-й эпизод с озвучкой AniLibria в кодировке AVC (1.4 GB). Переименовываем в "Neko_02.mkv", чтобы не загромождать текст. Гифку будем делать с разрешением 480p и частотой 10 кадров в секунду.

FFMPEG
Находим с помощью MPV первый и следующий за последним кадры: таймкоды 22:45.282 и 22:46.825 соответственно. Конвертируем фрагмент видео в набор графических файлов:
ffmpeg.exe -ss 22:45.282 -to 22:46.825 -i Neko_02.mkv -vf scale=-1:480 -r 10 img\%03d.png -y

Выполняется практически мгновенно. Проверяем, действительно ли первый и последний кадры совпадают с желаемыми. Конвертируем в гифку:
ffmpeg.exe -r 10 -i img\%03d.png Neko_02.gif -y

Выполняется практически мгновенно. Вуаля.

EZGIF.COM
Заходим на ezgif.com/. Тыркаем в "Video to GIF" и в открывшейся странице обнаруживаем замечание: "Max file size: 100MB". На сайте AniLibria мы можем скачать меньший по размеру файл в кодировке HEVC. Однако даже не беря во внимание потерю качества, все равно размер файла - 268MB. Значит перед закачкой нужно вырезать из него небольшой отрезок.

(Неудачная) попытка найти решение с помощью поиска в Яндексе
Набираем в Яндексе "как вырезать отрезок из видео". Самая первая ссылка: "15 способов вырезать фрагмент из видео".

Способ №1 в ВидеоШОУ.
Способ №2 в Sony Vegas. Читаем: "Программа требовательна к ресурсам компьютера, поэтому ее не стоит устанавливать на устаревшее оборудование и ноутбуки. Также она отличается высокой стоимостью". Спасибо, не надо.
Способ №3 в онлайн-сервисе. Читаем: "В бесплатной версии Clideo на готовом ролике будет водяной знак". Спасибо, не надо.
Способ №4 для видео с Ютуба. Не подходит.
Способ №5 для iPhone и Android. Не подходит.

На этом список закончился. Оставим на совести авторов "15 способов". Остается ВидеоШОУ. Описание того, как вырезать отрезок видео, занимает несколько экранов убористого текста. Инсталлятор "весит" 187 мегов. Списка ограничений сходу не нашел. Простите, но я их советы пропускаю.

Больше не будем ничего искать, а пойдем известным путем. Запускаем стандартный системный Photos. Тыркаем в "Video Editor". Тыркаем в "New video project". Тыркаем в "+ Add". Выбираем "From this PC". Находим и выбираем файл "Neko_02.mkv". Тыркаем в "Place in storyboard". Тыркаем в "Trim". С помощью ограничителей на временном ползунке выбираем отрезок продолжительностью около 8 секунд, меньше не получается (впрочем, для наших целей подходит). Тыркаем в "Done". Тыркаем в "Finish video". Тыркаем в "Export". Указываем имя файла "Neko_02.mp4" и тыркаем в кнопку "Export" диалогового окошка. Надпись "Exporting..." висит около 15 секунд и вуаля! Результирующий файл занимает около 5MB. ЗЫ Удаление ошметков проекта потом занимает практически то же время, что и его создание.

Возвращаемся на страницу "Video to GIF converter" ezgif.com. Выбираем "Neko_02.mp4" и тыркаем в "Upload video!" Где-то через 10 секунд нам показывают загруженное видео. Окошко плеера позволяет проигрывать клип только в реальном времени. Покадровой навигации нет, так что точность выбора +/- полсекунды. Зато таймкоды начала и окончания гифки можно задавать через текстовые окошки с точностью до сотой секунды. Тыркаем в "Convert to GIF!" и нам демонстрируется результирующая гифка. Кстати, установленные значения результату не соответствуют, так что их придется подбирать их методом проб и ошибок.

Единственный возможный алгоритм работы с конвертером следующий. Вначале грубо выбираете нужный отрезок. Гифка показывается в реальном времени, так что с точностью до кадра ее подобрать невозможно. Поэтому загружаете гифку на свой комп и проверяете ее с помощь других пакетов (например, GIMP или paint.net). Затем вручную подправляете таймкоды начала и окончания. Раз за разом повторяете процесс, пока не достигли желаемого результата.

ССЫЛКИ
Комментарии
Скрыть 148 комментариев
Показать 148 комментариев
Загрузить ещё 20 из 148 комментариев
(C3H7O)2PtCl6
(C3H7O)2PtCl6#
@S John, В гимпе можно сменить режим и отредактировать выделение.
244x495
Немного про курсор. В винде можно простовыставить инвертированный цвет курсора и его сложнее потерять. Ну ещё можно опцию включить, которая при нажатии cntr кружочек вокруг курсора пускает.
530x577
S John
S John#
отредактировать выделение
Отредактировать можно только существующее выделение. Но после любой операции выделение пропадает. Нельзя отредактировать то, чего нет.
В винде можно простовыставить инвертированный цвет курсора
Мне в лом менять системные установки винды только чтобы отредактировать картинку.
(C3H7O)2PtCl6
(C3H7O)2PtCl6#
@S John, каких конкретно операций? Залики, заполнения градиетом или очистки?
Я всегда жил с инвертированным курсором, это удобно.
S John
S John#
каких конкретно операций?
В первую очередь фильтров.
(C3H7O)2PtCl6
(C3H7O)2PtCl6#
@S John, фильтры не удаляют выделение у меня.
417x429
S John
S John#
Я всегда жил с инвертированным курсором, это удобно.
А мне неудобно. Я не являюсь профессиональным графическим дизайнером.
(C3H7O)2PtCl6
(C3H7O)2PtCl6#
@S John, так я тоже не графический дизайнер.
S John
S John#
фильтры не удаляют выделение у меня
Я работаю с GIMP почти 2 десятка лет.
(C3H7O)2PtCl6
(C3H7O)2PtCl6#
@S John, версия какая?
S John
S John#
версия какая?
Сейчас последняя 2.10.36.
(C3H7O)2PtCl6
(C3H7O)2PtCl6#
@S John, мб мы говорим о разных прогах. Ты точно не очишаешь неосознанно выделение?
Шикимен
Шикимен#
@S John,
Как делать гифки с телефона :oh:
S John
S John#
Ты точно не очишаешь неосознанно выделение?
Точно. Картинка выделения с ее параметрами сохраняется. Но она не действует, если применяешь на следующую операцию. Диалог можно отредактировать, но он ни на что не влияет. Я не могу с точностью сказать, было ли такое же поведение в 2.8, но в ней было такое количество глюков, что я вспоминаю ее как страшный сон.
S John
S John#
@Шикимен, честно говоря не знаю. Есть ресурсы, которые позволяют создавать гифки через браузер, но они фантастически неудобные. В моей статье есть пример с EZGIF.COM. Скорее всего имеются специализированные приложения для телефона, но я про них ничего не знаю и никогда ими даже не пытался пользоваться.
oreolek
oreolek#
вместо того чтоб высчитывать миллисекунды, просто поставьте mpv со скриптом, например, github.com/ekisu/mpv-webm
(C3H7O)2PtCl6
(C3H7O)2PtCl6#
@S John, около 4 лет сижу 2.8. Ни разу не ловил баги, глюки и другие проблемы. Ставил 2.10.3Х, но она выглядела и использовалась плохо и неудобно, поэтому откатился обратно на 2.8. Мне не нужны новые форматы типа webp и avif, не люблю эти форматы.
"Работает - не трошь" (С) Конфуций
S John
S John#
Ставил 2.10.3Х, но она выглядела и использовалась плохо и неудобно
Наверно дело вкуса. Мне 2.10 показалась первой версией, которая хотя бы в микроскопической степени стала удобной.
(C3H7O)2PtCl6
(C3H7O)2PtCl6#
@S John, попрятали инструменты во группы, сделали неудобной регулировку размера иконок инструментов (мне нужно было или уменьшить, или учвеличить иконки инструментов, но детали уже не помню. Также регулировка размера влияет на размер иконки на таскбаре, что кране неудобно), поставили тёмную тему и монохромные упрощённые иконки. Хотел сделать внешний вид как в 2.8, но не смог, поэтому откатился на 2.8.
S John
S John#
попрятали инструменты во группы, сделали неудобной регулировку размера иконок инструментов
Я сам всегда пользуюсь шорткатами.
поставили тёмную тему
Да, в некоторый момент сделали по умолчанию, я ее тоже не переношу. Но переключиться на "системную" достаточно легко.
(C3H7O)2PtCl6
(C3H7O)2PtCl6#
@S John, не очень люблю клаву. Предпочитаю юзать мышку. Как я тебя понимаю в твоей непереносимости тёмной темы! Хочётся пожелать фанатам тёной темы почаще учитывать мнение других людей и смотреть вокруг.
назад
Твой комментарий
Вернуться к редактированию
Предпросмотр
Скрыть