Поддерживаемые фильтры
FFmpeg поддерживает, среди прочего, следующие фильтры.
Аудио
- Передискретизация (aresample)
- Фильтры Pass / Stop
- Фильтр нижних частот (lowpass)
- Фильтр высоких частот (highpass)
- Всепроходный фильтр (allpass)
- Полосовой фильтр Баттерворта (полосовой)
- Полосовой фильтр Баттерворта (Bandreject)
- Фильтр произвольной конечной импульсной характеристики (AFIR)
- Фильтр произвольной бесконечной импульсной характеристики (aiir)
-
Эквалайзер
- Peak Equalizer (эквалайзер)
- Многополосный эквалайзер Баттерворта / Чебышева типа I / типа II (эквалайзер)
- (бас)
- Фильтр High Shelving (тройной)
- Xbox 360 rqulizer
- КИХ-эквалайзер (эквалайзер)
- Биквадратный фильтр (биквадратный)
- Удалить / добавить смещение постоянного тока (dcshift)
-
Оценка выражения
- Оценка выражения во временной области (aeval)
- Оценка выражения в частотной области (afftfilt)
- Динамика
- Лимитер (алимитер)
- Компрессор (компрессор)
- Расширитель динамического диапазона (кристаллизатор)
- боковой ( боковой цепи)
- Компандер (COMPAND)
- Шумовые ворота (агат)
- Гейт с сайдчейном (сайдчейн)
- Искажение
- Акцент (акцент)
- Усиление / Нормализатор
- Объем (объем)
- Динамический нормализатор звука (dynaudnorm)
- EBU R 128 нормализатор громкости (Loudnorm)
- Модуляция
- Синусоидальная амплитудная модуляция (тремоло)
- Синусоидальная фазовая модуляция (вибрато)
- Фазер (афазер)
- Хор (припев)
- Флэнджер (флэнджер)
- Пульсатор (апульсатор)
- Эхо / реверберация
- Маршрутизация / панорамирование
- Расширение стерео (стерео)
- Увеличение разницы каналов (extrastereo)
- до L / R (стереоинструменты)
- Отображение каналов (карта каналов)
- Разделение каналов (разделение каналов)
- Панорамирование канала (панорамирование)
- Объединение каналов (объединение)
- Присоединение к каналу (присоединиться)
- для наушников
- Стерео на бинауральное (ушная сера, портирована с SoX)
- Bauer Stereo в бинауральный (bs2b, через libbs2b)
- Crossfeed ( перекрестная подача )
- Многоканальный на бинауральный (софализатор, требуется libnetcdf)
-
Задерживать
- Задержка (аделей)
- Задержка по расстоянию (задержка компенсации)
- Тускнеть
- Фейдер (афаде)
- (acrossfade)
-
Аудио временная шкала / изменение высоты тона
- Растяжение времени (atempo)
- Растяжение по времени и изменение высоты тона (резиновая лента, через librubberband)
- Редактирование
- Обрезка (атрим)
- Тишина-обивка (апад)
- Средство удаления тишины (Silence Remove)
- Показать информацию о кадре / канале
- Показать информацию о кадре (ashowinfo)
- Показать информацию о канале (астатс)
- Показать диапазоны тишины (тишина)
- Показать громкость звука (определение громкости)
- Сканер ReplayGain (повтор)
- Изменить информацию о кадре / канале
- Установить выходной формат (aformat)
- Установить количество образцов (asetnsamples)
- Установить частоту дискретизации (asetrate)
- Смеситель (amix)
- Синхронизация (асинхронность)
- Декодер данных HDCD (hdcd)
- Плагины
- LADSPA (LADSPA)
- LV2 (lv2)
- Ничего не делать (anull)
видео
- Трансформации
- Обрезка ( обрезка , обнаружение урожая)
- Затухание (затухание)
- Масштабирование (масштаб)
- Прокладка (подушечка)
- Вращение (поворот)
- Транспонирование (транспонирование)
- Другие:
- Коррекция линз (линзокоррекция)
- Фильтрация OpenCV (ocv)
- Коррекция перспективы (перспектива)
- Временное редактирование
- Частота кадров (кадров в секунду, частота кадров)
- Зацикливание (петля)
- Обрезка (обрезка)
- Деинтерлейсинг (bwdif, idet, kerndeint, nnedi, yadif, w3fdif)
- Фильтрация
- Размытие (boxblur, gblur, avgblur, sab, smartblur)
-
Фильтры
свертки- Свертка (свертка)
- Обнаружение края (edgedetect)
- Фильтр Собеля (Sobel)
- Prewitt фильтр (prewitt)
- Нерезкое маскирование (нерезкое)
- Снижение шума (atadenoise, bitplanenoise, dctdnoiz, owdenoise, removegrain)
- Удаление логотипа (delogo, removelogo)
- Субтитры ( ASS , субтитры)
- Редактирование альфа- канала (alphaextract, alphamerge)
- Кейинг (хромакей, колоркей, люмакей)
- Обнаружение кадра
- Обнаружение черного кадра (blackdetect, blackframe)
- Выбор эскиза (эскиз)
- Наложение кадров (смешение, смешение, наложение)
- Стабилизация видео (видстабдетект, видстабтрансформ)
- Регулировка цвета и уровня
- Баланс и уровни (цветовой баланс, цветовые уровни)
- Смешивание каналов (colorchannelmixer)
- Цветовое пространство (цветовое пространство)
- Параметрические настройки (кривые, экв.)
- Гистограммы и визуализация
- CIE Scope (ciescope)
- Вектороскоп ( вектороскоп )
- Монитор формы волны (форма волны)
- Цветовая гистограмма (гистограмма)
- Рисунок
- OCR
- Меры качества
- SSIM (ssim)
- PSNR (psnr)
- Таблицы поиска
Приложения
Правовые аспекты
FFmpeg содержит более 100 кодеков, в большинстве из которых используются те или иные методы сжатия. Многие такие методы сжатия могут быть предметом судебных исков, связанных с патентами на программное обеспечение . Такие иски могут иметь исковую силу в таких странах, как США, которые внедрили патенты на программное обеспечение, но считаются не имеющими исковой силы или недействительными, например, в странах-членах Европейского Союза . Срок действия патентов на многие старые кодеки, включая AC3 и все кодеки MPEG-1 и MPEG-2, истек.
FFmpeg находится под лицензией LGPL, но если конкретная сборка FFmpeg связана с какими-либо библиотеками GPL (особенно x264 ), то весь двоичный файл будет лицензироваться под GPL.
Проекты с использованием FFmpeg
FFmpeg используется программное обеспечение , такие как VLC медиа — плеер , Xine , Shotcut , Cinelerra-GG редактор видео , Plex , Kodi , Blender , HandBrake , YouTube , VirtualDub2, VirtualDub вилки, и MPC-HC ; он обрабатывает воспроизведение видео и аудио в Google Chrome и версии Firefox для Linux. Графический пользовательский интерфейс передние концы для FFmpeg были разработаны, в том числе XMedia Recode .
FFmpeg используется ffdshow , LAV Filters, подключаемым модулем GStreamer FFmpeg , Perian , и FFmpegInterop для расширения возможностей кодирования и декодирования соответствующей мультимедийной платформы.
В рамках миссии НАСА на Марс 2020 FFmpeg используется марсоходом Perseverance на Марсе для сжатия изображений и видео перед отправкой обратно на Землю.
Вырезаем фрагмент видео
Флагом указываем с какого момента исходного видео обрезаем, — продолжительность. На выходе мы получим двадцати секундное видео, которое начнется с десятой секунды исходного. Запись пригодится для указания более точного промежутка времени. До версии 2.1 FFmpeg в обоих случаях обрезал видео по ближайшему ключевому кадру. В новых версиях итоговое видео максимально близко к указанному интервалу.
Мы добавили , чтобы сохранить кодеки исходного видео. Иначе ffmpeg перекодировал бы их в кодеки по умолчанию. Сейчас видео не перекодируется и команда выполнится быстро. Дальше упростим эту запись флагом .
Если расположить флаги и после входящего видео, то итоговое видео будет таким же, но команда будет выполняться дольше. Флаги будут относиться к итоговому видео и FFmpeg будет декодировать фрагмент видео до . В первом случае эта часть будет проигнорирована.
Флаг можно заменить на , указав вместо продолжительности конечную точку. Этот флаг нельзя применить к входящему видео:
Команда дала нам другой результат: тридцати секундное видео с десятой секунды исходного. Это произошло, потому что использовал временную шкалу , тридцатая секунда на котором равна сороковой секунде . Чтобы использовать исходную шкалу добавим флаг . Так мы получим такое же видео, как от первой команды:
Случай транскодирования
Пусть мы имеем входной файл формата Format1 с одним видео потоком Stream1, закодированный кодеком Codec1, нам нужно его перекодировать в файл формата Format2, так же с одним видео потоком Stream2, закодированным кодеком Codec2.
Что получается:
- после открытия входного файла Stream1 имеет time-base InStreamTimeBase, а Coder1 имеет time-base InCoderTimeBase.
- после настройки выходного формата, и записи заголовка мы имеем: Stream2 с OutStreamTimeBase и Codec2 с OutCoderTimeBase.
- возвращает пакеты с pts/dts в масштабе InStreamTimeBase.
- после декодирования видео-фрагментов, мы получаем фрейм с pts в масштабе InCoderTimeBase
- если возникает необходимость копировать pts/dts пакеты в pts фрейма необходимо сделать масштабирование: frame.pts = av_rescale_q(packet.pts/dts, InStreamTimeBase, InCoderTimeBase);
- перед кодировкой фрейма при помощи Coder1 нужно смаштабировать его pts: frame.pts = av_rescale_q(frame.pts, InCoderTimeBase, OutCoderTimeBase);
- перед записью получившегося пакета, нужно смаштабировать его pts/dts: packet.pts/dts = av_rescale_q(packet.pts/dts, OutCoderTimeBase, OutStreamTimeBase);
- записать пакет.
Масштабирования нужно делать только если значение временной метки не равно AV_NOPTS_VALUE.
За сим всё.
Что такое ffmpeg?
ffmpeg — это один из лучших мультимедийных фреймворков, который содержит различные инструменты, для решения разных задач. Например, ffplay — портативный медиа плеер, утилита ffmpeg может использоваться для обработки и инвертирования файлов, ffserver — для потоковой передачи данных, а ffprobe может анализировать мультимедийный поток.
В набор ffmpeg, кроме утилит, входят такие библиотеки: libavutil libavcodec libavformat libavdevice libavfilter libavresample libswscale libswresample libpostproc. Из-за своей архитектуры, этот набор инструментов очень безопасный, и с помощью него вы можете сделать почти все что угодно с видео или аудио. В этой статье мы будем рассматривать в основном утилиту ffmpeg. Давайте рассмотрим ее синтаксис:
$ ffmpeg -i
- Опции источника — указывают параметры чтения файла, настройки и так далее;
- Источник — опция -i задает источник, откуда будет читаться файл, источников может быть несколько и это может быть не только файл, но и устройство;
- Основные опции — задают параметры работы всей утилиты;
- Кодеки — кодек, который будет использоваться для сохранения видео и аудио;
- Преемник — файл или устройство, куда будут записаны данные.
Сейчас мы не будем подробно рассматривать опции, рассмотрим их потом, уже в самих командах.
История
Проект был начат Фабрисом Белларом (под псевдонимом «Жерар Лантау») в 2000 году, а с 2004 по 2015 год его возглавлял Майкл Нидермайер. Некоторые разработчики FFmpeg также были частью проекта MPlayer .
Название проекта навеяно группой стандартов видео MPEG вместе с «FF» для «быстрой перемотки вперед». В логотипе используется зигзагообразный узор, показывающий, как видеокодеки MPEG обрабатывают энтропийное кодирование .
13 марта 2011 года группа разработчиков FFmpeg решила разделить проект под названием Libav . Мероприятие было связано с проблемой управления проектами, в которой разработчики не согласились с руководством FFmpeg.
10 января 2014 года два сотрудника Google объявили, что с помощью нечеткого тестирования было исправлено более 1000 ошибок в FFmpeg за предыдущие два года .
В январе 2018 года программа командной строки ffserver — давний компонент FFmpeg — была удалена. Разработчики ранее не рекомендовали программу, ссылаясь на большие усилия по обслуживанию из-за использования в ней внутренних интерфейсов прикладного программирования .
Проект выпускает новый релиз в среднем каждые три месяца. Хотя версии выпуска доступны для загрузки на веб-сайте, разработчики FFmpeg рекомендуют пользователям компилировать программное обеспечение из исходного кода, используя последнюю сборку из их системы контроля версий Git исходного кода .
История кодеков
На данный момент в рамках проекта FFmpeg созданы два формата кодирования видео с соответствующими кодеками и один формат контейнера . Два видеокодека — это FFV1 без потерь и кодек Snow без потерь и с потерями. Разработка Snow застопорилась, а его формат битового потока еще не завершен, что делает его экспериментальным с 2011 года. Формат мультимедийных контейнеров под названием NUT больше не разрабатывается, но все еще поддерживается.
Летом 2010 года разработчики FFmpeg Фиона Глейзер, Рональд Бултье и Дэвид Конрад анонсировали декодер ffvp8. В ходе тестирования они определили, что ffvp8 был быстрее, чем собственный декодер libvpx от Google . Начиная с версии 0.6, FFmpeg также поддерживает WebM и VP8 .
В октябре 2013 года в FFmpeg были добавлены собственный VP9 и декодер OpenHEVC, декодер с открытым исходным кодом High Efficiency Video Coding (HEVC). В 2016 году собственный кодировщик AAC считался стабильным, из-за чего была удалена поддержка двух внешних кодировщиков AAC из VisualOn и FAAC . FFmpeg 3.0 (по прозвищу «Эйнштейн» ) сохранил поддержку сборки для кодировщика Fraunhofer FDK AAC . Начиная с версии 3.4 «Cantor» FFmpeg поддерживает формат изображений FITS . С ноября 2018 года в версии 4.1 «аль-Хорезми» AV1 можно мультиплексировать в MP4 и Matroska, вкл. WebM .
Streaming your desktop
Examples below use for Linux. Windows users can use or . macOS can use . See FFmpeg Wiki: Capture Desktop for additional examples.
Without scaling the output
If you want the output video frame size to be the same as the input:
$ ffmpeg -f alsa -ac 2 -i hw:0,0 -f x11grab -framerate 30 -video_size 1280x720 \ -i :0.0+0,0 -c:v libx264 -preset veryfast -b:v 1984k -maxrate 1984k -bufsize 3968k \ -vf "format=yuv420p" -g 60 -c:a aac -b:a 128k -ar 44100 \ -f flv rtmp://live.twitch.tv/app/<stream key>
Scaling the output
If you want the output video frame size to be smaller than the input then you can use the :
$ ffmpeg -f alsa -ac 2 -i hw:0,0 -f x11grab -framerate 30 -video_size 1680x1050 \ -i :0.0+0,0 -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 3000k \ -vf "scale=1280:-1,format=yuv420p" -g 60 -c:a aac -b:a 128k -ar 44100 \ -f flv rtmp://live.twitch.tv/app/<stream key>
The in the scale filter example will automatically calculate the correct value to preserve the height. In this case the output will have a frame size of 1280×800.
With webcam overlay/picture-in-picture (PiP)
This will place your webcam overlay in the top right:
$ ffmpeg -f x11grab -video_size 1680x1050 -framerate 30 -i :0.0 \ -f v4l2 -video_size 320x240 -framerate 30 -i /dev/video0 \ -f alsa -ac 2 -i hw:0,0 -filter_complex \ "scale=1024:-1,setpts=PTS-STARTPTS; \ scale=120:-1,setpts=PTS-STARTPTS; \ overlay=W-w-10:10,format=yuv420p" -map "" -map 2:a -c:v libx264 -preset veryfast \ -b:v 3000k -maxrate 3000k -bufsize 4000k -c:a aac -b:a 160k -ar 44100 \ -f flv rtmp://live.twitch.tv/app/<stream key>
You can see additional details your webcam with something like: ffmpeg -f v4l2 -list_formats all -i /dev/video0 or with v4l2-ctl —list-formats-ext. See the documentation on the video4linux2 (v4l2) input device for more info.
Your webcam may already support whatever frame size you want to overlay onto the main video, so scaling the webcam video as shown in this example can be omitted (just set the appropriate v4l2 -video_size and remove the scale=120:-1,).
With webcam overlay and logo
This will place your webcam overlay in the top right, and a logo in the bottom left:
$ ffmpeg -f x11grab -video_size 1680x1050 -framerate 30 -i :0.0 \ -f v4l2 -video_size 320x240 -framerate 30 -i /dev/video0 \ -f alsa -ac 2 -i hw:0,0 -i logo.png -filter_complex \ "scale=1024:-1,setpts=PTS-STARTPTS; \ scale=120:-1,setpts=PTS-STARTPTS; \ overlay=W-w-10:10; \ overlay=W-w-10:H-h-10,format=yuv420p" -map "" -map 2:a -c:v libx264 -preset veryfast \ -maxrate 3000k -bufsize 4000k -c:a aac -b:a 160k -ar 44100 \ -f flv rtmp://live.twitch.tv/app/<stream key>
Как пользоваться ffmpeg
Как я уже сказал, утилита ffmpeg поддерживает большинство аудио и видео форматов. Чтобы проверить какие форматы поддерживаются вы можете выполнить:
Если вы новичок в использовании этого инструмента, то вот некоторые команды, которые могут вам очень сильно помочь. Дальше вы узнаете как пользоваться ffmpeg.
1. Получить информацию о видео
Чтобы получить доступную информацию о видео, достаточно просто указать файл источника. Выполните такую команду:
Опция -hide_banner указывает программе, что не нужно показывать информацию о себе, опции сборки и так далее. Вы можете выполнить команду без этой опции, тогда получите всю информацию, в том числе и об ffmpeg:
2. Разбить видео на кадры
Чтобы разбить видео на изображения подойдет такая команда:
Утилита сгенерирует изображения с именами image1.jpg, image2.jpg, image3.jpg и так далее. После завершения вы найдете очень большое количество изображений в папке с видео.
3. Собрать видео из изображений
Вы можете взять полученный набор картинок и собрать все обратно в видео. Для этого выполните:
Опция -f задает формат входного файла, вы можете использовать jpeg, png, jpg и другие картинки. И вы уже знаете как посмотреть поддерживаемые форматы ffmpeg.
4. Вытянуть звук из видео
Чтобы конвертировать видео в mp3 выполните команду:
Вот описание новых опций:
- -vn — не обрабатывать видео, вся видео информация будет отброшена;
- -ar — частота дискретизации, измеряется в герцах, чем больше, тем лучше качество звука;
- -ab — устанавливает битрейт аудио;
- -ac — устанавливает количество каналов;
- -f — указывает формат полученного файла.
6. Преобразовать видео в gif
Таким же самым образом можно переделать видео в анимированную gif картинку:
Мы не указываем кодеки ffmpeg и формат, потому что программа может их сама определить по расширению.
Чтобы конвертировать видео mpg в flv выполните:
Здесь мы уже задали битрейт и формат.
8. Преобразовать avi в mpeg
Для этого выполните команду:
Использованные опции:
- -target pal-dvd — формат исходящего файла;
- -ps 2000000000 — максимальный размер полученного файла;
- -aspect 16:9 — соотношение сторон экрана.
9. Конвертировать видео в CD или DVD формат
Чтобы выполнить конвертирование ffmpeg видео в формат DVD, нужно задать ваш формат с помощью опции -target. Доступны такие форматы: vcd, svcd, dvd, dv, pal-vcd или ntsc-svcd. Чтобы создать VCD выполните:
11. Увеличить/уменьшить скорость видео
Чтобы увеличить скорость воспроизведения видео мы будем использовать фильтры, с помощью опции -vf. За скорость отвечает фильтр setpts. Например:
А так можно уменьшить скорость:
12. Вырезать прямоугольник из видео
Для того чтобы вырезать определенный участок кадра из видео тоже используются фильтры. На этот раз фильтр crop:
- out_w — ширина нужного прямоугольника;
- out_h — высота нужного прямоугольника;
- x,y — задают координаты прямоугольника от начала видео.
Например, обрежем прямоугольник размером 80х60 от позиции 100х200:
Кроме этих опций, здесь можно задавать кодеки ffmpeg и форматы, чтобы параллельно выполнить кодирование ffmpeg.
13. Обрезать видео
Тут уже фильтры нам не помогут, но зато мы можем указать опциями из какого момента нужно начать и где завершить, например:
Начинаем от минуты и пишем еще минуту:
- -ss задает время на видео, из которого стоит начать запись;
- -t задает время когда запись нужно завершить относительно ss;
- -с задает кодеки для аудио и видео, в нашем случае просто копировать файлы, ничего не перекодируя.
15. Проиграть видео
Вы можете быстро проиграть видео, чтобы оценить его качество, для этого есть команда:
Программа открывает и видео, и аудио.
16. Фото-баннер для аудио
Вы можете добавить фото баннер к вашей аудио записи с помощью следующей команды:
Рассмотрим опции:
- -loop — задает, что нужно всегда повторять оду и ту же картинку;
- -i — задают входящие файлы, картинку и аудиофайл;
- -с:v — задает видеокодек, эквивалентно -vc;
- -c:a — задает аудиокодек, эквивалентно -ac;
- -b:a — задает битрейт аудио, эквивалентно -ab;
- -strict experimental — кодек aac для ffmpeg экспериментальный, поэтому чтобы его использовать нужна эта опция.
17. Добавить субтитры к видео
Если у вас есть отдельный файл субтитров, например с именем subtutle.srt, вы можете использовать такую команду, чтобы добавить его к видео:
Кодировка и запись (микширование потоков)
При кодировании и микшировании мы сами добавляем потоки в выходной формат. При этом time-base мы должны задавать только для кодировщика () и делать это обязательно.
Поле time-base у потока () можно устанавливать, а можно и нет, всё равно, после вызова оно будет сброшено и установлено в необходимое значение подходящее для данного типа контейнера. При этом, значение time-base из будет использоваться как подсказка, если контейнер не определяет требований к значению time-base.
Соответственно, важно: даже при записи вы не можете гарантировать, что значения time-base в и в будут эквивалентны. Кроме того, вы не можете опираться на значение time-base внутри пока не будет вызвана
Как следствие, при копировании временной метки из фрейма в пакет нужно использовать
Особо хочу отметить, что если вы делаете масштабирование поля пакета, не забудьте сделать то же для поля , иначе получите интересные артефакты при воспроизведении.
Для аудио-фреймов и аудио пакетов поля и всегда будут и никаких преобразований делать не нужно.
4 ответа
5
Если входной файл не имеет допустимой частоты кадров, вам может потребоваться явно указать его
2
Я мог только получить измененную частоту кадров, чтобы вступить в силу, если входной файл был классифицирован как «сырой» файл:
Без указания он по умолчанию будет 25 кадров в секунду, и он не может быть изменен. По-видимому, это связано с тем, что в потоке не было никакой информации о частоте кадров, и это частота кадров ffmpeg по умолчанию.
По-видимому, когда вы используете в качестве опции вывода, он дублирует или опускает кадры, чтобы видео воспроизводилось с одинаковой скоростью — в этом случае , а не то, что вы хотите! Но изменение входной частоты кадров, как указано выше, приведет к ускорению или замедлению видео, без потери или дублирования кадров.
2
Я знаю, что это старый вопрос, но ни один из текущих ответов больше не рекомендуется. Это руководство от ffmpeg вики
Обратите внимание, что для всех этих параметров требуется повторное кодирование видео
Ускорение /замедление видео
Вы можете изменить скорость видеопотока, используя фильтр видеопотоков
Обратите внимание, что в следующих примерах аудиопоток не изменяется, поэтому в идеале он должен быть отключен с помощью -an
Чтобы удвоить скорость видео, вы можете использовать:
Фильтр работает, изменяя временную метку представления (PTS) каждого видеокадра. Например, если на временных отметках 1 и 2 показаны два последовательных кадра, и вы хотите ускорить видео, эти метки времени должны стать 0.5 и 1 соответственно. Таким образом, мы должны умножить их на 0,5.
Обратите внимание, что этот метод будет отбрасывать кадры для достижения желаемой скорости. Вы можете избежать сброшенных кадров, указав более высокую скорость выходного кадра, чем вход
Например, чтобы перейти от входа 4 FPS к одному, который ускорен до 4x, что (16 FPS):
Чтобы замедлить ваше видео, вам необходимо использовать множитель, превышающий 1:
Гладкие
Вы можете сгладить медленное /быстрое видео с помощью фильтра фильтра minterpolate. Это также известно как «интерполяция движения» или «оптический поток».
Другие варианты включают slowmoVideo и Butterflow.
Ускорение /замедление звука
Вы можете ускорить или замедлить звук с помощью звукового фильтра atempo. Чтобы удвоить скорость звука:
Фильтр atempo ограничен использованием значений от 0,5 до 2,0 (поэтому он может замедлить его до не менее половины первоначальной скорости и ускорить до двух раз больше входного сигнала). Если вам нужно, вы можете обойти это ограничение, объединив несколько фильтров atempo. Следующие с четырехкратной скоростью звука:
Используя сложный фильтр, вы можете одновременно ускорить видео и аудио:
Установка FFmpeg
FFmpeg распространяется в исходных кодах, но на официальном сайте есть ссылки на собранные бинарники для MaxOS и Windows.
Как установить FFmpeg в Windows
FFmpeg для Windows.
Разархивируйте содержимое скачанного архива, например в Program Files/ffmpeg (или в другую папку, например, где у вас хранятся портативные программы).
В PowerShell выполните следующую команду.
Для cmd немного модифицированная команда.
Если в консоли появилось сообщение о версии FFmpeg, значит программа работает.
Чтобы каждый раз не вводить длинный путь к программе C:\Program Files\ffmpeg\bin\ffmpeg.exe рекомендую добавить ее в системную переменную Path, для этого:
- перейдите в параметры Windows, в поиске введите Панель управления
- перейдите в Панель управления – Система и безопасность – Система;
- выберите пункт Дополнительные параметры системы;
- нажмите кнопку Переменные среды;
- в поле Системные переменные выберите значение Path и нажмите кнопку Изменить, чтобы добавить новое значение;
- укажите путь к папке с FFmpeg содержащую ffmpeg.exe;
- перезагрузите компьютер.
Теперь для того, чтобы вызвать FFmpeg используйте в консоли следующую команду.
Как установить FFmpeg в MacOS
Самый простой способ установить FFmpeg на MacOS, это Homebrew.
Либо можно поставить FFmpeg вручную. Для этого, FFmpeg для MacOS.
Перейдите в папку с загрузками, распакуйте скачанный архив, а затем переместите исполняемый файл ffmpeg в папку /usr/local/bin
Далее введите пароль и FFmpeg будет скопирован в директорию к остальным бинарникам.
Попробуйте выполнить следующую команду.
Если в консоли появилось сообщение о версии FFmpeg, значит программа работает.
Как установить FFmpeg в Linux
Для Linux можно самостоятельно собрать FFmpeg из исходников, либо установить его, используя менеджер пакетов входящий в состав операционной системы.
Например, для Ubuntu это можно сделать через репозиторий mc3man ppa, поддерживаемый сообществом Ubuntu.
В Debian 9 FFmpeg доступен в официальном репозитории, поэтому для установки достаточно одной команды.
CentOS не предоставляет официальный репозиторий для FFmpeg, поэтому, как и в случае с Ubuntu, его можно установить с помощью стороннего репозитория.
В CentOS 7 и RHEL 7 используйте следующую команду:
В CentOS/RHEL 6/5 команда отличается.
Далее установите FFmpeg.
После установки попробуйте выполнить следующую команду.
Если в консоли появилось сообщение о версии FFmpeg, значит программа работает.
-maxrate
Anytime you are encoding video with bandwidth as a limiting factor you should be using VBV (Video Buffer Verifier) with the and options:
Assuming your upload rate is 1024kbit/s (1 megabit/s), and assuming you can reliably utilize 80% of that = 820 kbit/s. Audio will consume 128 kbit/s (64k/channel for stereo, but you can of course use a different audio bitrate) leaving ~692 kbit/s for video: this is your -maxrate value.
If you have a sane upload rate, or do not know what to choose then a -maxrate value of up to 3000k-4000k will probably be fine if your upload rate can handle it (depending on your input complexity and -video_size). Refer to your streaming service for any limitations that may apply.
Note that the claimed data rate pay your ISP for may not actually be what you get.
FFmpeg: быстрый старт
После установки FFmpeg можно творить магию преобразования видео в консоли.
Указанная команда сконвертирует видео из файла input.avi в output.mp4. По умолчанию для файлов mov и mp4 используется кодек H.264. Размер кадра и fps будут взяты из исходного файла.
В примере выше параметры по умолчанию могут не обеспечить желаемые качество или результат. Поэтому параметры можно задавать явно. Однако не обязательно указывать все, в этом случае FFmpeg возьмет их из исходного файла (например частоту кадров) или значение используемое по умолчанию.
Ниже перечислены основные параметры FFmpeg:
- -i имя исходного файла, который предстоит сконвертировать, если файлов несколько перед каждым из них нужно указать -i;
- -y ответит Да (yes) на все вопросы от FFmpeg, если они возникнут в процессе кодирования, например при для перезаписи файла, если тот уже существует;
- -vcodec или кратко c:v – параметры видеокодека, либо copy (если перекодирование не требуется), либо пустой параметр (по умолчанию);
- -f – формат контейнера;
- -b:v (-vb, -b) – битрейт видео в килобитах или мегабитах в секунду задаётся буквой K или M;
- -aspect – соотношение сторон картинки (4:3, 16:9, 1.3333, 1.7777);
- -r – частота кадров;
- -s – разрешение, поддерживаются как числовые значения (например, 640×480, 1920×1080), так и буквенные обозначения (например, qcif, qvga);
- -vf (или -filter:v) — опция со списком фильтров, которые будут применены к видео;
- -c:a (или -acodec) – параметры аудиокодека, либо copy (если аудио дорожку нужно оставить как есть), либо пустой параметр (по умолчанию);
- -f – формат аудио;
- -af (или -filter:a) — опция со списком фильтров, которые будут применены к аудио;
- -ab (или -b:a) – битрейт аудио;
- -ar – частота дискредитации;
- -ac – количество каналов.
Для примера рассмотрим следующую команду.
Данная команда перекодирует файл input.avi в output.mp4. В случае если в конечной папке будет содержаться файл output.mp4, он будет перезаписан (опция -y). В качестве кодека будет использован libx264 со среднем соотношением скорость/качество (-preset medium). Конечный битрейт 17000kbps, соотношение сторон картинки 16:9, частота 25 кадров в секунду. В качестве аудиокодека будет использован AAC с битрейтом 256kbps.
А так можно быстро перепаковать файл из одного контейнера в другой без пересжатия и потери качества.
или аналогичная (сокращенная запись)
Это может оказаться полезным, когда устройство, на котором вы хотите воспроизвести видео, не поддерживает исходный формат. Или, например программа видеомонтажа не умеет работать с каким либо форматом и не хочет импортировать его в проект (например Adobe Premiere не работает с mkv, хотя внутри – все тот же H.264). С помощью перепаковки проблема решиться.
С полным списком команд FFmpeg можно ознакомиться на официальной документации, а ниже разберем полезные примеры их использования.