
Recherche avancée
Autres articles (56)
-
Les autorisations surchargées par les plugins
27 avril 2010, parMediaspip core
autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs -
MediaSPIP 0.1 Beta version
25 avril 2011, parMediaSPIP 0.1 beta is the first version of MediaSPIP proclaimed as "usable".
The zip file provided here only contains the sources of MediaSPIP in its standalone version.
To get a working installation, you must manually install all-software dependencies on the server.
If you want to use this archive for an installation in "farm mode", you will also need to proceed to other manual (...) -
MediaSPIP v0.2
21 juin 2013, parMediaSPIP 0.2 is the first MediaSPIP stable release.
Its official release date is June 21, 2013 and is announced here.
The zip file provided here only contains the sources of MediaSPIP in its standalone version.
To get a working installation, you must manually install all-software dependencies on the server.
If you want to use this archive for an installation in "farm mode", you will also need to proceed to other manual (...)
Sur d’autres sites (12529)
-
FFmpeg/libav : YUV420P to RGB conversion
17 janvier 2014, par learnerI am working with Video encoding-decoding based on online tutorials. In the encoding section, the dummy image created is in YUV420P format. I need it to be in RGB or BGR format. Any idea how to do this ??
#include
#include
#include
#ifdef HAVE_AV_CONFIG_H
#undef HAVE_AV_CONFIG_H
#endif
#include "libavcodec/avcodec.h"
#include "libavutil/mathematics.h"
#define INBUF_SIZE 4096
#define AUDIO_INBUF_SIZE 20480
#define AUDIO_REFILL_THRESH 4096
/*
* Video encoding example
*/
static void video_encode_example(const char *filename)
{
AVCodec *codec;
AVCodecContext *c = NULL;
int i, out_size, size, x, y, outbuf_size;
FILE *f;
AVFrame *picture;
uint8_t *outbuf, *picture_buf;
printf("Video encoding\n");
/* find the mpeg1 video encoder */
codec = avcodec_find_encoder(CODEC_ID_MPEG1VIDEO);
if (!codec)
{
fprintf(stderr, "codec not found\n");
exit(1);
}
c = avcodec_alloc_context();
picture = avcodec_alloc_frame();
/* put sample parameters */
c->bit_rate = 400000;
/* resolution must be a multiple of two */
c->width = 352;
c->height = 288;
/* frames per second */
c->time_base= (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;
/* open it */
if (avcodec_open(c, codec) < 0)
{
fprintf(stderr, "could not open codec\n");
exit(1);
}
f = fopen(filename, "wb");
if (!f)
{
fprintf(stderr, "could not open file! %s\n", filename);
exit(1);
}
/* alloc image and output buffer */
outbuf_size = 100000;
outbuf = malloc(outbuf_size);
size = c->width * c->height;
picture_buf = malloc((size * 3) / 2); /* size for YUV 420 */
picture->data[0] = picture_buf;
picture->data[1] = picture->data[0] + size;
picture->data[2] = picture->data[1] + size / 4;
picture->linesize[0] = c->width;
picture->linesize[1] = c->width / 2;
picture->linesize[2] = c->width / 2;
/* encode 1 second of video */
for(i=0; i<25; i++)
{
fflush(stdout);
/* prepare a dummy image */
/* Y */
for(y=0; y < c->height; y++)
{
for(x=0; x < c->width; x++)
{
picture->data[0][y * picture->linesize[0] + x] = x + y + i * 3;
}
}
/* Cb and Cr */
for(y=0; y < c->height/2; y++)
{
for(x=0; x < c->width/2; x++)
{
picture->data[1][y * picture->linesize[1] + x] = 128 + y + i * 2;
picture->data[2][y * picture->linesize[2] + x] = 64 + x + i * 5;
}
}
/* encode the image */
out_size = avcodec_encode_video(c, outbuf, outbuf_size, picture);
printf("encoding frame %3d (size=%5d)\n", i, out_size);
fwrite(outbuf, 1, out_size, f);
}
/* get the delayed frames */
for(; out_size; i++)
{
fflush(stdout);
out_size = avcodec_encode_video(c, outbuf, outbuf_size, NULL);
printf("write frame %3d (size=%5d)\n", i, out_size);
fwrite(outbuf, 1, out_size, f);
}
/* add sequence end code to have a real mpeg file */
outbuf[0] = 0x00;
outbuf[1] = 0x00;
outbuf[2] = 0x01;
outbuf[3] = 0xb7;
fwrite(outbuf, 1, 4, f);
fclose(f);
free(picture_buf);
free(outbuf);
avcodec_close(c);
av_free(c);
av_free(picture);
printf("\n");
}
/*
* Video decoding example
*/
static void pgm_save(unsigned char *buf, int wrap, int xsize, int ysize,
char *filename)
{
FILE *f;
int i;
f=fopen(filename,"w");
fprintf(f,"P5\n%d %d\n%d\n",xsize,ysize,255);
for(i=0; i* set end of buffer to 0 (this ensures that no overreading happens for damaged mpeg streams) */
memset(inbuf + INBUF_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);
printf("Video decoding\n");
/* find the mpeg1 video decoder */
codec = avcodec_find_decoder(CODEC_ID_MPEG1VIDEO);
if (!codec) {
fprintf(stderr, "codec not found\n");
exit(1);
}
c = avcodec_alloc_context();
picture = avcodec_alloc_frame();
if(codec->capabilities&CODEC_CAP_TRUNCATED)
c->flags|= CODEC_FLAG_TRUNCATED; /* we do not send complete frames */
/* For some codecs, such as msmpeg4 and mpeg4, width and height
MUST be initialized there because this information is not
available in the bitstream. */
/* open it */
if (avcodec_open(c, codec) < 0) {
fprintf(stderr, "could not open codec\n");
exit(1);
}
/* the codec gives us the frame size, in samples */
f = fopen(filename, "rb");
if (!f) {
fprintf(stderr, "could not open file! %s\n", filename);
exit(1);
}
frame = 0;
for(;;) {
avpkt.size = fread(inbuf, 1, INBUF_SIZE, f);
if (avpkt.size == 0)
break;
/* NOTE1: some codecs are stream based (mpegvideo, mpegaudio)
and this is the only method to use them because you cannot
know the compressed data size before analysing it.
BUT some other codecs (msmpeg4, mpeg4) are inherently frame
based, so you must call them with all the data for one
frame exactly. You must also initialize 'width' and
'height' before initializing them. */
/* NOTE2: some codecs allow the raw parameters (frame size,
sample rate) to be changed at any frame. We handle this, so
you should also take care of it */
/* here, we use a stream based decoder (mpeg1video), so we
feed decoder and see if it could decode a frame */
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);
/* the picture is allocated by the decoder. no need to
free it */
snprintf(buf, sizeof(buf), outfilename, frame);
pgm_save(picture->data[0], picture->linesize[0],
c->width, c->height, buf);
frame++;
}
avpkt.size -= len;
avpkt.data += len;
}
}
/* some codecs, such as MPEG, transmit the I and P frame with a
latency of one frame. You must do the following to have a
chance to get the last frame of the video */
avpkt.data = NULL;
avpkt.size = 0;
len = avcodec_decode_video2(c, picture, &got_picture, &avpkt);
if (got_picture)
{
printf("saving last frame %3d\n", frame);
fflush(stdout);
/* the picture is allocated by the decoder. no need to
free it */
snprintf(buf, sizeof(buf), outfilename, frame);
pgm_save(picture->data[0], picture->linesize[0],
c->width, c->height, buf);
frame++;
}
fclose(f);
avcodec_close(c);
av_free(c);
av_free(picture);
printf("\n");
}
int main(int argc, char **argv)
{
const char *filename;
/* must be called before using avcodec lib */
avcodec_init();
/* register all the codecs */
avcodec_register_all();
if (argc <= 1)
{
video_encode_example("asdf.mpg");
filename = "asdf.mpg";
}
else
{
filename = argv[1];
}
video_decode_example("%d.pgm", filename);
return 0;
}I tried with PIX_FMT_RGB24 and changing each channel accordingly. For this, I declared another :
AVFrame *pictureRGB ; and then : pictureRGB = avcodec_alloc_frame() ;
for(y=0; y < c->height; y++)
{
for(x=0; x < c->width; x++)
{
pictureRGB ->data[0][y * pictureRGB ->linesize[0] + x] = x + y + i * 3;
pictureRGB ->data[1][y * pictureRGB ->linesize[1] + x] = x + y + i * 3;
pictureRGB ->data[2][y * pictureRGB ->linesize[2] + x] = x + y + i * 3;
}
}But it gives errors ! I am totally new to this library. Is it possible to directly encode as a RGB dummy image rather than as YUV420P. Anybody out there with sound knowledge in this area ??? Thanks in advance !
-
Compress video with ffmpeg4android library
30 mars 2015, par Huy TowerI tried to follow ffmpeg4android library, and I get the problem when compressing the video, as the Log image below.
I use intent to transfer to Compressing Media class,
Intent intent = new Intent(this, CompressingMedia.class);
intent.putExtra("file_path", mLlItems.get(0).getPath());
startActivity(intent);This is the class was transfered to :
public class CompressingMedia extends BaseWizard {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Log.d(Prefs.TAG, "path " + intent.getExtras().getString("file_path"));
// /storage/emulated/0/DCIM/Camera/VID_20140312_090612.mp4
String command = "ffmpeg -y -i " + intent.getExtras().getString("file_path") +
" -strict experimental -s 320x240 -r 15 -aspect 3:4 -ab 12288 -vcodec mpeg4 -b 2097152 -sample_fmt s16 /sdcard/out.mp4";
// if you want to change the default work location (/sdcard/videokit/) use the uncomment the below method.
// It must be defined before calling the copyLicenseAndDemoFilesFromAssetsToSDIfNeeded method,
// in order for this method to copy the assets to the correct location.
// setWorkingFolder("/sdcard/videokit/");
// this will copy the license file and the demo video file.
// to the videokit work folder location.
// without the license file the library will not work.
copyLicenseAndDemoFilesFromAssetsToSDIfNeeded();
commandStr = command;
setCommand(commandStr);
runTranscoing();
}
}Although I received the notification Transcoding Successfully, but it looks like the capacity of file after compressing is always be 0. (the log in the bottom of images)
I don’t know the result as image below is good or not, I can not get the expected result - The video was compressed totally successfully.
Someone know why after compressing the file is always be 0, please tell me. Thanks.
This is the Log Cat :
03-13 14:49:45.655 : I/ActivityManager(6065) : Timeline :
Activity_launch_request id:app.cloudstringers time:3821235903-13 14:49:45.665 : V/Home(6065) : Global ID is 000400010007 ;Sell is 3
03-13 14:49:45.770 : D/ffmpeg4android(6065) : path
/storage/emulated/0/videokit/out.mp403-13 14:49:45.770 : I/ffmpeg4android(6065) : workingFolderPath :
/sdcard/videokit/03-13 14:49:45.775 : D/ffmpeg4android(6065) : Working directory exists,
not coping assests (license file and demo videos)03-13 14:49:45.785 : D/ffmpeg4android(6065) : output directory exists.
03-13 14:49:45.785 : I/ffmpeg4android(6065) : Command is set
03-13 14:49:45.785 : I/ffmpeg4android(6065) : set
remoteNotificationIconId : 003-13 14:49:45.785 : D/ffmpeg4android(6065) : Client Cannot unbind -
service not bound03-13 14:49:45.785 : D/ffmpeg4android(6065) : Client stopService()
03-13 14:49:45.790 : W/ContextImpl(6065) : Implicit intents with
startService are not safe : Intent
act=com.netcompss.ffmpeg4android.FFMpegRemoteServiceBridge
android.content.ContextWrapper.stopService:499
com.netcompss.ffmpeg4android_client.BaseWizard.stopService:451
com.netcompss.ffmpeg4android_client.BaseWizard.runTranscoing:28503-13 14:49:45.795 : I/ffmpeg4android(6065) :
!!!!!!!!!!!!!!!!!!services.size() : 103-13 14:49:45.795 : I/ffmpeg4android(6065) : putting Base categoty
03-13 14:49:45.810 : D/ffmpeg4android(6065) : started :
com.netcompss.ffmpeg4android.FFMpegRemoteServiceBridge03-13 14:49:45.810 : D/ffmpeg4android(6065) : Client startService()
03-13 14:49:45.810 : D/ffmpeg4android(6065) : bindService() called
03-13 14:49:45.815 : W/ContextImpl(6065) : Implicit intents with
startService are not safe : Intent
act=com.netcompss.ffmpeg4android.FFMpegRemoteServiceBridge
android.content.ContextWrapper.bindService:517
com.netcompss.ffmpeg4android_client.BaseWizard.bindService:462
com.netcompss.ffmpeg4android_client.BaseWizard.runTranscoing:28803-13 14:49:45.820 : D/ffmpeg4android(6065) : Client bindService()
03-13 14:49:45.935 : I/ffmpeg4android(6616) : =======service onCreate() :
Stopping forground (to overcome 2.3.x bug)03-13 14:49:45.935 : I/ffmpeg4android(6616) : =======service
onBind()=======03-13 14:49:45.940 : I/ffmpeg4android(6616) : ===onStartCommand called
03-13 14:49:45.940 : I/ffmpeg4android(6616) : ===onStartCommand cat :
Base03-13 14:49:45.940 : D/ffmpeg4android(6616) : onStartCommand,
START_STICKY, base Command03-13 14:49:45.955 : I/ffmpeg4android(6616) : get
remoteNotificationIconId : 003-13 14:49:45.955 : I/ffmpeg4android(6616) : notifIcon is set
03-13 14:49:45.955 : I/ffmpeg4android(6616) : Start RemoteService with
notification id : 532603-13 14:49:45.965 : I/ffmpeg4android(6616) : Run called.
03-13 14:49:45.965 : D/ffmpeg4android(6616) : Sleeping, waiting for
command03-13 14:49:45.970 : D/ffmpeg4android(6065) : Client
onServiceConnected()03-13 14:49:45.970 : I/ffmpeg4android(6065) : invokeService called
03-13 14:49:45.970 : I/Videokit(6065) : licenseCheck in path :
/sdcard/videokit03-13 14:49:45.970 : I/Videokit(6065) : isLicExistsComplex...
03-13 14:49:45.970 : I/Videokit(6065) : trying to open
/sdcard/videokit/ffmpeglicense.lic03-13 14:49:45.970 : I/Videokit(6065) : license file found...
03-13 14:49:45.970 : I/Videokit(6065) : time decoded : 1394535283
03-13 14:49:45.970 : I/Videokit(6065) : timeStrDec 1394535283 is a valid
number.03-13 14:49:45.970 : I/Videokit(6065) : time diff : 161702
03-13 14:49:45.970 : I/Videokit(6065) : You used 1 of your 15 trial
days.03-13 14:49:45.970 : I/ffmpeg4android(6065) : setting remote
notification info03-13 14:49:45.970 : D/ffmpeg4android(6616) : command items num : 21
03-13 14:49:45.970 : D/ffmpeg4android(6616) : command : ffmpeg -y -i
/storage/emulated/0/videokit/out.mp4 -strict experimental -s 320x240
-r 15 -aspect 3:4 -ab 12288 -vcodec mpeg4 -b 2097152 -sample_fmt s16 /sdcard/out.mp403-13 14:49:45.970 : D/ffmpeg4android(6616) : workingFolder from remote :
/sdcard/videokit03-13 14:49:45.970 : D/ffmpeg4android(6065) : deleteing :
/sdcard/videokit/vk.log isdeleted : true03-13 14:49:45.975 : D/ffmpeg4android(6065) : deleteing :
/sdcard/videokit/ffmpeg4android.log isdeleted : false03-13 14:49:45.975 : D/ffmpeg4android(6065) : deleteing :
/sdcard/videokit/videokit.log isdeleted : true03-13 14:49:45.980 : D/ffmpeg4android(6065) : Client invokeService()
03-13 14:49:45.980 : D/ffmpeg4android(6065) : Acquire wake lock
03-13 14:49:46.265 : D/ffmpeg4android(6616) : Sleeping, waiting for
command03-13 14:49:46.295 : D/ffmpeg4android(6065) : TranscodeBackground
doInBackground started03-13 14:49:46.295 : I/ffmpeg4android(6616) : =======remote service
runTranscoding ======03-13 14:49:46.340 : V/HomeAsync(6065) : TOTAL_SPACE is
1 ;AVAILABLE_SPACE is 0.45103-13 14:49:46.345 : I/ActivityManager(6065) : Timeline : Activity_idle
id : android.os.BinderProxy@423deed8 time:3821304503-13 14:49:46.345 : I/ActivityManager(6065) : Timeline : Activity_idle
id : android.os.BinderProxy@420323a0 time:3821304503-13 14:49:46.565 : D/dalvikvm(6616) : Trying to load lib
/data/app-lib/app.cloudstringers-2/libvideokit.so 0x41b285f003-13 14:49:46.570 : D/dalvikvm(6616) : Added shared lib
/data/app-lib/app.cloudstringers-2/libvideokit.so 0x41b285f003-13 14:49:46.570 : I/Videokit(6616) : Loading native library compiled
at 21:59:53 Oct 23 201303-13 14:49:46.575 : I/ffmpeg4android(6616) : ===============Running
command from thread path : /sdcard/videokit03-13 14:49:46.575 : I/Videokit(6616) : vk ffmpeg sdcardPath :
/sdcard/videokit03-13 14:49:46.575 : I/Videokit(6616) : licenseCheck in path :
/sdcard/videokit03-13 14:49:46.575 : I/Videokit(6616) : isLicExistsComplex...
03-13 14:49:46.575 : I/Videokit(6616) : trying to open
/sdcard/videokit/ffmpeglicense.lic03-13 14:49:46.575 : I/Videokit(6616) : license file found...
03-13 14:49:46.575 : I/ffmpeg4android(6616) :
=======ProgressBackgroundRemote doInBackground=========03-13 14:49:46.575 : I/Videokit(6616) : time decoded : 1394535283
03-13 14:49:46.575 : I/Videokit(6616) : timeStrDec 1394535283 is a valid
number.03-13 14:49:46.575 : I/Videokit(6616) : time diff : 161703
03-13 14:49:46.575 : I/Videokit(6616) : You used 1 of your 15 trial
days.03-13 14:49:46.575 : D/Videokit(6616) : license check rc : 0
03-13 14:49:46.575 : D/Videokit(6616) : run() called verion 2.0
03-13 14:49:46.575 : D/Videokit(6616) : run passing off to main()
03-13 14:49:46.800 : D/ffmpeg4android(6065) : onServiceDisconnected
03-13 14:49:48.640 : I/ffmpeg4android(6065) : Got real duration :
00:00:07.7803-13 14:49:48.640 : I/ffmpeg4android(6065) : ==== getting
currentVkLogSize from VK03-13 14:49:48.640 : D/ffmpeg4android(6065) : currentVkLogSize : 5751
03-13 14:49:48.645 : I/ffmpeg4android(6065) : No ffmpeg4android_log
file, using vk log03-13 14:49:48.645 : I/line(6065) : _rate, rate, width or height
03-13 14:49:48.650 : I/line(6065) : Statistics : 0 seeks, 0 writeouts
03-13 14:49:48.650 : I/line(6065) : Statistics : 72873 bytes read, 2
seeks03-13 14:49:48.650 : D/ffmpeg4android(6065) : currentTimeStr : exit
03-13 14:49:48.650 : D/ffmpeg4android(6065) : ============Found one of
the exit tokens in the log============03-13 14:49:48.650 : I/ffmpeg4android(6065) : onProgressUpdate : 100
03-13 14:49:48.650 : D/ffmpeg4android(6065) : Releasing wake lock
03-13 14:49:48.650 : D/ffmpeg4android(6065) : TranscodeBackground
onPostExecute03-13 14:49:48.700 : D/ffmpeg4android(6065) : /sdcard/videokit/null
length in bytes : 003-13 14:49:48.700 : D/ffmpeg4android(6065) : showNotifications
03-13 14:49:48.700 : W/ffmpeg4android(6065) : output file is not set use
the setOutputFilePath method to set the full output file path03-13 14:49:48.705 : I/ffmpeg4android(6065) : FFMPEG finished.
03-13 14:49:48.710 : D/ffmpeg4android(6065) : releaseService()
03-13 14:49:48.710 : D/ffmpeg4android(6065) : Client stopService()
03-13 14:49:48.710 : W/ContextImpl(6065) : Implicit intents with
startService are not safe : Intent
act=com.netcompss.ffmpeg4android.FFMpegRemoteServiceBridge
android.content.ContextWrapper.stopService:499
com.netcompss.ffmpeg4android_client.BaseWizard.stopService:451
com.netcompss.ffmpeg4android_client.BaseWizard.handleServiceFinished:513 -
FFMpeg -re flag and segmenter. If end of file is reached, wait ?
17 mars 2014, par user2901994This question is similar to
Keep FFMPEG running and waiting for new image files to encode and stream
FFMpeg's -re flag tells FFMpeg to "read input at native frame rate". This allows me to continuously append to the end of an audio file, as FFMpeg's segmenter runs, continuing to segment the file that is being appended to (for HLS).
Is there a way to get FFMpeg to wait, instead of exit, even it it reaches the end of the input file ? If say, latency causes FFMpeg to catch up with my appending to the end of the file ?