Comments 107
Команды, конечно, интересные, но скажите, пожалуйста, как, например, при перекодировании видео задавать параметры кодека для итогового результата.
В указанном в начале статьи мануале имеется перечисление всех доступных опций, Вам нужны секции Video Options и Advanced Video Options.
Да, гораздо интереснее было бы почитать про тонкие опции, как из приведенных примеров и пропущенные в пояснениях, так и из указанных секций.
спасибо за статью, теперь я знаю как без всяких утилит перекодировать видео для iPad со своими кастомные настройками. Скачал несколько бесплатных, а там презаданные параметры и приходилось пользоваться ими
я имел ввиду GUI-утилит, где жесткие ограничения. У меня 16 гб, после прог, игр и музыки осталось мало места, а иногда в дорогу охото побольше фильмов закачать. Теперь же смогу сам варьировать размером видео файла
Ребят, а как с помощью нее в видео файле переконвертировать формат аудио из ac3 в mp3?
Стоит дома Т2 декодер и есть функция чтения фильмов с USB, но бида в том, что он не хочет воспринимать аудио ac3.

Сейчас юзаю HandBrake, но он нереально все долго делает (близко 40 минут, на фильм в 1.5 гб).
В принципе, должно сработать что-то типа этого:

ffmpeg -i source_video.avi -acodec mp3 output_video.avi
В любом случае я не зря обновил скрипты.

function avconv () {
    [ -n "$1" ] && echo `which $1` && exit
    [ -n "`which avconv`" ] && echo `which avconv` || echo `which ffmpeg`
}
Конструкция
echo `команда`

внушает. Вы ее сознательно применили — у вас там что-то хитрое с путями?
У меня небольшая резервация в ~/.local/bin и .bashrc на стеройдах. Эта конструкция, возможно, однажды пригодится и не обременяет.

Хотя после ознакомления с происходящим вообще не вижу смысла в этом коде. Ничто не мешает использовать ffmpeg.
Ну, сама по себе конструкция echo `команда` ничего осознанно хорошего не делает. В 99% случаев, это ровно то же, что написать просто команда, но:
  • вариант с echo умеет падать, если команда выдаст слишком много данных
  • вариант с echo преобразует все whitespace, по которым shell разделяет аргументы командной строки в одинарные пробелы
  • вариант с echo умеет работать не так, как хочется, если shell не умеет backticks
  • вариант с echo скрывая exit status команды, всегда возвращая exit status самого echo
Здесь echo выступает в роли return (ну или пытается).

#!/usr/bin/env bash

function sum () {
    echo $(( $1 + $2 ))
}

sum 1 2 # 3

var1=$(sum 3 4)
echo $var1 # 7

Эти проекты развиваются паралленьно. Недавно наткнулись на ошибку при обработке файлов, что повторялась и в ffmpeg и в avconf из дистрибутива Убунты 12.10. Установка версии ffmpeg из git проблему решила. Лично для меня, разница между этими проектами неочевидна.
Это чёрный пиар команды libav, которые форкнули ffmpeg, стали делать свою libav, поломали совместимость и написали, что ffmpeg deprecated — авось кто-нибудь и поверит. На самом деле ffmpeg продолжает жить своей жизнью, команды перекидыватся тухлыми помидорами, а у пользователей прибавилось проблем в связи с разрастанием зоопарка… :(
Обычно, вилку (fork!) используют для еды. Но граф Орлов, как говорят злые языки, заколол ею Петра III. Означает ли это, что форки (вилки!) — это не круто? :)
Вполне возможно. Но на данный момент бардак разросся, появились несовместимости, а команды, помимо кидания друг в другм гнилыми помидорами, вводят в заблуждение пользователей (см сообщение про ffmpeg deprecated).
Как обычно, убивает не оружие…
Вы так говорите, будто код ffmpeg — не полное говно, и ему совсем не нужно немного конкуренции, чтобы привести все в порядок.
Эта информация не верна. нужно понимать что произошел внутренний конфликт в команде.
Подробнее читать например здесь.
blog.pkh.me/p/13-the-ffmpeg-libav-situation.html
Обычно не комментирую подобные вещи, но в данной ситуации это плохая практика выдавать желаемое (личные побуждения) за действительное.
Это большая тема для обсуждения, и увы этот конфликт ни к чему хорошему пока не привел. Форкнув ffmpeg, avconv не создали лучший продукт.
3. Порезать видео на картинки

