
Recherche avancée
Médias (1)
-
La conservation du net art au musée. Les stratégies à l’œuvre
26 mai 2011
Mis à jour : Juillet 2013
Langue : français
Type : Texte
Autres articles (97)
-
Multilang : améliorer l’interface pour les blocs multilingues
18 février 2011, parMultilang est un plugin supplémentaire qui n’est pas activé par défaut lors de l’initialisation de MediaSPIP.
Après son activation, une préconfiguration est mise en place automatiquement par MediaSPIP init permettant à la nouvelle fonctionnalité d’être automatiquement opérationnelle. Il n’est donc pas obligatoire de passer par une étape de configuration pour cela. -
Gestion des droits de création et d’édition des objets
8 février 2011, parPar défaut, beaucoup de fonctionnalités sont limitées aux administrateurs mais restent configurables indépendamment pour modifier leur statut minimal d’utilisation notamment : la rédaction de contenus sur le site modifiables dans la gestion des templates de formulaires ; l’ajout de notes aux articles ; l’ajout de légendes et d’annotations sur les images ;
-
Dépôt de média et thèmes par FTP
31 mai 2013, parL’outil MédiaSPIP traite aussi les média transférés par la voie FTP. Si vous préférez déposer par cette voie, récupérez les identifiants d’accès vers votre site MédiaSPIP et utilisez votre client FTP favori.
Vous trouverez dès le départ les dossiers suivants dans votre espace FTP : config/ : dossier de configuration du site IMG/ : dossier des média déjà traités et en ligne sur le site local/ : répertoire cache du site web themes/ : les thèmes ou les feuilles de style personnalisées tmp/ : dossier de travail (...)
Sur d’autres sites (10673)
-
Decode H264 video using libavcodec, C
10 janvier 2015, par deadmanI’m trying to decode a raw h264 file with ffmpeg/libavcodec, but can’t get it to work properly. Output should be a raw YUV-File for now. It’s possible to compile the code with GCC
gcc -o decoder decoder.c -L./lib/ -llibavcodec -llibavutil
avcodec.dll, avutil.dll and swresample.dll must be placed in the directory for the .exe to start. Output in the CMD looks like this (only part of it, but its always like this) :
[h264 @ 00a80f20] reference picture missing during reorder
[h264 @ 00a80f20] Missing reference picture, default is 65562
[h264 @ 00a80f20] error while decoding MB 80 54, bytestream -10
[h264 @ 00a80f20] concealing 1649 DC, 1649 AC, 1649 MV errors in B frame
[h264 @ 00a80f20] reference picture missing during reorder
[h264 @ 00a80f20] reference picture missing during reorder
[h264 @ 00a80f20] reference picture missing during reorder
[h264 @ 00a80f20] Missing reference picture, default is 65566
[h264 @ 00a80f20] Missing reference picture, default is 65566
[h264 @ 00a80f20] Missing reference picture, default is 65566
[h264 @ 00a80f20] reference picture missing during reorder
[h264 @ 00a80f20] Missing reference picture, default is 65568
[h264 @ 00a80f20] reference picture missing during reorder
[h264 @ 00a80f20] Missing reference picture, default is 65570
[h264 @ 00a80f20] reference picture missing during reorderHeres my code
#include
#include
#ifdef HAVE_AV_CONFIG_H
#undef HAVE_AV_CONFIG_H
#endif
#include "libavcodec/avcodec.h"
//#include "libavcodec/libavutil/mathematics.h"
#define INBUF_SIZE 4096
void video_decode(char *outfilename, char *filename)
{
AVCodec *codec;
AVCodecContext *c= NULL;
int frame, got_picture, len;
FILE *f, *outf;
AVFrame *picture;
uint8_t inbuf[INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
AVPacket avpkt;
int i;
av_init_packet(&avpkt);
memset(inbuf + INBUF_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);
codec = avcodec_find_decoder(AV_CODEC_ID_H264);
if (!codec) {
fprintf(stderr, "codec not found\n");
exit(1);
}
c = avcodec_alloc_context3(codec);
picture = av_frame_alloc();
if((codec->capabilities)&CODEC_CAP_TRUNCATED)
(c->flags) |= CODEC_FLAG_TRUNCATED;
c->height = 1080;
c->width = 1920;
if (avcodec_open2(c, codec, NULL) < 0) {
fprintf(stderr, "could not open codec\n");
exit(1);
}
f = fopen(filename, "rb");
if (!f) {
fprintf(stderr, "could not open %s\n", filename);
exit(1);
}
outf = fopen(outfilename,"w");
if(!outf){
fprintf(stderr, "could not open %s\n", filename);
exit(1);
}
frame = 0;
for(;;) {
avpkt.size = fread(inbuf, 1, INBUF_SIZE, f);
if (avpkt.size == 0)
break;
avpkt.data = inbuf;
while (avpkt.size > 0) {
len = avcodec_decode_video2(c, picture, &got_picture, &avpkt);
if (len < 0) {
fprintf(stderr, "Error while decoding frame %d\n", frame);
exit(1);
}
if (got_picture) {
printf("saving frame %3d\n", frame);
fflush(stdout);
for(i=0; iheight; i++)
fwrite(picture->data[0] + i * picture->linesize[0], 1, c->width, outf );
for(i=0; iheight/2; i++)
fwrite(picture->data[1] + i * picture->linesize[1], 1, c->width/2, outf );
for(i=0; iheight/2; i++)
fwrite(picture->data[2] + i * picture->linesize[2], 1, c->width/2, outf );
frame++;
}
avpkt.size -= len;
avpkt.data += len;
}
}
avpkt.data = NULL;
avpkt.size = 0;
len = avcodec_decode_video2(c,picture, &got_picture, &avpkt);
if(got_picture) {
printf("saving last frame %d\n",frame);
fflush(stdout);
for(i=0; iheight; i++)
fwrite(picture->data[0] + i * picture->linesize[0], 1, c->width, outf );
for(i=0; iheight/2; i++)
fwrite(picture->data[1] + i * picture->linesize[1], 1, c->width/2, outf );
for(i=0; iheight/2; i++)
fwrite(picture->data[2] + i * picture->linesize[2], 1, c->width/2, outf );
frame++;
}
fclose(f);
fclose(outf);
avcodec_close(c);
av_free(c);
av_frame_free(&picture);
printf("\n");
}
int main(int argc, char **argv){
avcodec_register_all();
video_decode("test", "trailer.264");
return 0;
}I also tried different videos in different formats (of course i changed the codec in the code in this case) like MPEG1, H263, H265, but none of those was working properly either.
I hope someone can help me with this and tell me what I’m doing wrong here. Thanks -
ffmpeg select frames using between
17 décembre 2014, par skyuukaI use the following command to select the 18 to 22 frames of an video :
ffmpeg -i input_video.avi -vf "select=between(n\,18\,22)" -f image2 frames_%3d.png
But I get the following errors :
Metadata:
major_brand : qt
minor_version : 0
compatible_brands: qt
creation_time : 2013-01-04 21:17:15
encoder : 6.0.1
encoder-eng : 6.0.1
date : 2013-01-04T13:17:15-0800
date-eng : 2013-01-04T13:17:15-0800
Duration: 00:00:09.17, start: 0.000000, bitrate: 20766 kb/s
Stream #0.0(und): Video: h264 (Baseline), yuv420p, 1920x1080, 20765 kb/s, 29.97 fps, 29.97 tbr, 600 tbn, 1200 tbc
Metadata:
creation_time : 2013-01-04 21:17:15
Stream #0.1(und): Audio: aac, 44100 Hz, mono, s16, 61 kb/s
Metadata:
creation_time : 2013-01-04 21:17:15
Incompatible pixel format 'yuv420p' for codec 'png', auto-selecting format 'rgb24'
[buffer @ 0x2589ac0] w:1920 h:1080 pixfmt:yuv420p
[select @ 0x259da00] [Eval @ 0x7fff7a38e940] Missing ')' or too many args in 'between(n,18,22)'
[select @ 0x259da00] Error while parsing expression 'between(n,18,22)'
Error initializing filter 'select' with args 'between(n,18,22)'
Error opening filters! -
ffmpeg change video stream resolution
10 décembre 2014, par skorpionetI have an MKV with a video stream with wrong resolution of 1920x800, but the inside film is 1920x1080 so my main video player, an LG Smart TV, shows a flattened image. I can easily change resolution in container metadata but LG TV ignores this data and read only video stream data.
First question : only way to change video stream resolution data is scale the video ?
To scale with ffmpeg I used this command :
ffmpeg -i input.mkv -map 0 -c:a copy -c:s copy -c:v libx264 -preset slow -crf 17 -vf scale=1920:1080,setdar=16/9 output.mkv
Now the mkv is fine, my LG TV read it, looks awesome but..... size went from 3,3Gb to 12Gb !!
Overall bit rate of 3,3Gb video is 2.704 Kbps, 12Gb is 9.829 Kbps. I think that 7000Kbps more are useless, in original video there aren’t info to raise quality.Second question : Why this huge size change ? What is my mistake ?
Best Regards