to post messages and comments.

github.com

Такое. Красивый и удобный лисповый интерфейс к библиотекам FFmpeg. В процессе, но кое-что работает уже. Пока не хватает swresample и swscale, но скоро будет. Также, потом отдельной asdf-системой будет postroc, т.к. она загплена.

Еще с документацией пока проблемы, как впрочем и у самого ffmpeg.

Тестируется все на винде, под FFmpeg 3.2.4, собранный мной лично:
static.lovesan.ru

Но, в принципе, ничто не мешает работать и с линуксом, надеюсь я там правильные имена файлов so-шек вписал, в src/lib.lisp

В README.md там пример, типа, берем, и конвертируем любое медиа, поддерживаемое FFmpeg, и у которого есть звуковой поток, в mp3-файл.

Вроде как libav лучше ffmpeg, но применительно к youtube-dl это уже стало сильно не так. Ни обложку в mp3 вложить, ни hls скачать. Что-то там в синтаксисе командной строки капитально разъехалось.

Случилось чудо. Не прошло и полгода, как мне наконец удалось собрать ffmpeg под win64 со всеми зависимостями, кроме GPL-нутых, проприетарных, и сломанных. Т.е. с LPGL-v3 лицензией.

Собрать в .dll, но притом все зависимости в него вконпилены статически, чтобы сразу было готово к использованию.

Кроме того, билд даже немного круче официального — там в частности поддерживается ускорение с помощью DirectX 11.

Вот полный дистрибутив, лицензии там тоже есть. Ну и README.

static.lovesan.ru

А вот типа пример, как с помощью нехитрых приспособлений(типа, еще с SDL2), libav* можно превратить в аудио/видео плеер:

gist.github.com

Значит такое.
Мне на следующем проекте надо будет работать с мультимедиа и стримингом.
Что я первым делом подумал — а, подумал, наверное, это всё хуйня, все давно решено, особенно в опенсорсе.
Хуй там плавал. И давайте не будем вспоминать грустные вещи про RTSP и про цены на Erlyvideo, давайте начнем с базы.

База это транскодинг и проигрывание. Особенно на винде. Что я сразу подумал? Я подумал, а, говно вопрос — FFmpeg же есть.
Вопрос, действительно оказался говно, и это мягко сказано. Собственно, ключевая мультимедиа-библиотека всего опенсорса — это сраный треш.

Мне стоило две недели, чтобы разобраться и написать нижеследующую простенькую программку, которая умеет играть музыку и показывать видео:
gist.github.com
Код тут говно, и кое-где есть мемори-лик, плюс он почему-то не совсем умеет проигрывать Mp3, но тем не менее.

Что я узнал:
1) Ни один из туториалов в сети не является валидным.
2) Половина API задепрекейчено, и собственно, не особо работает.
3) Breaking changes в нем случаются где-то каждую минорную версию.
4) Вся документация — сигнатуры функций, автоматически сгенеренные из сорцов.
5) На тему работы и интеропа с SDL2 вообще нет ничего.
6) Под винду все еще хуже чем кажется.

Это ёбаный пиздец. И это, повторяюсь, ключевой опенсорсный набор библиотек для мультимедиа! Сраный треш.

братиша один закомитил в мастер ffmpeg cuvid декодер, поглядел я на код, думаю мож братиша крут, собрал, стимульнул — Segmentation fault, ну блять ок. может на районе спецы, отчего их декодера таймштампы вразжопицу, почему из любого железного урода таймштампы всегда вразжопицу, это так сложно сделать заебись

малой приказал скинуть тоторо ему на флешку, чтобы смотреть на телеке. проблема в том, что русская дорожка идёт отдельным файлом. вот я и думаю, что быстрее? разобраться, как перекроить эту хрень ffmpeg-ом, или выкачать готовый mp4?

Вот у мужика ровно та же проблема. ffmpeg.org
И ведь с 2012 года проблема не решена. При этом они такие постоянно предлагают обновиться. По-моему, это буйня какая-то. Ну, не хранить же мне анимации на часы? А если поток будет длиться несколько суток? Что тогда? Дерьмо какое-то.
Может я что-то делаю не так? Есть у кого-нибудь решение этой проблемы? Или какой хак?