Существует гораздо более частый кейс — вырезать один кадр из видео для создания, например, превью на сайте или в админке.
На последнем проекте использовал такую команду:

ffmpeg -i "file.flv" -f image2 -vframes 1 -ss 00:00:02 "file_out.jpg"


Вырезает первый кадр второй секунды из файла file.flv и сохранить её в файле file_out.jpg.
Как раз вырезать используя ffmpeg не рекомендую. Что бы вырезать кадр на определенной минуте/секунде он не может перейти только на этот кадр и обрабатывает кадры пока не дойдет до нужного "-ss 00:00:02". Если брать первые секунды то это не критично, но все равно лишнее ожидание/нагрузка/использование памяти.
mencoder
Я например из видео делаю анимацию на 5 кадров. Мне нужно делать 5 кадров из разных частей видео. Раньше это делал ffmpeg. Создание такой анимации из фильма занимало более 30ти минут.
А ему можно указать заодно и качество JPEG? А то этот параметр в ffmpeg похоже захардкожен и явно не на высоте. :(
Это будет работать намного быстрее, если -ss переставить в начало:

ffmpeg -ss 00:00:02 -i "file.flv" -f image2 -vframes 1 "file_out.jpg"
Спасибо тебе добрый человек! Ты просто не представляешь как ты меня выручил. Как же я намучался не понимая почему одна картинка может генерироваться иногда целую минуту…
А можно с помощью этой утилиты перекодировать .wmv с кодеком g2m во что-нибудь более распространенное?
Тут ситуция интересная, ffmpeg -codecs|grep -i g2m выдает этот кодек с пометкой "..V...". Это означает, что мы видим видеокодек без поддержки encoding/decoding (что довольно странно). Более того, это единственный кодек в ffmpeg с подобной пометкой! Надо изучать вопрос отдельно.
ffmpeg 2.7.2
ffmpeg -codecs | grep g2m
D.V.L. g2m                  Go2Meeting

G2M4 поддерживается, я проверял.
Для конвертации можно например написать ffmpeg -i input_g2m.wmv output.avi
Если файл «проблемный», можно попробовать конвертировать по частям что получится с помощью -ss 00:01:25 (начало) -t 00:00:40 (продолжительность), а потом с помощью того же ffmpeg слить в один файл.
Опции transpose:
0 — против часовой стрелки и зеркально;
1 — по часовой стрелке;
2 — против часовой стрелки;
3 — по часовой стрелке и зеркально
Это, я так понимаю, не особо поможет с «синдромом вертикального видео», да?
Ну поможет-то поможет, но видео может остаться вытянутым, так что смотря в каких случаях :)
Подскажите пожалуйста насчет конвертации нескольких картинок в видео.

Как составить команду для создания слайдшоу, чтобы картинки сменяли друг друга через каждые n секунд. А то когда я разбирался, так и не понял как это сделать (уже не помню в чем проблема была).
ffmpeg -r 1 -y -i "image_%010d.png" output.mpg

И будет кадр в секунду. Параметр -r указывает нужный frame rate.
А меньше 1 можно? Чтобы допустим одна картинка на 10 секунд.

И еще вопрос: каким получится видео, если картинки имеют разный размер?
Можно ставить дробное: -r 0.1 даст кадр в 10 секунд.
Если размер разный, ffmpeg будет ругаться. Поэтому сначала надо все картинки привести к одному размеру.
А еще вопрос: можно ли можно ли вместо «image_%010d.png» указывать просто несколько картинок?
Просто я сейчас указываю абсолютный путь в таком формате, а у меня ffmpeg пишет ошибку Invalid Argument. И такое впечатление что эта ошибка из-за пробела в абсолютном пути.
Чтобы заставить консольную программу понимать пути с пробелами, можно сделать так:

