Заметки с тегом «ffmpeg»

Конвертирование mp4 в GIF

Конвертирование делается одной командой:

ffmpeg -i in.mp4 -filter_complex "[0:v] fps=12,split [a][b];[a] palettegen [p];[b][p] paletteuse" out.gif

В данном случае оптимальная палитра будет вычислена для всех кадров анимации.

Иногда для повышения качества картинки будет полезно вычислять палитру для каждого кадра отдельно:


ffmpeg -i in.mp4 -filter_complex "[0:v] fps=12,split [a][b];[a] palettegen=stats_mode=single [p];[b][p] paletteuse=new=1" out.gif
Оставте свой комментарий

Как удалить мета-данные из m4a

В итернете часто можно найти музыку с пометкой «iTunes Edition». Когда их добавляешь в iTunes, то трек помечется как «купленный» и в информации о треке указан email покупателя. С этим жить можно, но если хочется удалить такую информацию без перекодирования трека, то поможет ffmpeg.

ffmpeg -y -i in.m4a -c:a copy -map a -map_metadata:g -1:g -map_metadata:s:a -1:g out.m4a

Набор этих параметров заставляет ffmpeg копировать аудио-поток из одного файла в другой. Все остальные мета-данные будут удалены.


for file in *.m4a; do ffmpeg -y -i "${file}" -c:a copy -map a -map_metadata:g -1:g -map_metadata:s:a -1:g "_${file}"; done

Эта комбинация команд позволит очистить от мета-данных все m4a файлы в текущей директории.

PS: Восстановить правильные названия треков можно с помощью утилиты MusicBrainz Picard.

Комментарии к заметке: 1

Конвертируем в ProRes с помощью FFmpeg

Когда я столкнулся с необходимостью обработать AVCHD видео , то мне пришлось его конвертировать в mp4. Копирование потоков в новый контейнер без обработки вызывало появление какие-то артефактов. Позже я выяснил, что они возникали только во время воспроизведения полученного видео. Когда оно проходит финальный рендеринг, то артефактов уже нет. Думаю, что на это не стоит полагаться. Ведь не понятно что получится в результате. Получить максимальное качество рабочего материала можно, если сконвертировать его в формат ProRes.

Начиная с версии 0.11 кодеки ProRes включены в стандартную сборку FFmpeg.


ffmpeg -i ~/Desktop/00000.MTS \
    -copyts -acodec copy -vcodec prores -profile 0 \
    ~/Desktop/out.mov

Качество видео, а значит и средний битрейт, регулируется параметром profile. Он может принимать значение от 0 до 3 включительно. Эти значения соответствуют профилям:

  • -profile 0 — Apple ProRes Proxy
  • -profile 1 — Apple ProRes LT
  • -profile 2 — Apple ProRes 422 for SD
  • -profile 3 — Apple ProRes HQ for HD

Ещё у FFmpeg есть альтернативная версия с нужными кодеками – FFMedia Broadcast.

Для сборки ffmbc может понадобится установить yasm, если его ещё нет. Я установил его через Homebrew.

brew install yasm

Затем распаковываем исходники ffmbc, конфигурируем их командой ./configure –enable-gpl, собираем make и инсталлируем sudo make install.

У кодека ProRes есть несколько ключей:

  • -qscale <значение> или -cqp <значение>

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

  • -profile <имя>

    Профиль может принимать одно из значений: proxy, lt, std, hq . Если не задан битрейт, то он выбирается автоматически на основании размера кадра и профиля.

  • -b <битрейт>

    Задает примерное значение постоянного битрейта.

Итак, для перекодирования исходного видео в ProRes нужно выполнить команду:


ffmbc -i ~/Desktop/00000.MTS \
    -copyts -acodec copy -vcodec prores -profile std \
    ~/Desktop/out.mov
Оставте свой комментарий

Конвертируем AVCHD для последующей обработки

