
Recherche avancée
Médias (91)
-
DJ Z-trip - Victory Lap : The Obama Mix Pt. 2
15 septembre 2011
Mis à jour : Avril 2013
Langue : English
Type : Audio
-
Matmos - Action at a Distance
15 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
DJ Dolores - Oslodum 2004 (includes (cc) sample of “Oslodum” by Gilberto Gil)
15 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Danger Mouse & Jemini - What U Sittin’ On ? (starring Cee Lo and Tha Alkaholiks)
15 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Cornelius - Wataridori 2
15 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
The Rapture - Sister Saviour (Blackstrobe Remix)
15 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
Autres articles (78)
-
Le profil des utilisateurs
12 avril 2011, parChaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...) -
Configurer la prise en compte des langues
15 novembre 2010, parAccéder à la configuration et ajouter des langues prises en compte
Afin de configurer la prise en compte de nouvelles langues, il est nécessaire de se rendre dans la partie "Administrer" du site.
De là, dans le menu de navigation, vous pouvez accéder à une partie "Gestion des langues" permettant d’activer la prise en compte de nouvelles langues.
Chaque nouvelle langue ajoutée reste désactivable tant qu’aucun objet n’est créé dans cette langue. Dans ce cas, elle devient grisée dans la configuration et (...) -
Les tâches Cron régulières de la ferme
1er décembre 2010, parLa gestion de la ferme passe par l’exécution à intervalle régulier de plusieurs tâches répétitives dites Cron.
Le super Cron (gestion_mutu_super_cron)
Cette tâche, planifiée chaque minute, a pour simple effet d’appeler le Cron de l’ensemble des instances de la mutualisation régulièrement. Couplée avec un Cron système sur le site central de la mutualisation, cela permet de simplement générer des visites régulières sur les différents sites et éviter que les tâches des sites peu visités soient trop (...)
Sur d’autres sites (11223)
-
How to save h264 frames as jpeg images using ffmpeg ?
17 août 2020, par Matthew CzarnekI would like to save thumbnails from a h264 stream that I'm turning into ffmpeg avpackets as jpegs.


I'm started with a h264 AVPacket (iframe) and decode it into an AVFrame using avcodec_send_packet/avcodec_receive_frame. Now trying to go from AVFrame and convert into AVPacket using avcodec_send_frame/avcodec_receive_packet


I can convert to png instead jpg, though I do get a the video looking like it's outputting three separate frames squeezed side by side into one. Wondering if it's one frame is R, next G, and finally B. I'm not sure, clearly I'm doing something wrong there. I figured it's possible it's the png encoder and I don't need it, so let's get jpg working first. But jpg is outputting unopenable files.


Any advice ?


Here is my code :


int output_thumbnails(AVPacket* video_packet)
{
 char png_file_name[max_chars_per_filename];
 char thumbnail_id_char[10];
 _itoa_s(thumbnail_id, thumbnail_id_char, 10);
 strcpy_s(png_file_name, max_chars_per_filename, time_stamped_filepath);
 strcat_s(png_file_name, max_chars_per_filename, time_stamped_filename);
 strcat_s(png_file_name, max_chars_per_filename, thumbnail_id_char);
 strcat_s(png_file_name, max_chars_per_filename, ".jpg");
 thumbnail_id++;

 int error_code = send_AVPacket_to_videocard(video_packet, av_codec_context_RTSP);

 //if (error_code == AVERROR_EOF)
 //{
 // // error_code = videocard_to_PNG(png_file_name, av_codec_context_RTSP, av_codec_RTSP);
 //}
 if (error_code == AVERROR(EAGAIN)) //send packets to videocard until function returns EAGAIN
 {
 error_code = videocard_to_PNG(png_file_name, av_codec_context_RTSP);

 //EAGAIN means that the video card buffer is ready to have the png pulled off of it
 if (error_code == AVERROR_EOF)
 {
 // error_code = videocard_to_PNG(png_file_name, av_codec_context_RTSP, av_codec_RTSP);
 }
 else if (error_code == AVERROR(EAGAIN))
 {

 }
 else
 {
 deal_with_av_errors(error_code, __LINE__, __FILE__);
 }
 }
 else
 {
 deal_with_av_errors(error_code, __LINE__, __FILE__);
 }
 
 return 0;
}



VideoThumbnailGenerator.h :
#include "VideoThumbnailGenerator.h"


bool decoder_context_created = false;
bool encoder_context_created = false;

AVCodecContext* h264_decoder_codec_ctx;
AVCodecContext* thumbnail_encoder_codec_ctx;

int send_AVPacket_to_videocard(AVPacket* packet, AVCodecContext* codec_ctx)
{
 if(!decoder_context_created)
 {
 AVCodec* h264_codec = avcodec_find_decoder(codec_ctx->codec_id);
 h264_decoder_codec_ctx = avcodec_alloc_context3(h264_codec);

 h264_decoder_codec_ctx->width = codec_ctx->width;
 h264_decoder_codec_ctx->height = codec_ctx->height;
 h264_decoder_codec_ctx->pix_fmt = AV_PIX_FMT_RGB24;
 h264_decoder_codec_ctx->codec_type = AVMEDIA_TYPE_VIDEO;
 h264_decoder_codec_ctx->skip_frame = AVDISCARD_NONINTRA;//AVDISCARD_NONREF;//AVDISCARD_NONINTRA;
 
 h264_decoder_codec_ctx->time_base.num = 1;
 h264_decoder_codec_ctx->time_base.den = 30;

 h264_decoder_codec_ctx->extradata = codec_ctx->extradata;
 h264_decoder_codec_ctx->extradata_size = codec_ctx->extradata_size;
 
 int error_code = avcodec_open2(h264_decoder_codec_ctx, h264_codec, NULL);
 if (!h264_codec) {
 return -1;
 }

 if (error_code < 0)
 {
 return error_code;
 }
 decoder_context_created = true;
 }

 
 //use hardware decoding to decode video frame
 int error_code = avcodec_send_packet(h264_decoder_codec_ctx, packet);
 if(error_code == AVERROR(EAGAIN))
 {
 return AVERROR(EAGAIN);
 }
 if(error_code<0)
 {
 printf("Error: Could not send packet to video card");
 return error_code;
 }

 return 0;
}