FILES_PATH=My\ path\ with\ whitespaces
ffmpeg -r 1 -y -i "${FILES_PATH}/image_%010d.png" output.mpg
Вместо флага -b (битрейта) следует использовать: -b:v и -b:a — для видео и аудио соответственно.
а можно с помощью ffmpeg сконверитровать DVD диск в один mpeg файл без пережатия?
только вот -acodec aac не будет работать в большинстве билдов… На данный момент лучше говорить -acodec libvo_aacenc
Склейка 2х и более видео в один.
Если ролики в одинаковых форматах с одинаковыми параметрами:
ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg

Если разные:
ffmpeg -i input1.mp4 -i input2.webm \
-filter_complex '[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a]' \
-map '[v]' -map '[a]' <encoding options> output.mkv
Ещё команды?

Вот вам захват видео с экрана:

ffmpeg -f x11grab -s cif -r 25 -i :0.0+10,20 /tmp/out.mpg

здесь -s cif — размер, 0.0 — экран, 10,20 — это смещение относительно верхнего левого угла экрана

при желании можно и звук, например, с alsa или jack присобачить
Ватермарк:
ffmpeg -i in.mp4 -vfilters "movie=0:gif:logo.gif [logo]; [in][logo] overlay=10:mainH-overlayH-10:1 [out]" out.mp4

Но тут все довольно сложно. Старые версии делали ватермарки через vhook, новые делают через libavfilter. Насколько помню за последний год его то включают то выключают из-за разных багов.
Эх, кто бы подсказал команду:
Перепаковать .mkv в .mp4, причем:
— видео не переконвертировать, только перепаковать
— несколько аудио-дорожек из AC3 5.1 конвертировать в AAC 2.0
— по возможности добавить отдельно лежащий файл субтитров в .srt
Я ниже такой же вопрос написал, не увидел вашего :) Присоединяюсь.

UPD: еще кстати было бы неплохо метаданные вперед помещать, чтобы можно было просматривать недоконверченный файл.
Насчет конвертации без перекодирования видео было же буквально позавчера
habrahabr.ru/post/170557/#comment_5931101

Насчет звука печальнее — 5.1 в 2.0 ffmзeg не умеет пока. Но можно взять только 2 первые дорожки из 5.1 звука с помощью опции
-ac 2
в некоторых билдах ее указывать нужно только после битрейта. Но лучше использовать для этого AviSynth и wavi. Там для доунмикса есть стандартная функция

Предположим у нас есть mkv файл c видео дорожкой и DTS звуком 5.1:
В папкy с mkv копируем wavi.exe, создаем там же файл audio-from-mkv.avs и вписываем в него:
DirectShowSource("file.mkv", video=false)
multi_ch=ConvertAudioToFloat(last)

function stereo_ch(clip a) {
	flr = GetChannel(a, 1, 2)
	fcc = GetChannel(a, 3)
	lfe = GetChannel(a, 4)
	lfc = MixAudio(fcc, lfe, 0.2071, 0.2071)
	mix = MergeChannels(lfc, lfc)
	lrc = MixAudio(flr, mix, 0.2929, 1.0)
	blr = GetChannel(a, 5, 6)
	return MixAudio(lrc, blr, 1.0, 0.2929)
}

stereo_ch(multi_ch)

после этого говорим

wavi "audio-from-mkv.avs" - | "d:\path\ffmpeg.exe" -y -i "file.mkv" -i pipe:0 -map 0:0 -map 1:0 -acodec libvo_aacenc -ab 192000 -vcodec copy -f mp4 result.mp4

в результате в файл result.mp4 запишется первый трек из файла file.mkv (первым треком должно идти видео) и стерео звук сконвертированный из исходного 5.1 и закодированный в mp4 с битрейтом 192к

