
Recherche avancée
Médias (1)
-
Somos millones 1
21 juillet 2014, par
Mis à jour : Juin 2015
Langue : français
Type : Video
Autres articles (80)
-
MediaSPIP version 0.1 Beta
16 avril 2011, parMediaSPIP 0.1 beta est la première version de MediaSPIP décrétée comme "utilisable".
Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
Pour avoir une installation fonctionnelle, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...) -
(Dés)Activation de fonctionnalités (plugins)
18 février 2011, parPour gérer l’ajout et la suppression de fonctionnalités supplémentaires (ou plugins), MediaSPIP utilise à partir de la version 0.2 SVP.
SVP permet l’activation facile de plugins depuis l’espace de configuration de MediaSPIP.
Pour y accéder, il suffit de se rendre dans l’espace de configuration puis de se rendre sur la page "Gestion des plugins".
MediaSPIP est fourni par défaut avec l’ensemble des plugins dits "compatibles", ils ont été testés et intégrés afin de fonctionner parfaitement avec chaque (...) -
Activation de l’inscription des visiteurs
12 avril 2011, parIl est également possible d’activer l’inscription des visiteurs ce qui permettra à tout un chacun d’ouvrir soit même un compte sur le canal en question dans le cadre de projets ouverts par exemple.
Pour ce faire, il suffit d’aller dans l’espace de configuration du site en choisissant le sous menus "Gestion des utilisateurs". Le premier formulaire visible correspond à cette fonctionnalité.
Par défaut, MediaSPIP a créé lors de son initialisation un élément de menu dans le menu du haut de la page menant (...)
Sur d’autres sites (9268)
-
ffmpeg - Understand images to video output, players show different images and lengths
8 juillet 2023, par Matt CI'm using multiple images to create a video with each image on a 1-second long frame. This is the command I'm using :


ffmpeg -framerate 1 -i 'image%d.jpg' -c:v libx264 -r 1 -pix_fmt yuv420p out.mp4



This seems straightforward and exactly what many others have done with success. However, the output I get is an mp4 which windows file explorer says is 4 seconds long, and is different in VLC and Windows media player and neither is the desired output.


In Windows : the video plays for 4 seconds with a black screen and at this point the time line at the bottom is filled up at 4 seconds, indicating the video is over. But it keeps playing, for another 4 seconds. And the last 4 seconds (from 0:04 to 0:07) is actually the desired output.







 Frame 

Image 







 1 

black screen 




 2 

black screen 




 3 

black screen 




 4 

black screen 




 5 

image1.jpg 




 6 

image2.jpg 




 7 

image3.jpg 




 8 

image4.jpg 









In VLC : the video shows last image supplied as input for 3 seconds, followed by the second to last image for 1 second.







 Frame 

Image 







 1 

image4.jpg 




 2 

image4.jpg 




 3 

image4.jpg 




 4 

image3.jpg 









Questions :


- 

- How/Why are these different in different players ?
- Why, in VLC, are only two images showing up, and why would one of them last for 3 seconds ?
- In Windows, why/how is the video 8 seconds long but shows up as 4 seconds both in the file explorer and in the actual media player ?
- How do I get the desired output, and what caused my case to not work as it did for seemingly most others ?










