The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Подготовка качественных GIF-файлов из видео при помощи FFmpeg
Появившиеся в FFmpeg 2.6 фильтры для работы с палитрами дали возможность
существенно увеличить качество преобразования видео в GIF-файлы, за счёт
создания для них высококачественных палитр.


Ранее при необходимости повышения качества GIF-файла можно было отключить
использование прозрачности, что положительно сказывалось на видео с интенсивным
движением или изменением цветов. Но отключение прозрачности в несколько раз
повышало размер файла:

   $ ffmpeg -v warning -ss 45 -t 2 -i big_buck_bunny_1080p_h264.mov -vf scale=300:-1 -gifflags -transdiff -y bbb-notrans.gif
   $ ffmpeg -v warning -ss 45 -t 2 -i big_buck_bunny_1080p_h264.mov -vf scale=300:-1 -gifflags +transdiff -y bbb-trans.gif

   $ ls -l bbb-*.gif
   -rw-r--r-- 1 ux ux 1.1M Mar 15 22:50 bbb-notrans.gif
   -rw-r--r-- 1 ux ux 369K Mar 15 22:50 bbb-trans.gif

Наиболее оптимальным методом повышения качества преобразования является подбор
оптимальной палитры, которая для GIF-файлов ограничена 256 цветами. Так как
создание отдельной палитры для каждого кадра приведёт к расходованию
дополнительных 768 байт на кадр, имеет смысл подготовить качественную
глобальную палитру.

Перекодирование разделим на две стадии. На первой стадии сохраним статистику о
палитрах для каждого кадра при помощи фильтра palettegen. На второй стадии
создадим сводную палитру при помощи фильтра paletteuse, содержащую цвета,
близкие к самым часто используемым цветам в кадрах.

Создадим скрипт gifenc.sh:

   #!/bin/sh

   palette="/tmp/palette.png"
   filters="fps=15,scale=320:-1:flags=lanczos"

   ffmpeg -v warning -i $1 -vf "$filters,palettegen" -y $palette
   ffmpeg -v warning -i $1 -i $palette -lavfi "$filters [x]; [x][1:v] paletteuse" -y $2

Для перекодирования следует выполнить:

   ./gifenc.sh video.mkv anim.gif

Для перекодирования части изображения (например, начиная с позиции 12:23,
продолжительностью 35 сек), можно предварительно обрезать ролик командой:
 
   ffmpeg -ss 12:23 -t 35 -i full.mkv -c:v copy -map 0:v -y video.mkv

или воспользовать фильтром trim, поменяв в скрипте строку:

   filters="trim=start_frame=12:end_frame=431,fps=15,scale=320:-1:flags=lanczos"

Для оптимизации сводной палитры в фильтре palettegen  можно воспользоваться
опцией stats_mod. По умолчанию применяется метод  stats_mode=full, при котором
приоритет отдаётся качеству цветов неизменных частей изображения, таких как
фон. При указании опции
stats_mode=diff можно поменять приоритет в сторону изменяющихся частей, таких
как появляющийся поверх фона текст.

В фильтре paletteuse можно использовать опцию dither для выбора метода
сглаживания цветов. Предлагается основанный на вероятностном предсказании метод
dither=bayer (следует подобрать оптимальный размер шаблона через опцию
dither=bayer:bayer_scale=[1,2,3]) и диффузионные методы dither=floyd_steinberg
(наиболее популярный), dither=sierra2 (используется по умолчанию) и
dither=sierra2_4a (быстрый вариант sierra2, учитывающий блоки по 3 пикселя
вместо 7). Отключить сглаживание можно опцией dither=none.
 