PS А вообще есть же GUI для ffmpeg? :)
2 первые дорожки из 5.1 на мой взгляд фигня получится.
Я сейчас для этой задачи использую GUI Mkvtoolnix, Subler, Handbrake, возможно ещё что-то, — я в зоопарке инструментов немного путаюсь. Кто-то криво 5.1 в 2.0 перегоняет, кто-то не умеет mkv читать, вот и хочется один волшебный скрипт.
P.S. Мак — не проблема, у меня это дефолтная система.
но через вави и ависинх как раз правильно же получается, а не первые 2 дорожки :)
Да, но это же Windows… :)
Вообще, есть ещё вопросы с несколькими аудио-дорожками и субтитрами, но наверняка они решаемы. Может и заставлю себя для этих целей виртуалку запускать, спасибо.
Я делал так:
1) Извлекаем все дорожки из .mkv
2) Создаем .mp4 из .h264 который мы вытащили из .mkv
3) AC3/DTS/FLAC > pcm -> aac (через fifo), тут зависит от формата, надо каналы мапить правильно итд
4) Все субтитры вытаскиваем, перегоняем в .srt (ибо они в ass/ssa), потом запечатываем в .mp4
5) Накладываем хинт дорожки на звук и видео, чтобы стримить проще было.

Для всего этого у меня был большой perl скрипт который из одного файла делал сразу 3: iPad версия, AppleTV версия и «оригинал» в .mp4.
Я пятый пункт не понял. Это какая-то метаинформация в mp4 для эффективного беспроводного проигрывания видео, например из iTunes на iPad?
Если у вас всю эту магию выполнял всего один скрипт, то это очень интересно. Я в идеале и хочу: сложил файлы в папку, запустил скрипт, через час готовые файлики .mp4.
Да это помогает лучше проигрывать файлы по сети.

Проигрывает один фаил, но надо указывать какая дорожка за, что отвечает и какой кодек используется. И надо следить за процессом, а то бывает все ломается. По какой-то причине, если 3 пунк делать в один проход то получается рассинхрон.
Может пригодится кому. Есть скрипт, который конвертирует звуковую дорожку из формата DTS (который часто присутствует в фильмах, но не может прочитаться современными телевизорами) в АС3 (который скушают телевизоры) — mkvdts2ac3, взять можно по этой ссылке:
github.com/JakeWharton/mkvdts2ac3

Перепаковывется быстро, около 5 минут, телевизоры воспроизводят такой звук без проблем.

4. Конвертировать видео в формат iPod/iPhone

Кто-нибудь может подсказать строчку для конвертации вместе со всеми звуковыми дорогами и субтитрами (по-моему видел такие видеофайлы для iDevice с вшитыми сабами)?
Небольшое уточнение в п.1.
Для получения информации следует использовать
ffprobe video.avi

Так же ffprobe поддерживает несколько форматов для вывода информации ini, json, xml
ffprobe -v 0 video.avi -print_format json -show_format
ffprobe -v 0 video.avi -print_format xml -show_format
ffprobe -v 0 video.avi -print_format ini -show_format
А вот подскажите как конвертировать MPEG 720x576 в AVI DV/PAL? Я даже строчку могу придумать, и даже пытался, но на выходе получил нечто совершенно неудобоваримое, особенно на быстром перемещении.

Почему тот же Canopus Procoder на ура перекодирует на Windows, а вот на Linux какая-то хрень получается?
Если кому-то нужно будет к существующему видеофайлу прицепить дополнительную аудиодорожку (и, возможно выкинуть часть существующих аудиодорожек), то я тут всё расписал (на английском правда): zoid.cc/ffmpeg-audio-video/
Выдираем звук из видео в формате MP4 и сжимаем его в MP3:
$ cat mp4tomp3.sh
#!/bin/sh
for file in "$@" ; do
name=`echo "$file" | sed -e "s/.mp4$//g"`
ffmpeg -i "$file" -ac 2 -f wav - | lame --preset standard - "$name.mp3"
done

