LINUX.ORG.RU

Сообщения Knopka

 

FFmpeg работа с аудио

Переписываю один видео файл в другой. Сначала разобралась с видео, сейчас пытаюсь переписать аудио. После создания в новом файле аудио потока, прога стала вылетать на av_interleaved_write_frame(). С аудио ничего не делаю, просто создаю новий стрим, а в конце закрываю. В чем может быть проблема?

Knopka
()

ffmpeg change resolution

Изменения резолюшин видео c помощю sws_getContext:

	
pFrameOut = avcodec_alloc_frame();
if( pFrameOut == NULL )
{
	LOGI(1, "naInitFile::Could not Allocate an AVFrame structure");
	return ;
}
avpicture_fill((AVPicture *)pFrameOut, video_outbuf, PIX_FMT_YUV420P, video_width_out, video_height_out );
int i = 0;
int out_size = 0;
int retval = 0;
int frameFinished = 0; 
AVPacket packet;
av_init_packet( &packet );
	
while( av_read_frame( pFormatCtx, &packet ) >= 0 ) 
{
	if( packet.stream_index == NumberVideoStream ) 
	{ 			
		avcodec_decode_video2( pCodecCtx, pFrame, &frameFinished, &packet );
				 
		if(frameFinished)  // Did we get a video frame?
		{
			
			static struct SwsContext *img_convert_ctx_in = NULL;
			if (img_convert_ctx_in == NULL)
			{
				img_convert_ctx_in =sws_getContext( pCodecCtx->width, pCodecCtx->height, pCodecCtx->pix_fmt,video_width_out, video_height_out, PIX_FMT_YUV420P, SWS_BICUBIC,NULL, NULL, NULL );
					
					
				if (img_convert_ctx_in == NULL)
				{
					LOGI(10,"naInitFile::Could no create Software Scale Context");
					return ;
				}
			}
				
			retval = sws_scale(img_convert_ctx_in, pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pFrameOut->data, pFrameOut->linesize);
				
			//SaveImage(pFrameOut->data[0], pFrameOut->linesize[0], i);
			SaveVideoFrame();
			i++;
		}//end  if(frameFinished)
				  
	}
}
После чего видео проигрывается в 2 раза быстрее. В чём может быть проблема?

Knopka
()

Encoding video

Почему нельзя одновременно открыть кодер и декодер для одного видео файла?

Knopka
()

Литература по ffmpeg

Что почитать что бы понять как работать с видео? Смотрела исходники ffmpeg, пару статтей с примерами типа «как написать свой проигрователь» и т.д., но особого понимания нету.
Сейчас пытаюсь понять как изменить резолюшын в файле, вернее как это закодить (что видео надо открить найти стрим, читать фрейм, роздекодить его, ресайзнуть, заенкодить и записать мне понятно).
Чаще всего проблемы с пониманием параметров функций, например:

sws_getCachedContext (struct SwsContext *context, int srcW, int srcH, enum PixelFormat srcFormat, int dstW, int dstH, enum PixelFormat dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param)

Какой флаг выбирать и почему?
Я уже перерыла все просторы нета, но чего-то стоящего не нашла.
Поделитесь опытом как и где набатся знаний в этой области?

Knopka
()

ffmpeg: av_guess_format всегда возвращает null

Пытаюсь работать с libavcodec и libavformat (смотрела исходники ffmpeg и примеры на разных сайтах) все просто но при попытках использовать примеры функция av_guess_format(NULL, filename, NULL) всегда возвращает null:

char *filename=«/mnt/sdcard/DCIM/OUT.mp4»;

// Allocate output format context
AVFormatContext *out;
out = avformat_alloc_context();
out->oformat = av_guess_format(NULL, filename, NULL);
if (out->oformat == NULL)
{
out->oformat = av_guess_format(«mpeg», NULL, NULL);
if (out->oformat == NULL)
{
LOGI(1, «Could not guess output format\n»);
exit(1);
}
}
Насколько я понимаю проблема в подключении decoder и encoder в конфигфайле:

--enable-demuxer=mov \
--enable-demuxer=h264 \
--enable-muxer=mov \
--enable-muxer=h264 \
--disable-ffplay \
--enable-protocol=file \
--enable-avformat \
--enable-avcodec \
--enable-decoder=rawvideo \
--enable-decoder=mjpeg \
--enable-decoder=h263 \
--enable-decoder=mpeg4 \
--enable-decoder=h264 \
--enable-decoder=mpeg \
--enable-encoder=rawvideo \
--enable-encoder=mjpeg \
--enable-encoder=h263 \
--enable-encoder=mpeg4 \
--enable-encoder=h264 \
--enable-encoder=mpeg \
--enable-parser=h264 \
--disable-network \
--enable-zlib \
--disable-avfilter \
--disable-avdevice \

Что я прописываю не правильно или здесь проблема совсем в инном месте?

Knopka
()

RSS подписка на новые темы