-
FFMPEG : i need audio channels 7 & 8 to be the main audio track for a video
10 avril 2013, par lo_fyeI have a video with 8 channels of audio.
I need tracks 7 (Left Stereo) and 8 (Right Stereo) to be the audio for the video (which I'm converting to flv).
I've tried playing with
-filter_complex
and thejoin
,amix
, andamerge
filters, as well as the-map
parameter, but I can't seem to find the right combination of values :-/Output :
/usr/local/bin/ffmpeg-1.0/bin/ffmpeg -i '/folder/video_name.mov' -f 'flv' \
-s '320x240' -b '250k' -aspect '4:3' -ac 1 -ab '64k' -ar '22050' -y \
/folder/video_name.flv
ffmpeg version N-46241-g09ea482 Copyright (c) 2000-2012 the FFmpeg developers
built on Nov 5 2012 07:33:09 with gcc 4.1.2 (GCC) 20080704 (Red Hat 4.1.2-46)
configuration: --prefix=/usr/local/bin/ffmpeg-1.0
libavutil 52. 1.100 / 52. 1.100
libavcodec 54. 70.100 / 54. 70.100
libavformat 54. 35.100 / 54. 35.100
libavdevice 54. 3.100 / 54. 3.100
libavfilter 3. 21.105 / 3. 21.105
libswscale 2. 1.101 / 2. 1.101
libswresample 0. 16.100 / 0. 16.100
Guessed Channel Layout for Input Stream #0.1 : mono
Guessed Channel Layout for Input Stream #0.2 : mono
Guessed Channel Layout for Input Stream #0.3 : mono
Guessed Channel Layout for Input Stream #0.4 : mono
Guessed Channel Layout for Input Stream #0.5 : mono
Guessed Channel Layout for Input Stream #0.6 : mono
Guessed Channel Layout for Input Stream #0.7 : mono
Guessed Channel Layout for Input Stream #0.8 : mono
Guessed Channel Layout for Input Stream #0.9 : mono
Guessed Channel Layout for Input Stream #0.10 : mono
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/folder/video_name.mov':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
creation_time : 2013-04-03 19:45:26
Duration: 00:00:39.03, start: 0.000000, bitrate: 122149 kb/s
Stream #0:0(eng): Video: prores (apch / 0x68637061), yuv422p10le, 1920x1080, 110585 kb/s, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 23976 tbn, 23976 tbc
Metadata:
creation_time : 2013-04-03 19:45:26
handler_name : Apple Alias Data Handler
timecode : 00:59:53:00
Stream #0:1(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
Metadata:
creation_time : 2013-04-03 19:45:26
handler_name : Apple Alias Data Handler
Stream #0:2(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
Metadata:
creation_time : 2013-04-03 19:45:26
handler_name : Apple Alias Data Handler
Stream #0:3(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
Metadata:
creation_time : 2013-04-03 19:45:26
handler_name : Apple Alias Data Handler
Stream #0:4(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
Metadata:
creation_time : 2013-04-03 19:45:26
handler_name : Apple Alias Data Handler
Stream #0:5(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
Metadata:
creation_time : 2013-04-03 19:45:26
handler_name : Apple Alias Data Handler
Stream #0:6(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
Metadata:
creation_time : 2013-04-03 19:45:26
handler_name : Apple Alias Data Handler
Stream #0:7(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
Metadata:
creation_time : 2013-04-03 19:45:26
handler_name : Apple Alias Data Handler
Stream #0:8(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
Metadata:
creation_time : 2013-04-03 19:45:26
handler_name : Apple Alias Data Handler
Stream #0:9(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
Metadata:
creation_time : 2013-04-03 19:45:26
handler_name : Apple Alias Data Handler
Stream #0:10(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
Metadata:
creation_time : 2013-04-03 19:45:26
handler_name : Apple Alias Data Handler
Stream #0:11(eng): Data: none (tmcd / 0x64636D74)
Metadata:
creation_time : 2013-04-03 19:45:30
handler_name : Apple Alias Data Handler
timecode : 00:59:53:00
Please use -b:a or -b:v, -b is ambiguous
Output #0, flv, to '/folder/video_name.flv':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
encoder : Lavf54.35.100
Stream #0:0(eng): Video: flv1 ([2][0][0][0] / 0x0002), yuv420p, 320x240 [SAR 1:1 DAR 4:3], q=2-31, 250 kb/s, 1k tbn, 23.98 tbc
Metadata:
creation_time : 2013-04-03 19:45:26
handler_name : Apple Alias Data Handler
timecode : 00:59:53:00
Stream #0:1(eng): Audio: adpcm_swf ([1][0][0][0] / 0x0001), 22050 Hz, mono, s16, 88 kb/s
Metadata:
creation_time : 2013-04-03 19:45:26
handler_name : Apple Alias Data Handler
Stream mapping:
Stream #0:0 -> #0:0 (prores -> flv)
Stream #0:1 -> #0:1 (pcm_s24le -> adpcm_swf)
Press [q] to stop, [?] for help
frame= 33 fps=0.0 q=2.0 size= 108kB time=00:00:01.99 bitrate= 442.4kbits/s
frame= 66 fps= 65 q=2.0 size= 225kB time=00:00:02.97 bitrate= 619.0kbits/s
frame= 99 fps= 65 q=2.0 size= 341kB time=00:00:04.96 bitrate= 561.8kbits/s
frame= 136 fps= 67 q=2.0 size= 400kB time=00:00:05.99 bitrate= 547.5kbits/s
frame= 177 fps= 70 q=3.0 size= 482kB time=00:00:07.98 bitrate= 494.3kbits/s
frame= 210 fps= 69 q=3.7 size= 590kB time=00:00:08.96 bitrate= 539.7kbits/s
frame= 240 fps= 68 q=6.3 size= 660kB time=00:00:10.01 bitrate= 539.7kbits/s
frame= 264 fps= 65 q=6.7 size= 719kB time=00:00:11.01 bitrate= 535.2kbits/s
frame= 288 fps= 63 q=8.4 size= 772kB time=00:00:12.02 bitrate= 526.1kbits/s
frame= 312 fps= 62 q=15.4 size= 829kB time=00:00:13.65 bitrate= 497.4kbits/s
frame= 336 fps= 60 q=10.4 size= 875kB time=00:00:14.02 bitrate= 511.1kbits/s
frame= 360 fps= 59 q=10.6 size= 916kB time=00:00:15.01 bitrate= 499.9kbits/s
frame= 383 fps= 58 q=17.8 size= 957kB time=00:00:15.97 bitrate= 490.6kbits/s
frame= 411 fps= 58 q=6.5 size= 1008kB time=00:00:17.97 bitrate= 459.3kbits/s
frame= 437 fps= 57 q=9.7 size= 1046kB time=00:00:18.99 bitrate= 451.3kbits/s
frame= 460 fps= 57 q=7.7 size= 1086kB time=00:00:20.01 bitrate= 444.6kbits/s
frame= 489 fps= 57 q=11.3 size= 1144kB time=00:00:20.99 bitrate= 446.3kbits/s
frame= 512 fps= 56 q=10.3 size= 1182kB time=00:00:22.01 bitrate= 439.8kbits/s
frame= 535 fps= 55 q=21.5 size= 1225kB time=00:00:22.98 bitrate= 436.7kbits/s
frame= 564 fps= 55 q=18.3 size= 1280kB time=00:00:24.00 bitrate= 436.8kbits/s
frame= 587 fps= 55 q=8.5 size= 1311kB time=00:00:24.98 bitrate= 429.7kbits/s
frame= 610 fps= 54 q=11.9 size= 1349kB time=00:00:26.00 bitrate= 424.9kbits/s
frame= 636 fps= 54 q=7.5 size= 1383kB time=00:00:26.98 bitrate= 419.8kbits/s
frame= 659 fps= 54 q=9.6 size= 1421kB time=00:00:28.00 bitrate= 415.6kbits/s
frame= 683 fps= 54 q=20.0 size= 1471kB time=00:00:29.02 bitrate= 415.1kbits/s
frame= 711 fps= 54 q=6.4 size= 1518kB time=00:00:30.00 bitrate= 414.5kbits/s
frame= 742 fps= 54 q=6.2 size= 1558kB time=00:00:31.02 bitrate= 411.5kbits/s
frame= 774 fps= 54 q=2.5 size= 1601kB time=00:00:33.01 bitrate= 397.1kbits/s
frame= 816 fps= 55 q=2.0 size= 1632kB time=00:00:34.50 bitrate= 387.6kbits/s
frame= 861 fps= 56 q=2.0 size= 1670kB time=00:00:35.99 bitrate= 380.1kbits/s
frame= 905 fps= 57 q=2.0 size= 1706kB time=00:00:38.03 bitrate= 367.4kbits/s
frame= 936 fps= 58 q=2.0 Lsize= 1730kB time=00:00:39.05 bitrate= 362.8kbits/s
video:1278kB audio:423kB subtitle:0 global headers:0kB muxing overhead 1.654557% -
FFMpeg Coding in C : Encoder returns EOF at first interaction. Encoder not opened correctly ? [closed]
26 février, par Davidhoheyas I'm fairly new to FFMpeg Programming and C in general, the code looks like a mess.


I have smashed my head against a wall trying to get this code to work for about a week.


int decode_encode_pipeline(AVFormatContext *Input_Format_Context, AVFormatContext *Output_Format_Context, int *streams_list){

 const AVCodec *DECodec, *ENCodec;
 AVCodecContext *DECodecContext = NULL, *ENCodecContext = NULL;
 AVCodecParameters *CodecParameters = NULL;
 AVDictionary *opts = NULL;
 AVPacket *Packet;
 AVFrame *Frame;
 int check;

 Packet = av_packet_alloc();
 if(!Packet){
 
 printf("\nFehler bei Allocating Packet");
 
 return 0;
 
 }

 Frame = av_frame_alloc();
 if(!Frame){
 
 printf("\nFehler bei Allocating Frame");
 
 return 0;
 
 }

 CodecParameters = Input_Format_Context->streams[Packet->stream_index]->codecpar;
 if(!CodecParameters){

 printf("\nCodecParameters konnte nicht erstellt oder zugewiesen werden.");

 }

 DECodec = avcodec_find_decoder(CodecParameters->codec_id);
 if(!DECodec){
 
 printf("\nCodec nicht gefunden");
 
 return 0;
 
 }

 DECodecContext = avcodec_alloc_context3(DECodec);
 if (!DECodecContext){
 
 printf("\nFehler bei Allocating CodecContext");
 
 return 0;
 
 }

 ENCodec = avcodec_find_encoder(CodecParameters->codec_id);
 if(!DECodec){
 
 printf("\nCodec nicht gefunden");
 
 return 0;
 
 }

 ENCodecContext = avcodec_alloc_context3(ENCodec);
 if (!ENCodecContext){
 
 printf("\nFehler bei Allocating CodecContext");
 
 return 0;
 
 }

 check = avformat_write_header(Output_Format_Context, &opts);
 if(check < 0){

 printf("\nFehler beim Öffnen des Output Files.");
 
 return 1;

 }

 avcodec_parameters_to_context(DECodecContext, CodecParameters);
 avcodec_parameters_to_context(ENCodecContext, CodecParameters);

 ENCodecContext->width = DECodecContext->width;
 ENCodecContext->height = DECodecContext->height;
 ENCodecContext->bit_rate = DECodecContext->bit_rate;
 ENCodecContext->time_base = (AVRational){1, 30};
 ENCodecContext->framerate = DECodecContext->framerate;
 ENCodecContext->gop_size = DECodecContext->gop_size;
 ENCodecContext->max_b_frames = DECodecContext->max_b_frames;
 ENCodecContext->pix_fmt = DECodecContext->pix_fmt;
 if(ENCodec->id == AV_CODEC_ID_H264){

 av_opt_set(ENCodecContext->priv_data, "preset", "slow", 0);

 }

 check = avcodec_open2(DECodecContext, DECodec, NULL);
 if(check < 0){
 
 printf("\nFehler bei Öffnen von DECodec");
 
 return 1;
 
 }

 check = avcodec_open2(ENCodecContext, ENCodec, NULL);
 if(check < 0){
 
 printf("\nFehler bei Öffnen von ENCodec");
 
 return 1;
 
 }

 while(1){
 
 check = av_read_frame(Input_Format_Context, Packet);
 if(check < 0){
 
 break;
 
 }

 AVStream *in_stream, *out_stream;

 in_stream = Input_Format_Context->streams[Packet->stream_index];
 out_stream = Output_Format_Context->streams[Packet->stream_index];

 if(in_stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && Packet->stream_index == streams_list[Packet->stream_index]){

 check = avcodec_send_packet(DECodecContext, Packet);
 if(check < 0){

 printf("\nFehler bei Encoding");

 return 1;

 }

 AVPacket *EncodedPacket;
 EncodedPacket = av_packet_alloc();
 if(!EncodedPacket){
 
 printf("\nFehler bei Allocating Packet");
 
 return 1;
 
 }

 /*While Loop Decoding*/
 while(check >= 0){
 
 check = avcodec_receive_frame(DECodecContext, Frame);
 if(check == AVERROR(EAGAIN)){
 
 continue;
 
 }else if(check == AVERROR_EOF){
 
 break;
 
 }else if(check < 0){
 
 printf("\nFehler bei Decoding");
 
 return 1;
 
 }

 /*Convert Colorspace*/
 struct SwsContext *SwsContexttoRGB = sws_getContext(Frame->width, Frame->height, Frame->format, Frame->width, Frame->height, AV_PIX_FMT_RGB24, SWS_BILINEAR, NULL, NULL, NULL);
 struct SwsContext *SwsContexttoOriginal = sws_getContext(Frame->width, Frame->height, AV_PIX_FMT_RGB24, Frame->width, Frame->height, Frame->format, SWS_BILINEAR, NULL, NULL, NULL);
 if(!SwsContexttoRGB || !SwsContexttoOriginal){

 printf("\nSwsContext konnte nicht befüllt werden.");

 return 1;

 } 

 if(Frame->linesize < 0){

 printf("\nFehler: linesize ist negativ und nicht kompatibel\n");

 return 1;

 }

 AVFrame *RGBFrame;
 RGBFrame = av_frame_alloc();
 if(!RGBFrame){

 printf("\nFehler bei der Reservierung für den RGBFrame");

 return 1;

 }
 /*
 int number_bytes = av_image_get_buffer_size(AV_PIX_FMT_RGB24, Frame->width, Frame->height, 1);
 if(number_bytes < 0){

 printf("\nFehler bei der Berechnung der benoetigten Bytes fuer Konvertierung");

 return 1;

 }
 
 uint8_t *rgb_buffer = (uint8_t *)av_malloc(number_bytes*sizeof(uint8_t));
 if(rgb_buffer == NULL){

 printf("\nFehler bei der Reservierung für den RGBBuffer");

 return 1;

 }

 check = av_image_fill_arrays(RGBFrame->data, RGBFrame->linesize, rgb_buffer, AV_PIX_FMT_RGB24, Frame->width, Frame->height, 1);
 if(check < 0){

 printf("\nFehler bei der Zuweisung der RGB Daten");

 return 1;

 }*/

 //sws_scale(SwsContexttoRGB, (const uint8_t * const *)Frame->data, Frame->linesize, 0, Frame->height, RGBFrame->data, RGBFrame->linesize);
 sws_scale_frame(SwsContexttoRGB, Frame, RGBFrame);
 printf("\nIch habe die Daten zu RGB konvertiert.");

 //sws_scale(SwsContexttoOriginal, (const uint8_t * const *)RGBFrame->data, RGBFrame->linesize, 0, Frame->height, Frame->data, Frame->linesize);
 sws_scale_frame(SwsContexttoOriginal, RGBFrame, Frame);
 printf("\nIch habe die Daten zurück ins Original konvertiert.");

 Frame->format = ENCodecContext->pix_fmt;
 Frame->width = ENCodecContext->width;
 Frame->height = ENCodecContext->height;
 
 check = av_frame_get_buffer(Frame, 0);
 if(check < 0){
 
 printf("\nFehler bei Allocating Frame Buffer");
 
 return 1;
 
 }

 /* Encoding */
 check = av_frame_make_writable(Frame);
 if(check < 0){

 printf("\nFehler bei Make Frame Writable");

 return 1;

 }

 encode(ENCodecContext, Frame, EncodedPacket, Output_Format_Context);

 sws_freeContext(SwsContexttoRGB);
 sws_freeContext(SwsContexttoOriginal);
 av_frame_free(&RGBFrame);
 //av_free(rgb_buffer);

 }

 /* Flushing Encoder */
 encode(ENCodecContext, NULL, EncodedPacket, Output_Format_Context);

 //avcodec_flush_buffers(DECodecContext);
 //avcodec_flush_buffers(ENCodecContext);

 av_packet_free(&EncodedPacket);

 }else{

 av_interleaved_write_frame(Output_Format_Context, Packet);

 }

 }

 av_write_trailer(Output_Format_Context); 

 /* Memory Free */
 avcodec_free_context(&DECodecContext);
 avcodec_free_context(&ENCodecContext);
 avcodec_parameters_free(&CodecParameters);
 av_frame_free(&Frame);
 av_packet_free(&Packet);

 return 0;

}




The function encode looks as follows :


static void encode(AVCodecContext *ENCodecContext, AVFrame *Frame, AVPacket *EncodedPacket, AVFormatContext *Output_Format_Context){

 int check;



 check = avcodec_send_frame(ENCodecContext, Frame);
 if(check == AVERROR(EAGAIN)){
 printf("\nEAGAIN");
 } 
 if(check == AVERROR_EOF){
 printf("\nEOF");
 }
 if(check == AVERROR(EINVAL)){
 printf("\nEINVAL");
 }
 if(check == AVERROR(ENOMEM)){
 printf("\nENOMEM");
 }
 if(check < 0){

 printf("\nFehler bei Encoding Send Frame. Check = %d", check);

 return;

 }

 while(check >= 0){

 check = avcodec_receive_packet(ENCodecContext, EncodedPacket);
 if(check == AVERROR(EAGAIN) || check == AVERROR_EOF){

 return;

 }else if(check < 0){

 printf("\nFehler bei Encoding");

 return;

 }

 if (av_interleaved_write_frame(Output_Format_Context, EncodedPacket) < 0) {

 printf("\nFehler beim Muxen des Paketes.");
 break;

 }

 av_packet_unref(EncodedPacket);

 }

 return;

}



The program should decode a video into the individual frames convert them to RGB24, so I can work with the raw data of the frame, then convert it back to the original format and encode the frames.


The encoder doesn't play nice, as I get an EOF error at avcodec_send_frame().
But I couldn't figure it out why the encoder behaves like this.
And yes I have read the docs and example files, but either I'm massivly missing a crucial detail or I'm just ****.


Any and all help will be and is massivly appreciated.


PS. : The used libraries are libavutil, libavformat, libavcodec, libswscale. All installed with the "-dev" suffix through linux commandline. Should all be the version 7.0 libraries.


Thanks in advance.
With best regards.


- 

- Read the docs
- Shifting the encoding step out of the decoding while loop