Cкрипту года полтора; надо было быстро вынуть звук из видеозаписи мероприятия, сделанной на портативную видеокамеру, раздать его в виде файликов через болванки CD или флешки, в формате, который все могут прослушать, и вот: этот алгоритм спас. Похоже, был единичный случай его применения, но он был весьма полезный и своевременный. Взял вот отсюда, пост от January 26th, 2009, 11:26 PM.
Спасибо, добрый человек! Очень выручил.
Специально залогинился, чтобы сказать это (сорри, кармы не хватает отблагодарить по-другому).

Остаётся добавить, что в официальных репозиториях Ubuntu LTS 14.04 (например), пакет FFmpeg отсутствует. Чтобы установить его (и обновлять в дальнейшем), можно подключить репозиторий, созданный разработчиком Jon Severinsson:

sudo apt-add-repository ppa:jon-severinsson/ffmpeg
sudo apt-get update
sudo apt-get install ffmpeg


Теперь можно запустить наш скрипт:

mp4tomp3.sh *.mp4
Пожалуйста; рад, что мой перепост решает чьи-то проблемы.
По поводу FFmpeg была новость, что оригинальный пакет вернётся в Ubuntu 15.04; но ведь можно (хотя бы ради спортивного интереса)) попробовать его имеющийся в основных репозиториях форк, т.е. libav.
Подскажите, можно ли используя ffmpeg сжать уже готовый gif-анимацию?
Интересно, зачем на последнем пункте стоит ссылка на абсолютно бесполезную страницу? Более того — на ней иногда срабатывает «ахтунг, на Вашем компьютере обнаружены вирусы. Произвожу сканирование...».
Гуру, подскажите пожалуйста.
ffmpeg.exe -f dshow -i video=«Philips SPC 1030NC Webcam» -s 1280x1024 out.mp4
Делает захват в разрешении 640*480 растянутом до 1280*1024, а вот
ffplay.exe -f dshow -i video=«Philips SPC 1030NC Webcam» -s 1280x1024
Захватывает в честном 1280*1024.

От чего так?
Проблема достаточно странная, но обсуждаемая на зарубежных форумах у ffmpeg'а есть конкретное представление о входных параметрах и о параметрах того что должно получиться на выходе. Так, если Вы укажете -s 1280x1024 до -i — тоже получите желаемый результат захвата без растягивания.

т.е.
ffmpeg.exe -f dshow -s 1280x1024 -i video=«Philips SPC 1030NC Webcam» out.mp4
ffmpeg -f video4linux2 -s 1280x1024 -i /dev/video0 out.mp4
Всё бы хорошо, но есть такая плохая тенденция — смена формата параметров командной строки от версии к версии (свободное ПО, что вы хотите), т.о. новичок, желая приобщиться к утилитам такого рода должен мучаться, гугля желаемые параметры, а потом выясняя — чего же этому долбаному ffmpeg-у надо (ведь вывод об ошибках далеко не информативный)…

Своим не-IT-шным друзьям ставлю бесплатный freemake video converter. Жуёт всё во всё. И друзья по пустякам не звонят.
Спасибо за статью, как раз нужны некоторые вещи. Да и в коментах полно полезного материала :)
А вот видел формата 320 на 180 для айдевайсов и псп это как-то сурово. Это даже не 2007 год :)
Захват одного кадра из rtsp потока
./ffmpeg -threads 1 -i rtsp://1.1.1.1:554 -vframes 1 /var/www/test.com/blah.jpg
Гуглил дико пару недель назад: искал, как добавить новую звуковую дорожку к уже существующему ролику, причем сделать это со сдвигом по времени (чуть позже) и понизив громкость оригинальной дорожки. Не раскопал. Подскажите, кто-нибудь? Было бы круто научиться озвучивать ролики без перекодирования.

