LINUX.ORG.RU

[FFMPEG]мануалов не существует?

 


0

0

Всем привет!

Как я понял, человеческого описания работы с ffmpeg не существует? Приходится читать доки нагенеренные доксидженом и разнообразные форумы, чтобы «догадаться» что за чем вызывать и какие параметры ставить руками. Например, мне нужно кодировать поток в flv:

  AVCodec* flvCodec = avcodec_find_encoder_by_name( "flv" );
  if( flvCodec == NULL )
  {
    cerr << "flv codec not found" << endl;
  }
  AVCodecContext* flvCodecCtx = avcodec_alloc_context();
  if( flvCodecCtx == NULL )
  {
    cerr << "flv codec ctx not alloc" << endl;
  }

  //вот тут нужно сделать "непонятное".
  flvCodecCtx->pix_fmt = PIX_FMT_YUV420P;

  //А непонятно оно потому, что "Initializes the AVCodecContext to use the given AVCodec".
  if( 0 != avcodec_open(flvCodecCtx, flvCodec) )
  {
    cerr << "flv codec not open" << endl;
  }

Или вот дальше делаю avcodec_encode_video(). А потом, я так понял, нужно хидеры flv'шные самому приклеить к этому буферу.

Собсна, вопрос в том, может, кто-нибудь натыкался на подробное описание работы с ffmpeg, где рассказано как читать/писать потоковое видео, какие преобразования нужно делать, а чего делать не следует?

UPD: Может, альтернативы какие существуют? Пусть даже обертки для ffmpeg, но с нормальным описанием?

★★

Последнее исправление: kulti (всего исправлений: 1)

AFAIK «FFMPEG для чайников», «FFMPEG для полных идиотов» и «FFMPEG в комиксах за 10 минут» не существует

Led ★★★☆☆
()

//вот тут нужно сделать «непонятное».

flvCodecCtx->pix_fmt = PIX_FMT_YUV420P;

Это внутренний формат, с которым все кишки работают.

Или вот дальше делаю avcodec_encode_video(). А потом, я так понял, нужно хидеры flv'шные самому приклеить к этому буферу.

Нет.

UPD: Может, альтернативы какие существуют? Пусть даже обертки для ffmpeg, но с нормальным описанием?

gstreamer.

mv ★★★★★
()
Ответ на: комментарий от Led

Я смотрю вы сегодня «добрый» очень. Причин искать не будем, меня другое беспокоит: почему для такой распространненой либы нет даже минимального (и актуального!) how-to. На сайте есть пара примеров, но они уже устарели: что-то deprecated, что-то obsolete, что-то по указателю хранится, а не по значению.

PS. Свою-то задачу я решил, со скрипом, но разобрался. Мне за «державу» обидно.

kulti ★★
() автор топика
Ответ на: комментарий от mv

> Это внутренний формат, с которым все кишки работают

И? Я потому и «негодую», что приходится самому внутреннее представление настраивать, когда он мог сам выставить дефолтное значение.

Или вот дальше делаю avcodec_encode_video(). А потом, я так понял, нужно хидеры flv'шные самому приклеить к этому буферу.

Нет.

А как тогда? Вот нарыл какие-то функции av_write_frame() и av_write_header(), но пока еще не щупал. Пока просто через ofstream сам файл пишу.

gstreamer

Спасибо, почитаю

kulti ★★
() автор топика
Ответ на: комментарий от kulti

Там концептуально ничего не изменилось.

Вообще, это же opensource, исходники доступны для изучения. Наслаждайся :)

mv ★★★★★
()
Ответ на: комментарий от mv

Да, замечательная концепция получается: «Вот наши исходники, мы даже комментарии написали, местами для мебели, конечно, но вы уж как-нибудь разберетесь». Чтобы сделать обычный транскод, я потратил почти два рабочих дня, т.к. пример безнадежно устарел и нужно откапывать новые функции, делать нетривиальные действия с полями структур etc... Хотя получение результата в таком случае - это, конечно, наслаждение =)

kulti ★★
() автор топика
Ответ на: комментарий от kulti

Документацию никому писать неинтересно ;)

mv ★★★★★
()

>>UPD: Может, альтернативы какие существуют? Пусть даже обертки для ffmpeg, но с нормальным описанием?

Используй GStreamer и не мучайся, там есть элемент, который как раз работает через ffmpeg. Доки хорошие есть на сайте.

MuZHiK-2 ★★★★
()
Ответ на: комментарий от Pantserovik

Ага, мысля такая уже проскочила, но как заметил mv «Документацию никому писать неинтересно ;)» Да и недостаточно я хорошо в нем пока разобрался, чтобы кого-то учить. Хотя все равно для себя буду «записку» делать, может, что и выйдет путное =)

kulti ★★
() автор топика
Ответ на: комментарий от MuZHiK-2

Почитал немного. Сразу настораживает GObject (конкретно с ним дела не имел, но три года работы с фреймворком, реализующем объектную модель на С имеется. Извращение, имхо). И вопрос такой появился: развесистая система плагинов - это конечно хорошо, но мне бы хотелось все нужное статично вкомпилить, а потом strip'нуть ненужное. С ним так можно? Или придется тащить все «необходимые» *.so?

kulti ★★
() автор топика
Ответ на: комментарий от kulti

Документацию никому писать неинтересно - типичная отмазка программеров. Программа с доками, это как правило продукт, а без- просто программа, хотя да, тут ffmpeg исключение, но просто потому что альтернатив не густо

Pantserovik
()
Ответ на: комментарий от kulti

>>Почитал немного. Сразу настораживает GObject (конкретно с ним дела не имел, но три года работы с фреймворком, реализующем объектную модель на С имеется. Извращение, имхо)

Я привык достаточно быстро, особых сложностей не испытал.

И вопрос такой появился: развесистая система плагинов - это конечно хорошо, но мне бы хотелось все нужное статично вкомпилить, а потом strip'нуть ненужное. С ним так можно? Или придется тащить все «необходимые» *.so?

Можно скомпилить статически. В мануале есть глава с примером, называется «Embedding static elements in your application».

MuZHiK-2 ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.