18.03.2015 , Источник: http://blog.pkh.me/p/21-high-qualit...
Ключи: ffmpeg, gif, image, video, palette / Лицензия: CC-BY
Раздел:    Корень / Пользователю / Обработка изображений и видео

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, ананимм (?), 13:53, 18/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а можно ли какнибудь поудалять одинаковые кадры?
    есть видео с камеры наблюдения, где 99% времени статичная картинка (никто неходит), вот бы из этого видео сделать короткую гифку с тем самым 1%...
     
     
  • 2.11, universite (ok), 17:25, 20/03/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    1) на камерах должно указываться время снимка и поэтому два снимка уже отличаются по содержимому
    2) вам нужно motion detections.

     
     
  • 3.13, Айнанимм (?), 03:41, 21/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    1.1) нельзя ли задать область кадра для контроля?
    1.2) нельзя ли указать "размерность" изменений, например "более 5%"...?

    2) т.е. видео файл скормить motion detections, его результат скормить в FFmpeg и получить gif-ку?

    3) а автоматом фон убрать можно? есть кадр с "фоном", есть кадр с "предметом на фоне", можно ли оставить один предмет? (фон не "ровнозелёный")

     
     
  • 4.14, psv (??), 13:06, 21/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    программа так и называется motion
     
  • 2.16, count0krsk (ok), 09:32, 02/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Используйте ZoneMinder и не парьтесь. Он вам сам покажет только те события, когда было движение. Определяет очень хорошо, лучше встроенного в камеры Dlink алгоритма. Даже при слабом освещении помещения от светодиодов, которых не видно с улицы через окно.
     
  • 2.19, тралливалли (?), 05:57, 15/04/2015 [^] [^^] [^^^] [ответить]  
  • +/
    вероятно, подойдёт это
    http://video.stackexchange.com/questions/12233/drop-similar-frames/12314#1231
     
     
  • 3.20, Аноним (-), 00:23, 18/05/2015 [^] [^^] [^^^] [ответить]  
  • +/
    It is actually quite easy using a videofilter with select.

    This is quite sensitive to video changes:
    -vf "select=gt(scene\,0.0098)"

    whereas this is not so sensitive:
    -vf "select=gt(scene\,0.3)"

    EDIT (added your command)

    so your command would look like:
    ffmpeg -f video4linux2 -s 800x600 -r 15 -i /dev/video1 -maxrate 800k \
    -minrate 1k -bt 800k -bufsize 2M -filter \
    drawtext='text=%{localtime }:fontfile=/usr/share/fonts/truetype/DejaVuSans-Bold.ttf'  \
    -vf "select=gt(scene\,0.3)" -shortest -c:v libx264 out.mp4 -y

    P.S. You need to explicitly state the codec libx264 and not just tell it -f h264 and why on earth would you be using avi???

     

  • 1.2, Омоним (?), 23:01, 18/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Debian 7:
    Unrecognized option 'c:v'
    Failed to set value 'copy' for option 'c:v'

    Я так понимаю, это из-за разброда и шатания в разных реализациях ffmgeg-ов от разных команд?
    Или libav тут ни при чем?

     
     
  • 2.3, 02726 (?), 10:34, 19/03/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В самом же начале сказано про ffmpeg 2.6. А Debian libav, а когда вернётся нормальный ffmpeg пока неизвестно.
     
  • 2.15, _йцукен (ok), 11:24, 23/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    под дебом пользуюсь этим http://johnvansickle.com/ffmpeg/
     

  • 1.4, Аноним (-), 11:42, 19/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Огромное спасибо автору от Упячки
     
  • 1.5, Аноним (-), 15:08, 19/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Наконец то я удивлю друзей вконтакте!
     
     
  • 2.17, count0krsk (ok), 09:34, 02/04/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Смотри ЧСВ не сотри от радости ))
     

  • 1.6, iZEN (ok), 19:56, 19/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Во FreeBSD только недавно появился порт ffmpeg 2.6: http://www.freshports.org/multimedia/ffmpeg26/
    (версия 2.6.1 сейчас доступна)
     
     
  • 2.7, Аноним (-), 11:03, 20/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    А зачем мне фрибзд?
     
     
  • 3.8, sprutos (ok), 12:21, 20/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    привыкай, это Изя такой. ему везде надо похвалить, какая хорошая у него фря
     
     
  • 4.18, count0krsk (ok), 09:35, 02/04/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Если каку не хвалить, копрофаги вымрут ))
     

  • 1.9, Олег (??), 14:01, 20/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Большое спасибо! Получаются очень качественные gif'ки :)
     
  • 1.10, Аноним (-), 17:03, 20/03/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Воможно ли сейчас сделать несколько палитр на один кадр? Есть проприетарный софт который позволяет таким образом делать true-color гифки.
     
     
  • 2.12, Аноним (-), 17:31, 20/03/2015 [^] [^^] [^^^] [ответить]  
  • +/
    это делается таким образом что кадр делится на части и каждая часть имеет свою палитру.
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру