Библиотека для обработки видео- и аудиофайлов FFmpeg
ffmpeg — это кроссплатформенная open-source библиотека для обработки видео- и аудиофайлов. В ней есть полезные и удивительные команды, покрывающие почти все нужды: конвертация видео, извлечение звуковой дорожки, конвертирование для iPod или PSP, и многое другое.
Для работы с изображениями есть несколько утилит (IrfanView,Nconv...), для обработки видео и аудио тоже есть, FFmpeg - одна из них. Я думаю обсуждение будет интересным в плане интеграции утилиты с Total Commander, а также с другими средствами автоматизации...
Основные ключи: ———————————————————————————— -i (file) — исходный файл видео; -vcodec — для указания видеокодеков(например libx264), -acodec — для аудиокодека(например mp3), -c:v copy — копия означает "Копировать все видеопотоки без перекодирования" -c:a copy — копия означает "Копировать все аудио потоки без перекодирования" -s (size) — для размера кадра, указывается как Ширина x Высота (WxH), -r — устанавливает количество кадров, генерируемых в буфере кадров FPS (по умолчанию — 25 кадров), -b — для битрейта видео, -f — формат видео на выходе (например flv); -ar — для частоты дискретизации звука(должна быть кратна 11кГц, например - 22050 ), -ab — для битрейта аудио (например 32k) -ac — количество каналов звука (например 2) -g — плотность ключевых кадров (по ним осуществляется перемотка, чем плотнее (1- каждый кадр ключевой) — тем лучше для перемотки, но значительно вырастает размер файла), если значение равно FPS(-r), то ключевой кадр вставляется каждую секунду (так по умолчанию); -vframes — ограничение на количество кадров видео(например 100); -y — перезаписать файл, если он уже существует; -vn — отключение записи видео -an -— отключение записи аудио -ss — указывается начальная позиция в секундах; также поддерживается формат "hh:mm:ss[.xxx]" -t — ограничивается продолжительность преобразования / захвата, указываемая в секундах; также поддерживается формат "hh:mm:ss[.xxx]". -vf — применение фильтров к входному потоку (Просмотреть, какие фильтры доступны можно командой: ffmpeg -filters). -qscale - поддержание качества обрабатываемого видеопотока, может принимать значения от 0 до 15 ( -qscale 0 "0" -— сохраняет качество).
В этой теме будут обсуждаться параметры FFmpeg, а готовые кнопки будут выкладываться в теме:
Из всего скачанного архива я взял один файл ffmpeg.exe и поместил в папку %COMMANDER_PATH%\Utilities\MultiMedia\FFmpeg\ffmpeg.exe, кроме того сжал UPX - получил 9mb вместо 28
После короткого общения с параметрами (спасибо shveicar) получил кнопку:
Код
TOTALCMD#BAR#DATA %COMMANDER_PATH%\Utilities\MultiMedia\FFmpeg\ffmpeg.exe -i %P%N -vn -ar 44100 -ac 2 -ab 128 -f mp3 %T%N %COMMANDER_PATH%\TOTALCMD.EXE,3 Изменить битрейд для аудиофайла под курсором, новый создать в другой панели
-1
Чтобы убрать консоль, воспользовался утилитой TCIMG Прописал в TCIMG.ini в секции:
Не совсем понятно, для чего в обработке mp3 присутствует параметр -vn, ведь "-vn" — не кодировать видео. ========= Кнопка извлечения звука:
Код
TOTALCMD#BAR#DATA %COMMANDER_PATH%\TCIMG.exe imgpr=1 start=FFmpeg||-i||%P%N||-vn||-ar||44100||-ac||2||-ab||128||-f||mp3||"%p%O".mp3||&&hide||&&wait %COMMANDER_PATH%\Wcmicons.dll,19 Извлечение звука из видео в формате MP3 с сохранением в активной панели с именем видеофайла
-1 -1
Если качество не важно, то можно в низком, без условий:
Не совсем понятно, для чего в обработке mp3 присутствует параметр -vn, ведь "-vn" — не кодировать видео.
Привет. Ну только начал знакомиться с утилитой. Многие параметры еще не известны, пользовался комбинациями из разных примеров. Многие вещи в обще не понятны (особенно если учесть запутанную справку). Также пока непонятно почему, - не срабатывают некоторые примеры. Например обрезка видео при конвертировании или наложение фоновых полос снизу и сверху. Доступно только для пользователей и Доступно только для пользователей Также, не получается выбирать различные кодеки для использовании при конвертации. Если есть подробная информация об этом и человеческое описание параметров Прошу поделится. Описание ключей с примерами для IrfanView в этом плане, - просто букварь Чувствую придется основательно изучить их форум Ссылка Утилита выглядит очень перспективно.. вот нашел интересную информацию
Цитата
Библиотека кодеков libavcodec содержит, кстати, и свою реализацию H.264. Сам ffmpeg может подключать и внешние кодеки, такие, например, как lame, xvid, a52 и другие. Для этого он должен быть скомпилирован с поддержкой этих медиакодеков
Получается, что базовая версия для Win - не содержит полной библиотеки кодеков. И нужно создать или найти расширенную скомпилированную версию для работы?. набрал Доступно только для пользователей вроде список большой, тогда как правильно менять кодеки при обработке видео?
Сообщение отредактировал shveicar - Понедельник, 29.09.2014, 08:25
shveicar, сам только постигаю азы, много примеров не срабатывают, будем разбираться. Насчет отсутствия кодеков, да, будем искать расширенную версию, что-то уже нашел, разбираюсь вот. Описания никакого нет, пока в стадии проверки элементарного, бегаю по англоязычным форумам, выхватываю что могу. Там масштаб возможностей неописуемый, будем изучать! =========== Кнопка удаления звука.
Код
TOTALCMD#BAR#DATA %COMMANDER_PATH%\TCIMG.exe imgpr=1 start=FFmpeg||-i||%P%N||-an||-vcodec||copy||%T%N||&&hide||&&wait %COMMANDER_PATH%\Wcmicons.dll,19 Удалить звук из видео и сохранить в противопожной панели с тем же именем
-1 -1
Конвертировать аудифайл под курсором в WAV:
Код
TOTALCMD#BAR#DATA %COMMANDER_PATH%\TCIMG.exe imgpr=1 start=FFmpeg||-i||%P%N||-acodec||pcm_s16le||-ac||2||"%p%O".wav||&&hide||&&wait %COMMANDER_PATH%\Wcmicons.dll,19 Конвертировать аудифайл под курсором в WAV - стерео
Вот еще задачка - есть команда создания видео файла из нескольких изображений. В исходном виде работает из командной строки Доступно только для пользователей если переделать под утилиту - то работает только с одним файлом Доступно только для пользователей %L в данном случае не помогает, - у кого какие есть варианты? аналогично, не срабатывает и вариант разрезания видео на кадры, например 10 кадров с интервалом в 10 секунд в оригинале выглядит так: Доступно только для пользователей а так, не идет Доступно только для пользователей видимо из за параметра %d? нужно с ним разобраться.
Сообщение отредактировал shveicar - Понедельник, 29.09.2014, 11:19
если переделать под утилиту - то работает только с одним файлом
Так в примере image_0%d , где файлы должны быть image_01, image_02 ... кроме того параметр %d - это цифра, НО %d в чистом виде использовать нельзя т.к. это параметр тотала:
[helpquote]%d - Короткие имена файлов без пути, но с использованием набора символов DOS для диакритических знаков. [/helpquote]
аналогично, не срабатывает и вариант разрезания видео на кадры, например 10 кадров с интервалом в 10 секунд
Код
TOTALCMD#BAR#DATA %COMMANDER_PATH%\TCIMG.exe imgpr=1 start=FFmpeg||-i||%P%N||-ss||00:00:25||-r||0.1||-vframes||15||-s||640x480||images%%d.jpg||&&hide||&&wait %COMMANDER_PATH%\Wcmicons.dll,19 Сохранить в активной панели 15 кадров из видеофайла под курсором, начиная с 25-й секунды с интервалом в 10 сек
-1 -1
Первые три кадра он сохраняет покадрово, надо учитывать. Проверяйте. Андрей вовремя подсказал насчет %%d
Код
TOTALCMD#BAR#DATA %COMMANDER_PATH%\TCIMG.exe imgpr=1 start=FFmpeg||-i||%P%N||-r||25||-ss||00:00:10||-t||00:00:05||images%%05d.jpg||&&hide||&&wait %COMMANDER_PATH%\Wcmicons.dll,19 Извлечь кадры пятисекундного отрезка, начиная с десятой секунды из видеофайла под курсором и сохранить в активной панели
-1 -1
Сообщение отредактировал chip642 - Понедельник, 29.09.2014, 22:21
Всем Спасибо, начало положено. Теперь, хоть есть за что зацепиться. Вот еще непонятка, при попытке сохранить извлекаемые изображения в нужную папку с полным путем, команда перестает работать Доступно только для пользователей Как можно задать нужный каталог для сохранения результата? Кажется понял, - утилита FFmpeg не может создавать каталоги, она может использовать только предварительно созданные. Вот вариант с созданием каталога в текущей панели и сохранением полученных файлов в него Доступно только для пользователей В общем в итоге, для работы с несколькими выделенными видео файлами, - использовал цикл. Имя каталога берется из видео файла + хеш для предотвращения возможных совпадений (если каталог с именем видео уже существует) Доступно только для пользователей А вот вариант для извлечения изображений и звука из всего видео, для выделенных файлов Доступно только для пользователей Ну и конвертация выделенных аудио файлов в 128к битрейд mp3 Доступно только для пользователей Мне нравится эта утилита
Сообщение отредактировал shveicar - Вторник, 30.09.2014, 02:33
Удалось добиться обработки всех видео файлов с маской wmv в нужном каталоге (в данном случае H:\1) с рекурсией - извлечение изображений и аудио в свои внутренние каталоги, - без использования %P и прочих примочек тотала.. Удобно для составной автоматизации, при вызове списка команд через файл .tcg Доступно только для пользователей Если нужно с тоталом (для выделеного каталога и всех лежащих внутри видео файлов wmv), то вместо slist и пути к каталогу H:\1 - ставим Доступно только для пользователей
Сообщение отредактировал shveicar - Вторник, 30.09.2014, 13:49
Мда, столько времени убить, а ларчик-то просто открывался:
Код
TOTALCMD#BAR#DATA %COMMANDER_PATH%\TCIMG.exe imgpr=1 start=FFmpeg||-i||%P%N||-ss||00:01:00||-t||00:05:00||-c||copy||%T%N||&&hide||&&wait %COMMANDER_PATH%\Wcmicons.dll,19 Из видеофайла под курсором вырезать фрагмент начиная с 1-ой минуты продолжительностью 5 минут, сохранить в противоположной панели
-1 -1
Код
TOTALCMD#BAR#DATA %COMMANDER_PATH%\TCIMG.exe imgpr=1 start=FFmpeg||-i||%P%N||-ss||00:01:00||-to||00:05:00||-c||copy||%T%N||&&hide||&&wait %COMMANDER_PATH%\Wcmicons.dll,19 Из видеофайла под курсором вырезать фрагмент с 1-ой по 5 минуты, сохранить в противоположной панели
-1 -1
Скорость поражает 100мб за 1 секунду вырезает. ==========
Код
TOTALCMD#BAR#DATA %COMMANDER_PATH%\TCIMG.exe imgpr=1 start=FFmpeg||-i||%P%N||-vf||transpose=1||-qscale||0||%T%N||&&hide||&&wait %COMMANDER_PATH%\Wcmicons.dll,4 Повернуть видео на 90° по часовой стрелке
-1 -1
Код
TOTALCMD#BAR#DATA %COMMANDER_PATH%\TCIMG.exe imgpr=1 start=FFmpeg||-i||%P%N||-vf||transpose=2||-qscale||0||%T%N||&&hide||&&wait %COMMANDER_PATH%\Wcmicons.dll,4 Повернуть видео на 90° против часовой стрелке
-1 -1
[plus]Значения ключа transpose: 0 — против часовой стрелки и зеркально; 1 — по часовой стрелке; 2 — против часовой стрелки; 3 — по часовой стрелке и зеркально[/plus]
большая просьба готовые решения оформлять в виде кнопок и выкладывать в теме: Обработка видео- и аудиофайлов
Андрей, ну пока предварительная работа идет, люди должны протестить, проверить, я же не знаю может только у меня работает и еще тут главное найти правильные параметры, чтобы зацепиться за выполнение той или иной задачи, а потом пойдет всё. Связи ни с кем нет, shveicar аську написал, я его добавил написал ему и тишина, написал ему на почту свою аську опять тишина.
Сообщение отредактировал chip642 - Четверг, 02.10.2014, 16:55
Есть такой вопрос, - удалось добиться склеивания нескольких mp3 с одновременным изменением битрейда на нужное значение. Доступно только для пользователей для TCIMGU.ini секция [FormatUser] Доступно только для пользователей Загвоздка в том, что выходной файл должен иметь имя copy в противном случае образуется файл в конце которого остается пустое место (это видно при попытке перемотать на нужный фрагмент) Возможно команда не совсем правильная, но пробовал экспериментировать переставляя параметры и лучшего добиться не удалось. У кого какие идеи?
Сообщение отредактировал shveicar - Четверг, 02.10.2014, 13:32