int videocard_to_PNG(char *png_file_path, AVCodecContext* codec_ctx)
{
 if (!encoder_context_created)
 {
 //AVCodec* thumbnail_codec = avcodec_find_encoder(AV_CODEC_ID_PNG);
 AVCodec* thumbnail_codec = avcodec_find_encoder(AV_CODEC_ID_JPEG2000);
 thumbnail_encoder_codec_ctx = avcodec_alloc_context3(thumbnail_codec);

 thumbnail_encoder_codec_ctx->width = 128;
 thumbnail_encoder_codec_ctx->height = (int)(((float)codec_ctx->height/(float)codec_ctx->width) * 128);
 thumbnail_encoder_codec_ctx->pix_fmt = AV_PIX_FMT_RGB24; //AV_PIX_FMT_YUVJ420P
 thumbnail_encoder_codec_ctx->codec_type = AVMEDIA_TYPE_VIDEO;

 thumbnail_encoder_codec_ctx->time_base.num = 1;
 thumbnail_encoder_codec_ctx->time_base.den = 30;

 bool thread_check = thumbnail_encoder_codec_ctx->thread_type & FF_THREAD_FRAME;
 bool frame_threads_check = thumbnail_encoder_codec_ctx->codec->capabilities & AV_CODEC_CAP_FRAME_THREADS;
 
 int error_code = avcodec_open2(thumbnail_encoder_codec_ctx, thumbnail_codec, NULL);
 if (!thumbnail_codec) {
 return -1;
 }

 if (error_code < 0)
 {
 return error_code;
 }
 encoder_context_created = true;
 }
 
 AVFrame* thumbnail_frame = av_frame_alloc();
 AVPacket* thumbnail_packet = av_packet_alloc();
 //av_init_packet(png_packet);
 int error_code = avcodec_receive_frame(h264_decoder_codec_ctx, thumbnail_frame);

 //check for errors everytime
 //note EAGAIN errors won't get here since they won't get past while
 if (error_code < 0 && error_code != AVERROR(EAGAIN))
 {
 printf("Error: Could not get frame from video card");
 return error_code;
 }
 //empty buffer if there are any more frames to pull (there shouldn't be)
 //while(error_code != AVERROR(EAGAIN))
 //{
 // //check for errors everytime
 // //note EAGAIN errors won't get here since they won't get past while
 // if (error_code < 0)
 // {
 // printf("Error: Could not get frame from video card");
 // return error_code;
 // }
 // 
 // error_code = avcodec_receive_frame(h264_decoder_codec_ctx, png_frame);
 //}

 //now we convert back to AVPacket, this time one holding PNG info, so we can store to file
 error_code = avcodec_send_frame(thumbnail_encoder_codec_ctx, thumbnail_frame);

 if (error_code >= 0) {
 error_code = avcodec_receive_packet(thumbnail_encoder_codec_ctx, thumbnail_packet);

 FILE* out_PNG;

 errno_t err = fopen_s(&out_PNG, png_file_path, "wb");
 if (err == 0) {
 fwrite(thumbnail_packet->data, thumbnail_packet->size, 1, out_PNG);
 }
 fclose(out_PNG);

 }
 return error_code;
}



-
.bat script : loop over files and save command to variable
29 septembre 2020, par Rolf vd HGooddday,


I want to shorten a folder of movies to cut the last part of it. To do that I use ffmpeg & ffprobe.
The time to be cut off is 5.52 seconds.
If I want to do that, first I have to get the time of the movie and then (the second command in the loop), I have to subtract the 5.52 seconds.


For now I have the following but I can't get it right :


mkdir outputsss
for %%a in ("FOLDER\*.mp4") do (
 ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "FOLDER\%%~na.mp4"
 ffmpeg -i "FOLDER\%%~na.mp4" -t 18.6 -c copy output.mp4
)
pause



In the above code example the "ffprobe" calculates the time of the movie.
The "ffmpeg" renders the movie again for 18.6 seconds. But the time should be calculated by subtract 5.52 seconds from the "ffprobe" result.


Can anyone help me please on how to do this ?


-
FFMPEG / MJPEG Encoding / How to add DQT table in packet data ?
20 mai 2020, par GoodSimonI write my own transcoder in C++ to convert any image to jpeg based on the examples in ffmpeg sources. I use the MJPEG codec to create a jpeg image. By sending AVFrame to the MJPEG encoder I get AVPacket. Then I just take the data from the packet->data structure with the size avpacket->size and save it to a file with the jpg extension.
The problem is that the finished JPEG image has only one DQT (Define Quantization Table). As far as I understand, there should be two tables in the file.



What do I need to do to have 2 quantization tables in avpacket->data ?