Ну и сразу вопрос, вот оригинальная дорожка выведена почти в 0dB, новый звук в тоже. Что случится при смешении, звук будет искажен (будет клипиться как в последнем альбоме металлики) или «давайте жить дружно и тише» — сведен и деамплифицирован?
Правильное превращение набора картинок в видео c аудио.

ffmpeg -r a -i "image_%<b>%</b>03d.jpg" -t b -i "audio.mp3" -y -r c "output.mp4"

a — frame rate, количество изображений в секунду. Если это значение < 1, то нужно обязательно указывать -r c, чтобы выходное видео получилось корректным и воспринималось всеми стандартными плеерами.
b — продолжительность звучания аудио. В моем случае указывается продолжительность видео, чтобы аудио не вылезло за границы. Узнать продолжительность можно с помощью ffprobe, а в данном случае она равна n / a, где n — количество входных изображений.
c — frame rate результирующего видео.

Обратите внимание, что в Win системах во всяком случае, входные изображения нужно указывать с двойным процентом. Если аудио не нужно, то соответственно уберите -t b -i «audio.mp3».
Извиняюсь, в теге source по ошибке применено форматирование текста.
Правильная команда выглядит так:

ffmpeg -r a -i "image_%%03d.jpg" -t b -i "audio.mp3" -y -r c "output.mp4"
Также забыл добавить, что frame rate результирующего видео обычно равен 30.

И если нужно сгенерировать таким способом видео из 3 картинок например, то входных картинок должно быть на самом деле 4, где первая и вторая будут повторяться (не знаю почему так, но именно так работает правильно).
А кто знает почему виндовая версия не поддерживает -pattern_type glob (и далее например -i IMG*.jpg)? Каких там библиотек не хватает сигвиновских и компилировал кто-то с поддержкой всего этого?

Кстати добавлю от себя особенность, с которой промучился несколько часов — последовательность файлов должна быть непрерывной, иначе ffmpeg прекращает их добавлять. И еще пару ключиков, которые очень полезные:

-start_number 3378 -i IMG_%d.jpg

-start_number_range 9999 -i IMG_%d.jpg
После долгого копания нашелся способ передать ffmpeg набор файлов с разными именами и за компанию выяснилось что вот такая комбинация НЕ работает — ffmpeg хавает файлы, но на выходе получается только один фрейм с первым, не знаю почему:

ffmpeg -r 1 -i IMG_3378.jpg -i IMG_3380.jpg -i IMG_3382.jpg -c:v mpeg4 -vtag xvid -f avi -y out.avi

а вот такая (конвеер) работает:

type IMG_3378.jpg IMG_3380.jpg IMG_3382.jpg | ffmpeg -r 3 -f image2pipe -r 1 -y -vcodec mjpeg -i — out.avi

и да, файлы должны быть кажется одинаковые по ширине и высоте, т.е. вертикальные и горизонтальные картинки нужно сделать одного размера (напр. 800х800). Я использовал irfan batch converter -> canvas size для пакетной обработки файлов. Хотя, если обработки в bat файле не нужно, можно использовать например ImagesToVideo — обертка вокруг ffmpeg для создания слайдшоу.
Также, хотя и не совсем в тему, хотелось бы упомянуть как зациклить аудио (это может понадобиться для цели, упомянутой в комментарии выше). Это делается с помощью утилиты sox:

sox -e ima-adpcm "input.mp3" "output.mp3" repeat n

n — количество повторов — 1.

А вот так сделать fade аудио:

sox "input.mp3" "output.mp3" fade t a b

a — продолжительность fade in / fade out.
b — секунда, в которой громкость должна уменьшиться до 0. Обычно это конец аудио
Параметр t означает линейную форму затухания. Также есть логарифмическая и другие (можно почитать в доках).
Кстати, может кто-нибудь знает возможно ли с помощью ffmpeg добавить эффекты перехода при генерации видео из набора картинок (fade, pixelate). И если возможно, то как?
>Конвертировать видео в формат iPod/iPhone
>Конвертировать видео в формат PSP

