#c #video
#c #Видео
Вопрос:
Есть ли какая-нибудь простая и небольшая библиотека или пример кода для записи несжатых видеофайлов avi на c ?
Каждый ресурс, который я нахожу, использует video для Windows, и мне нужно, чтобы это было переносимым.
Я попытался просмотреть документацию по контейнеру AVI, но она выглядит действительно громоздкой.
Ответ №1:
Я не делал этого сам, но я предлагаю использовать libavformat
, часть ffmpeg
(LGPLv2.1 / GPLv2 ).
Ответ №2:
Если вам нужно что-то очень простое, запишите BMP на диск в виде пронумерованной последовательности, затем вызовите ffmpeg
via system()
или что-то подобное, подобное этому:
ffmpeg -i picture_%04d.bmp -r 15 -vcodec rawvideo -y output.avi
Примечание: -r
аргумент указывает частоту кадров, которую вы хотите, чтобы конечный фильм был.
Вы могли бы добиться того же результата, вызвав библиотеки libavformat / libavcodec, на которых основан ffmpeg, но это может не соответствовать вашим требованиям «small» и «simple».
Комментарии:
1. С точки зрения производительности это приводит к огромным потерям из-за необходимости чтения / записи файлов. В типичных приложениях файловый ввод-вывод перевешивает стоимость любой алгоритмической обработки.
Ответ №3:
Всегда есть OpenCV, который является мультиплатформенным и в который относительно легко вставлять данные.
ИЛИ — вы всегда можете передать видеоданные в другой исполняемый файл.
Например, в unix вы можете сделать:
В вашей программе:
char myimage[640*480*4];
// read data into myimage
fputs(myimage,1,640*480*4,stdout);
И в сценарии, который запускает вашу программу:
./myprogram |
mencoder /dev/stdin -demuxer rawvideo -rawvideo w=640:h=480:fps=30:format=rgba
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=9000000
-oac copy -o output.avi
(Обратите внимание, что это действительно сжимает видео — несжатое — это просто вопрос изменения командной строки mencoder)
Я полагаю, вы также можете использовать ffmpeg таким образом или x264. Вы также можете запустить кодировщик из своей программы и выполнить запись в канал (что делает весь процесс таким же простым, как если бы вы использовали библиотеку) — и это должно работать на Windows, Linux или Mac (с небольшими изменениями в командной строке mencoder).
Очевидно, что проблем с лицензированием также нет (кроме распространения исполняемого файла mencoder), поскольку вы не ссылаетесь на какой-либо код или ничего не компилируете.
Хотя это не совсем то, что вы хотите, у него есть то преимущество, что для кодирования автоматически будет использоваться второй процессор.