
Advanced search
Other articles (51)
-
Mise à jour de la version 0.1 vers 0.2
24 June 2013, byExplications des différents changements notables lors du passage de la version 0.1 de MediaSPIP à la version 0.3. Quelles sont les nouveautés
Au niveau des dépendances logicielles Utilisation des dernières versions de FFMpeg (>= v1.2.1); Installation des dépendances pour Smush; Installation de MediaInfo et FFprobe pour la récupération des métadonnées; On n’utilise plus ffmpeg2theora; On n’installe plus flvtool2 au profit de flvtool++; On n’installe plus ffmpeg-php qui n’est plus maintenu au profit de (...) -
Personnaliser en ajoutant son logo, sa bannière ou son image de fond
5 September 2013, byCertains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo; l’ajout d’une bannière l’ajout d’une image de fond;
-
Ecrire une actualité
21 June 2013, byPrésentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
Vous pouvez personnaliser le formulaire de création d’une actualité.
Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)
On other websites (7466)
-
capture my webcam and encode to mp4 with ffmpeg, but the x264 works bad
17 September 2015, by zhangxm1991here is my version:
ffmpeg version: 2.3.3
libx264 version:142.xI wat to capture my video and use ffmpeg and x264 to a mp4 file. the solution is 320x240.
But i found that the video file is so big. Then i found that the P frame and B frame is very big, even nearly equal to the I frame.I do not know why.here is my code:
c->codec_id = codec_id;
c->bit_rate = 400000;
c->width = 320;
c->height = 240;
c->time_base.den = 10;
c->time_base.num = 1;
c->pix_fmt = AV_PIX_FMT_YUV420P;Here is my program output:
[libx264 @ 0xb6200fc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0xb6200fc0] profile High, level 1.3
[libx264 @ 0xb6200fc0] 264 - core 142 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=10 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=400 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to '/home/2014_09_12/0002b6429579/5/2014_09_12_18_39_12_600.mp4':
Stream #0:0: Video: h264 (libx264), yuv420p, 320x240, q=-1--1, 400 kb/s, 10 tbc
Stream #0:1: Audio: aac, 8000 Hz, mono, fltp, 32 kb/s
[mp4 @ 0xb62005e0] Using AVStream.codec.time_base as a timebase hint to the muxer is deprecated. Set AVStream.time_base instead.
[mp4 @ 0xb62005e0] Using AVStream.codec.time_base as a timebase hint to the muxer is deprecated. Set AVStream.time_base instead.
[mp4 @ 0xb62005e0] Encoder did not produce proper pts, making some up.
[libx264 @ 0xb6200fc0] frame I:3 Avg QP: 2.79 size: 72996
[libx264 @ 0xb6200fc0] frame P:383 Avg QP: 0.14 size: 54075
[libx264 @ 0xb6200fc0] frame B:216 Avg QP: 1.95 size: 64784
[libx264 @ 0xb6200fc0] consecutive B-frames: 30.1% 63.2% 6.0% 0.7%
[libx264 @ 0xb6200fc0] mb I I16..4: 16.1% 12.7% 71.2%
[libx264 @ 0xb6200fc0] mb P I16..4: 3.5% 5.1% 15.9% P16..4: 20.3% 22.8% 14.0% 0.0% 0.0% skip:18.3%
[libx264 @ 0xb6200fc0] mb B I16..4: 0.4% 2.5% 8.2% B16..8: 32.6% 19.8% 13.5%
direct:22.2% skip: 0.8% L0:25.5% L1:12.8% BI:61.6%
[libx264 @ 0xb6200fc0] final ratefactor: -32.89
[libx264 @ 0xb6200fc0] 8x8 transform intra:21.0% inter:29.6%
[libx264 @ 0xb6200fc0] coded y,uvDC,uvAC intra: 100.0% 100.0% 100.0% inter: 83.3% 80.9% 80.9%
[libx264 @ 0xb6200fc0] i16 v,h,dc,p: 5% 7% 42% 46%
[libx264 @ 0xb6200fc0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14% 12% 23% 8% 6% 6% 8% 9% 14%
[libx264 @ 0xb6200fc0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 12% 11% 19% 10% 8% 8% 10% 10% 12%
[libx264 @ 0xb6200fc0] i8c dc,h,v,p: 78% 3% 4% 15%
[libx264 @ 0xb6200fc0] Weighted P-Frames: Y:0.5% UV:0.3%
[libx264 @ 0xb6200fc0] ref P L0: 43.4% 14.6% 19.0% 22.9% 0.1%
[libx264 @ 0xb6200fc0] ref B L0: 63.3% 35.7% 1.1%
[libx264 @ 0xb6200fc0] ref B L1: 97.0% 3.0%
[libx264 @ 0xb6200fc0] kb/s:4.53
[aac @ 0xb6201ba0] 2 frames left in the queue on closing -
Convert YUV frames into RGBA frames with FFMPEG
28 May 2015, by Dave_DevI would like to develop an application which would be able to convert YUV frames into RGBA frames using the ffmpeg library.
I have begun writing this code:void Decode::video_encode_example(const char *filename, int codec_id)
{
AVCodec *codec;
AVCodecContext *c= NULL;
int i, ret, x, y, got_output;
FILE *f;
AVFrame *frame;
AVPacket pkt;
uint8_t endcode[] = { 0, 0, 1, 0xb7 };
printf("Encode video file %s\n", filename);
/* find the mpeg1 video encoder */
codec = avcodec_find_encoder((enum AVCodecID)codec_id);
if (!codec) {
fprintf(stderr, "Codec not found\n");
exit(1);
}
c = avcodec_alloc_context3(codec);
if (!c) {
fprintf(stderr, "Could not allocate video codec context\n");
exit(2);
}
/* put sample parameters */
c->bit_rate = 400000;
/* resolution must be a multiple of two */
c->width = 352; // Avant c'était du 352x288
c->height = 288;
/* frames per second */
c->time_base = (AVRational){1,25};
/* emit one intra frame every ten frames
* check frame pict_type before passing frame
* to encoder, if frame->pict_type is AV_PICTURE_TYPE_I
* then gop_size is ignored and the output of encoder
* will always be I frame irrespective to gop_size
*/
c->gop_size = 10;
c->max_b_frames = 1;
printf("Avant\n");
c->pix_fmt = PIX_FMT_RGBA;// Avant c'était AV_PIX_FMT_YUV420P
printf("Après\n");
if (codec_id == AV_CODEC_ID_H264)
av_opt_set(c->priv_data, "preset", "slow", 0);
/* open it */
if (avcodec_open2(c, codec, NULL) < 0) {
fprintf(stderr, "Could not open codec\n");
exit(3);
}
f = fopen(filename, "wb");
if (!f) {
fprintf(stderr, "Could not open %s\n", filename);
exit(4);
}
frame = avcodec_alloc_frame();// Dans une version plus récente c'est av_frame_alloc
if (!frame) {
fprintf(stderr, "Could not allocate video frame\n");
exit(5);
}
frame->format = c->pix_fmt;
frame->width = c->width;
frame->height = c->height;However, each time I run this application, the following error appears in my Linux terminal:
[mpeg2video @ 0x10c7040] Specified pix_fmt is not supported
Could you help me please ?
-
conversion from cv::mat to avframe
14 November 2014, by danicsi create a method for converting between cv::mat to avframe with PIX_FMT_YUV420P format (oframe format) but _convCtx always return null, whats wrong? thanks in advance!
void processToFrame(cv::Mat* _mat, AVFrame* oframe)
{
// Create and allocate the conversion frame.
if (_oframe == nullptr) {
_oframe = avcodec_alloc_frame();
if (_oframe == nullptr)
throw std::runtime_error("Matrix Converter: Could not allocate the output frame.");
avpicture_alloc(reinterpret_cast(_oframe),
PIX_FMT_BGR24, _mat->cols, _mat->rows);
}
avpicture_fill(reinterpret_cast(_oframe),
(uint8_t *)_mat->data,
AV_PIX_FMT_BGR24,
_mat->cols,
_mat->rows);
// Convert the image from its native format to BGR.
if (_convCtx == nullptr) {
_convCtx = sws_getContext(
oframe->width, oframe->height, (enum AVPixelFormat) oframe->format,
_oframe->width, _oframe->height, PIX_FMT_BGR24,
SWS_BICUBIC, nullptr, nullptr, nullptr);
}
if (_convCtx == nullptr)
throw std::runtime_error("Matrix Converter: Unable to initialize the conversion context.");
// Scales the source data according to our SwsContext settings.
if (sws_scale(_convCtx,
_oframe->data, _oframe->linesize, 0, _oframe->height,
oframe->data, oframe->linesize) < 0)
throw std::runtime_error("Matrix Converter: Pixel format conversion not supported.");
}edit: create oframe
void createVideoFile(const char* filename, int w, int h, int codec_id, int fps)
{
/* find the mpeg1 video encoder */
if(codec == nullptr)
{
/* find the mpeg1 video encoder */
codec = avcodec_find_encoder((AVCodecID)codec_id);
if (!codec) {
throw std::runtime_error("codec not found\n");
}
}
if(c == nullptr)
{
c = avcodec_alloc_context3(codec);
if(!c)
{
throw std::runtime_error("Could not allocate video codec context\n");
}
/* put sample parameters */
c->bit_rate = 400000;
/* resolution must be a multiple of two */
c->width = 2 * (w / 2);
c->height = 2 * (h / 2);
/* frames per second */
AVRational ar;
ar.den = 1;
ar.num = fps;
c->time_base= ar; //(AVRational){1,25};
c->gop_size = 10; /* emit one intra frame every ten frames */
c->max_b_frames=1;
c->pix_fmt = PIX_FMT_YUV420P;
if(codec_id == AV_CODEC_ID_H264)
av_opt_set(c->priv_data, "preset", "slow", 0);
/* open it */
if (avcodec_open2(c, codec, NULL) < 0) {
throw std::runtime_error("Could not open codec\n");
}
f = fopen(filename, "wb");
if (!f) {
throw std::runtime_error("could not open file\n");
}
frame = avcodec_alloc_frame();
if (!frame) {
throw std::runtime_error("Could not allocate video frame\n");
}
frame->format = c->pix_fmt;
frame->width = c->width;
frame->height = c->height;
/* the image can be allocated by any means and av_image_alloc() is
* just the most convenient way if av_malloc() is to be used */
int ret = av_image_alloc(frame->data, frame->linesize, c->width, c->height, c->pix_fmt, 32);
if (ret < 0) {
throw std::runtime_error("Could not allocate raw picture buffer\n");
}
}
}read mat images
void video_encode_example(const cv::Mat& fin)
{
AVPacket pkt;
/* encode 1 second of video */
av_init_packet(&pkt);
pkt.data = NULL; // packet data will be allocated by the encoder
pkt.size = 0;
fflush(stdout);
cv::Mat res;
cv::resize(fin, res, cv::Size(c->width, c->height));
processToFrame(&res, frame);
frame->pts = i;
/* encode the image */
int ret = avcodec_encode_video2(c, &pkt, frame, &got_output);
if (ret < 0) {
throw std::runtime_error("Error encoding frame\n");
}
if (got_output) {
printf("Write frame %3d (size=%5d)\n", i, pkt.size);
fwrite(pkt.data, 1, pkt.size, f);
av_free_packet(&pkt);
}
i++;
/* get the delayed frames */
/*for (got_output = 1; got_output; i++) {
fflush(stdout);
ret = avcodec_encode_video2(c, &pkt, NULL, &got_output);
if (ret < 0) {
throw std::runtime_error("Error encoding frame\n");
}
if (got_output) {
printf("Write frame %3d (size=%5d)\n", i, pkt.size);
fwrite(pkt.data, 1, pkt.size, f);
av_free_packet(&pkt);
}
}*/
}