FFmpeg Как записать видео в файл - PullRequest
13 голосов
/ 24 февраля 2011

То, что я хочу, это

 1. Get video packet from stream source
 2. Decode it
 3. And write  that decoded data as video file(avi, mpeg etc)

Я могу получать пакеты видео из файла (как AVPacket), а также декодировать и сохранять как изображение. (Raw) (учебники FFmpeg показывают, как это сделать).Это). Но я не могу (не знаю) записать эти видеоданные в файл (другой), который может воспроизводиться медиаплеерами (такими как VLC).

С наилучшими пожеланиями

Ps: реальные примеры кода будут хороши, если это возможно ...

Теперь я делаю тест с av_interleaved_write , но я получил странную ошибку "немонотонные временные метки" (у меня нет контроля над pts-значениями медиа источника)

Некоторая дополнительная информация

В FFmpeg мне нужно

  1. Чтение медиа-пакетов изисточник мультимедиа (это может быть реальный файл (.avi, mov) или даже сервер rtsp).
  2. Затем запишите эти пакеты мультимедиа в реальный файл (физический файл .avi, .mov и т. д.)

Мне нужен читатель и писатель.Я могу прочитать исходный файл мультимедиа (даже кодировать пакеты в соответствии с заданным форматом).Но я не могу записать в файл ... (который может проигрывать любой плеер)

И какой-нибудь псевдокод

File myFile("MyTestFile.avi");

while ( source ->hasVideoPackets)
{
     packet = source->GetNextVideoPacket();
     Frame decodedFrame = Decode(packet);
     VideoPacket encodedPacket = Encode( decodedFrame);
     myFile.WriteFile(encodedPacket);
 }

Или просто записать оригинальный файл без кодирования, декодировать

     File myFile("MyTestFile.avi");

     while ( source ->hasVideoPackets)
     {
         packet = source->GetNextVideoPacket();
         myFile.WriteFile(packet);
     }

Тогда

I can able to open MyTest.avi file with a player.

Ответы [ 3 ]

2 голосов
/ 02 декабря 2014

Теперь есть новый пример транскодирования видео в doc / examples / transcoding.c транка FFmpeg, и он делает именно то, что вам нужно: Пример API для демультиплексирования, декодирования, фильтрации, кодирования и мультиплексирование.

Это для текущего ffmpeg 2.4.4

0 голосов
/ 24 февраля 2011

вам нужно написать кодировщик для преобразования необработанных данных в требуемый формат видео

Требуется образец кодирования ffmpeg?

Кодирование аудио в aac с помощью libavcodec

0 голосов
/ 24 февраля 2011

В какой-то момент я сделал что-то подобное, используя libx264 и vorbis.

Пример кода.https://github.com/Themaister/SSNES/blob/master/record/ffemu.c

Основная идея заключается в том, что вы должны сами устанавливать временные метки в AVFrame, когда хотите их кодировать.Затем вы можете взять этот пакет и записать его с av_interleaved_write().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...