Товарищи! Имею крайне сложный вопрос.
Вот есть у меня debian 7.5, а на него и репов установленный ffmpeg. И вот хочу я добавить туда анимацию свою поверх видео и делаю так:
ffmpeg -i simple.mp4 -i /home/andrei/Загрузки/tmp/%d.gif -loop 0 -filter_comple…
…x overlay -shortest testvid.mp4
Но вот анимация отыгрывает первый цикл и во второй не идёт. А вот как сделать чтобы шло?
ffmpeg, соответственно, в репах собран со следующими параметрами:
ffmpeg version 1.0.10 Copyright (c) 2000-2014 the FFmpeg developers
built on Jul 25 2014 07:50:40 with gcc 4.7 (Debian 4.7.2-5)
configuration: --prefix=/usr --extra-cflags='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security ' --extra-ldflags='-Wl,-z,relro' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-nonfree --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree --disable-stripping --enable-libvpx --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-librtmp --enable-avfilter --enable-libfreetype --enable-libvo-aacenc --disable-decoder=amrnb --enable-libvo-amrwbenc --enable-libaacplus --libdir=/usr/lib/x86_64-linux-gnu --disable-vda --enable-libbluray --enable-libcdio --enable-gnutls --enable-frei0r --enable-openssl --enable-libass --enable-libopus --enable-fontconfig --enable-libfdk-aac --enable-libdc1394 --disable-altivec --dis libavutil 51. 73.101 / 51. 73.101
libavcodec 54. 59.100 / 54. 59.100
libavformat 54. 29.104 / 54. 29.104
libavdevice 54. 2.101 / 54. 2.101
libavfilter 3. 17.100 / 3. 17.100
libswscale 2. 1.101 / 2. 1.101
libswresample 0. 15.100 / 0. 15.100
libpostproc 52. 0.100 / 52. 0.100
Что делать, чтобы добиться желаемого?

Короче, я таки написал правильное заклинание для ffmpeg, которое накладывает картинку/видос в центр другой картинки/видоса, масштабируя ее при необходимости с соблюдением aspect ratio. Схороняю сюда, т.к. sharing is caring.

backImgW=123
backImgH=456

ffmpeg -i 1.png -i 2.png -filter_complex "[1:v]scale=w='if(lt($backImgW,in_w), if(gte($backImgH, $backImgW/a),$backImgW,-1), if(lt($backImgH,in_h), if(gte($backImgW, $backImgH*a), -1, $backImgW), -1))':h='if(lt($backImgW,in_w), if(gte($backImgH, $backImgW/a),-1,$backImgH), if(lt($backImgH,in_h), if(gte($backImgW, $backImgH*a), $backImgH, -1), -1))'[top];[0:v][top]overlay=main_w/2-overlay_w/2:main_h/2-overlay_h/2" out.png

Немного причесал скрит отстройки FFMPEG под дроида:
— убрал мелкие косяки и ошибки в скрипте (типа поломанного билда для armeabi-v7a и копирования отстроенных файлов)
— добавил распараллеливание билда
— обновил версию отстраевомого FFPEG до 2.1.1 (с 2.0.2)

URL: github.com

зафигачил на андроид свеженькое ffmpeg 2.0.2 (ну ну совсем, 2.1 на дворе), портировал своё AvCpp на C++11 (громко сказано: просто не хотелось тянуть буст для mutex и shared_ptr) и тоже зафигачил на андроид. Тестовое приложение берёт оверлей текстового бокса, добавляет в список кадров, а потом из этого генерируется ролик. Говнопортянка получилась знатная (познакомился с ndk/sdk в понедельник этой недели, своего дроидного аппарата нет и не было, но судьба :) ). Так же самого затошнило от своей же библиотеки (AvCpp — C++ враппер для ffmpeg), нужно допиливать и улучшать, но при использовании всё равно меньше кода получается.

