В общем, есть задача нарезать скриншотов с видео файла. Все как бы получилось, но вот проблемка есть с тем, что файлы исходные нужно сохранять в jpeg формате,а я добился только сохранения в ppm. Вот мой код, после инициализации, загрузки кодека и прочей не относящейся к делу лабуды (большая часть кода на основе статьи Martin'a Böhme): //Фреймы AVFrame *pFrame; AVFrame *pFrameRGB; pFrame=avcodec_alloc_frame(); pFrameRGB=avcodec_alloc_frame(); int frameFinished; int numBytes; numBytes = avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,pCodecCtx->height); uint8_t *buffer = new uint8_t[numBytes]; int h = pCodecCtx->height; int w = pCodecCtx->width; // Assign appropriate parts of buffer to image planes in pFrameRGB avpicture_fill((AVPicture *)pFrameRGB, buffer,PIX_FMT_RGB24,pCodecCtx->width, pCodecCtx->height); // Read frames and save first five frames to disk AVPacket packet; i=0; struct SwsContext *img_convert_ctx = NULL; while(av_read_frame(pFormatCtx, &packet)>=0) { // Is this a packet from the video stream? if(packet.stream_index==videoStream) { // Decode video frame avcodec_decode_video(pCodecCtx, pFrame, &frameFinished, packet.data, packet.size); // Did we get a video frame? if(frameFinished) { if(img_convert_ctx == NULL) //Создаем контекст для конвертирования img_convert_ctx = sws_getContext(w, h,pCodecCtx->pix_fmt, w, h,PIX_FMT_RGB24,SWS_BICUBIC, NULL, NULL, NULL); //Конвертируем sws_scale(img_convert_ctx, pFrame->data, pFrame->linesize, 0, h , pFrameRGB->data, pFrameRGB->linesize); // Сохраняем на диск if(++i<=atoi(argv[2])) SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height,i); } } av_free_packet(&packet); } Вот так сохраняю в файл: void SaveFrame(AVFrame *pFrame, int width, int height, int iFrame) { FILE *pFile; char szFilename[32]; int y; // Open file sprintf(szFilename, "frame%d.ppm", iFrame); pFile=fopen(szFilename, "wb"); if(pFile==NULL) return; // Write header fprintf(pFile, "P6\n%d %d\n255\n", width, height); // Write pixel data for(y=0; y<height; y++) fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, width*3, pFile); // Close file fclose(pFile); } Подскажите пожалуйста, как я могу запихнуть данные, которые в pFrame->data[0] не в ppm, а в jpeg формат? Или возможно есть другой способ?
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от mv
Ответ на:
комментарий
от dont
Ответ на:
комментарий
от dont
Ответ на:
комментарий
от dont
Ответ на:
комментарий
от mv
Ответ на:
комментарий
от mv
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум ffmpeg change resolution (2012)
- Форум libav* (2011)
- Форум ffmpeg создание видео (2010)
- Форум YUV -> RGB преобразование кадров (2013)
- Форум Кодирование видео с помощью libav* (2011)
- Форум Си AVFrame + sws_scale + (видимо кривые руки) = segfault (2013)
- Форум ffmpeg library оптимизация декодирование H.264 для встраемых систем (2015)
- Форум Как использовать vdpau в ffmpeg? (2024)
- Форум Как повысить разрешение веб-камеры? (2023)
- Форум libavcodec vorbis encoding (2013)