Как-то, по не знанию, я скопировал AVCHD потоки без сопутствующих файлов и думал, что позже я смонтирую это видео. Они прекрасно проигрывались плеерами, но упорно не желали импортироваться в видео-редакторы.

Первое что пришло мне в голову – это пересобрать видео- и аудио-потоки в другой контейнер без перекодировки. Эксперимент закончился неудачей – полученные файлы (а были перепробованы и avi, и mpeg, и mov контейнеры) опять нормально воспроизводились, но либо не импортировались в редактор, либо видео оказывалось местами испорченное.

Тогда я решил полностью перекодировать файл с максимально возможным качеством.


ffmpeg -i 00001.MTS -copyts \
    -acodec libfaac -ar 48000 -ab 256k \
    -vcodec libx264 -crf 15 -coder 0 \
    -filter:v yadif,scale=1280:720 -r 25 \
    output.mp4

Поясню параметры, которые тут использовались:

  • copyts – копирует временные метки и нужен для правильной синхронизации видео и звука;
  • cfr – задает качество при однопроходном кодировании (меньше – лучше качество);
  • coder 0 – отключаем CABAC так как не требуется оптимальный битрейт.

А раз происходит полная перекодировка, то я решил сразу деинтерлейсить видео и немного уменьшить размеры картинки.

Полезная документация:

PS. Собрать свежую стабильную версию FFmpeg всегда можно с помощью Homebrew

brew install ffmpeg
Комментарии к заметке: 3

Ускоряем кодеки для просмотра FullHD

Мой старенький Mac mini (1.66ГГц Intel Core Duo) всегда тормозил при воспроизведении FullHD фильмов. Максимум на что его хватало — это фильмы с разрешением 720p. Из-за особенностей большинства плееров и кодеков, используемых в них, для декодирования задействовалось только одно ядро процессора.

У проекта FFmpeg есть многопоточная версия FFmpeg-mt, которую можно и нужно использовать, например, в MPlayer для того, чтобы загрузить процессор работой по максимуму.

Итак, прежде чем приступить к сборке, нам понадобятся несколько инструментов:

  • Apple Developer Tools (так же есть на любом DVD с Mac OS X)
  • Subversion (консольная версия есть в комплекте Apple Developer Tools)
  • Git

Всю сборку я буду проводить на рабочем столе.

cd ~/Desktop/

Загружаем исходники MPlayer из репозитория.

svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer

Загружаем исходники FFmpeg-mt.

git clone http://git.gitorious.org/ffmpeg/ffmpeg-mt.git

Теперь, чтобы использовать библиотеки FFmpeg-mt, заменим три папки libavcodec, libavformat и libavutil в исходниках MPlayer.


cd mplayer
rm -rf libavcodec libavformat libavutil
cp -R ../ffmpeg-mt/libavcodec .
cp -R ../ffmpeg-mt/libavformat .
cp -R ../ffmpeg-mt/libavutil .

Можно приступать к конфигурации и сборке проекта.

./configure --enable-menu --enable-apple-remote
make
sudo make install

Осталось сделать несколько косметических манипуляций. Нужно указать какой шрифт использовать для OSD и субтитров.


ln -s /Library/Fonts/Arial\ Unicode.ttf ~/.mplayer/subfont.ttf

Так же нужно немного отредактировать конфигурационный файл.


nano ~/.mplayer/config

В файле набираем:

lavdopts=threads=2:skiploopfilter=all
vf=yuy2
fs=yes

Эти настройки декодера предписывают ему использовать два потока и пропустить некоторые процедуры улучшения картинки. Так же для меня было оптимально использовать принудительную конвертацию видео в YUY2, что дает не большой прирост в скорости.

В целом обновленная версия показала прирост в производительности на 60% в сравнении с однопоточным декодером.

Обновление : отличный GUI MPlayer OSX Extended уже содержит сборку mplayer с многопоточным декодированием.

Комментарии к заметке: 1