Кому нужны сборки для armeabi-v7a+neon (ffmpeg — статика + динамика, консольных утилит нет, avcpp — статика), обращайтесь. Скриптом для сборки ffmpeg поделюсь позже, может даже вместе со сборками для armeabi, mips, x86. Плюс заобновлю github.

PS всё это делалось на EeePC 1000HA. Я чуть не повесился. Недождусь когда дойдёт нафаршированный Lenovo ThinkPad T530.

*avconv привет, чят. Вот у h264 есть разные профили для кодирования видео, среди прочего позволяющие управлять скоростью кодирования (быстро, но с худшим качеством <--> медленно, но с лучшим качеством) в достаточно широком диапозоне. Вопрос: есть ли подобное для Theora? Гугление ничего не дало (возможно гуглил не по тем словам). О параметре -qscale:v знаю, но он не оказывает серьезного влияния на скорость кодирования, только на размеры/качество картинки результирующего ролика.

Есть идеи?

бэкпортнул поддержку выхлопа в JSON в avprobe для wheezy/jessie. По-умолчанию продолжает использоваться старый формат (sic!), json/ini можно врубить через опцию -of (как в ветке 9.х самого libav). Пакеты будут в репе через часок, берите кому надо.

ffmpeg version 0.8.6-6:0.8.6-1+rpi1, Copyright (c) 2000-2013 the Libav developers
built on Mar 31 2013 13:58:10 with gcc 4.6.3
** THIS PROGRAM IS DEPRECATED **
This program is only provided for compatibility and will be removed in a future release

Посоны, поясните по-хардкору, как вытащить значение continuity counter из структуры AVPacket? Если просто вытаскивать из data по битовым смещениям, то:
а) Находит много sync байтов
б) Из них ни одного нужного

Для заметки:
 Конвертировать видео в формат iPod/iPhone
ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4
Пояснения:

Источник: source_video.avi
Аудио кодек: aac
Битрейт аудио: 128kb/s
Видео кодек: mpeg4
Битрейт видео: 1200kb/s
Размер видео: 320 на 180 пикселей
Полученное видео: final_video.mp4

Остальное тут — habrahabr.ru — "19 команд ffmpeg для любых нужд".

Вот точно помню что с версии 0.9 ffmpeg стал нормально работать с 10 битным видео без цветных квадратиков. Так почему когда собираю 1.0 для mx player он показывает с квадратиками( печаль печаль

как научить ффмпег быстро делать видео из одной фотки и мп3? сейчас делаю так:
ffmpeg -i file.mp3 -loop 1 -i file.jpg -acodec copy -shortest outfile.ext
пробовал разные видеокодеки и настройки, конвертирование очень медленное

Третий вечер не могу нагуглить...
Есть .vob файл (ну и оригинальный DVD тоже) на 53 чаптера. Хочу это разбить на 53 .mpg файла.
mencoder это сделал, но звук уехал.
Чтобы сделать это в ffmpeg нужно знать время начала чаптеров. Как?
И вообще, похоже это можно тупым dd сделать, если знать, где резать.
Не могу найти готового скрипта. Неужто DVD так устарел?

вот думаю и хочу по старой доброй традиции собрать вручную все эти зависимости и саму либу с оптимизациями, а то больно кажется что гдето тут меня обманывают

Исходник 56мб

Идеальное качество 24мб
ffmpeg -i input.ogv -vcodec libx264 -ac 1 -r 10 -fpre /usr/share/ffmpeg/libx264-lossless_slower.ffpreset output.mp4

ОТличное качество 14мб
ffmpeg -i input.ogv -vcodec libx264 -ac 1 -r 10 output.mp4

Убил кучу времени пытаясь определить в чём засада: ffmpeg упорно не хотел кодировать видео кодеком libx264, говорил что Unknown coder 'libx264'. Оказалось что необходимо установить пакет libavcodec-extra-53

Для того чтобы добавить комментарии к видео с помощью ffmpeg надо выполнить такую команду:
ffmpeg -i inputfile.avi -vcodec copy -acodec copy -metadata comment="Комментарии к видео" outputfile.avi