не работают «из коробки»…
Имеется дома камера Canon 1100D, которая пишет видео в формате .MOV с такими параметрами.

video :: MPEG-4 | QuickTime | Advanced Video Codec | Baseline@L5.0 | 26,3 Мбит/сек | 1280x720
audio :: PCM | 768 Кбит/сек | mono | 48,0 КГц | 16 бит

В таком виде хранить домашнее видео накладно, хотелось бы перекодировать покомпактней. Имеется Windows 7, жать собрался в 2 прохода.

ffmpeg -y -i in.mov -c:v libx264 -preset medium -b:v 4500k -pix_fmt yuvj420p -pass 1 -an -f mp4 nul
ffmpeg -y -i in.mov -c:v libx264 -preset medium -b:v 4500k -pix_fmt yuvj420p -pass 2 -c:a libfaac -b:a 256k -f mp4 out.mp4

Хотелось бы спросить советов у сообщества. Обеспечит ли такой подход качественное пережатие или есть более лучшие варианты?
Чем лучше из libfaac, libvo_aacenc, NeroAACCodec жать аудиодорогу? Смотреть ли на альтернативы: avconv, mencoder?
Благодарю за ответы.
лучше всего использовать crf для видео. profile ставьте high. Но надо другие параметры вбить.
aac лучший все же от гугла. Использовать vbr опять же лучше. Если интересно, то пишите в личку, научу.
Я сделяль скрипт!
any2mp3.sh
#!/bin/bash
if [ "$#" -ne 6 ]; then
	echo "Usage: any2mp3.sh [-i|--input] [INPUTPATH] [-e|--ext] [EXTENSION] [-o|--output] [OUTPUTPATH]"
	exit -1
fi
while [[ $# > 1 ]]
do
key="$1"
case $key in
	-i|--input)
	INPUTPATH="$2"
	shift # past argument
	;;
	-e|--ext)
	EXTENSION="$2"
	shift # past argument
	;;
	-o|--output)
	OUTPUTPATH="$2"
	shift # past argument
	;;
	*)
	# unknown option
	;;
esac
shift # past argument or value
done
echo -------------------------------------------------------
echo INPUTPATH  = "${INPUTPATH}"
echo EXTENSION  = "${EXTENSION}"
echo OUTPUTPATH = "${OUTPUTPATH}"
echo -------------------------------------------------------
echo "Number files in INPUTPATH with EXTENSION:" $(ls -1 "${INPUTPATH}"/*."${EXTENSION}" | wc -l)
echo "ffmpeg -i " *.${EXTENSION} "-ar 44100 -ac 2 -aq 0 -f mp3 *.mp3"
echo -------------------------------------------------------
for a in "${INPUTPATH}"/*."${EXTENSION}"; do
	MP3INFULL="${a[@]/%${EXTENSION}/mp3}"
	MP3NAME="$(basename "${MP3INFULL}")"
	MP3OUTFULL="${OUTPUTPATH}"/"${MP3NAME}"
	echo "${a}" "==>" "${MP3OUTFULL}"
done
echo -------------------------------------------------------
read -p "Press any key to continue. Ctrl-C to break... " -n1 -s
echo
for a in "${INPUTPATH}"/*."${EXTENSION}"; do
	MP3INFULL="${a[@]/%${EXTENSION}/mp3}"
	MP3NAME="$(basename "${MP3INFULL}")"
	MP3OUTFULL="${OUTPUTPATH}"/"${MP3NAME}"
	ffmpeg -i "${a}" -ar 44100 -ac 2 -aq 0 -f mp3 "${MP3OUTFULL}"
done

Спасибо большое. Перегнал все stand-up шоу в mp3 чтобы слушать в автомобиле.
Конвертирование видео с несколькими аудиодорожками:

ffmpeg -i input.avi  -map 0:0 -map 0:1 -map 0:2 -vcodec h264 -b:v 800k -acodec:0 copy -acodec:1 copy output.avi
Only those users with full accounts are able to leave comments. Log in, please.