
Recherche avancée
Autres articles (23)
-
Personnaliser en ajoutant son logo, sa bannière ou son image de fond
5 septembre 2013, parCertains 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 juin 2013, parPré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 ) (...) -
Publier sur MédiaSpip
13 juin 2013Puis-je poster des contenus à partir d’une tablette Ipad ?
Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir
Sur d’autres sites (4522)
-
X264 Encoder API
16 avril 2014, par user1884325I’m studying the X264 API for encoding images.
So far I’ve built the X264 library and the following code snippet shows how far I am :
int frame_size;
x264_t* encoder;
x264_picture_t pic_in, pic_out;
x264_param_t x264Param;
int fps = 20;
int width = 1280;
int height = 720;
x264_nal_t* nals;
int i_nals;
x264_param_default_preset(&x264Param, "veryfast", "zerolatency");
x264Param.i_threads = 1;
x264Param.i_width = 1280;
x264Param.i_height = 720;
x264Param.i_fps_num = fps;
x264Param.i_fps_den = 1;
x264Param.i_keyint_max = fps;
x264Param.b_intra_refresh = 1;
x264Param.rc.i_rc_method = X264_RC_CRF;
x264Param.rc.f_rf_constant = 25;
x264Param.rc.f_rf_constant_max = 35;
x264Param.b_repeat_headers = 1;
x264Param.b_annexb = 1;
x264_param_apply_profile(&x264Param, "baseline");
encoder = x264_encoder_open(&x264Param);
x264_picture_alloc(&pic_in, X264_CSP_BGR, width, height);
/* How to fill in bitmap data? */
frame_size = x264_encoder_encode(encoder, &nals, &i_nals, &pic_in, &pic_out);
if (frame_size >= 0)
{
printf("OK\n");
}So I’m trying to encode a 24bit BGR bitmap image. However, the x264 header file doesn’t show any API function for writing the bitmap image to the encoder. How is this done ?
EDIT
This code snippet seems to work. I would appreciate a review and some comments. Thanks.
int frame_size;
int accum_frame_size;
x264_t* encoder;
x264_picture_t pic_in, pic_out;
x264_param_t x264Param;
int fps = 20;
int width = 1280;
int height = 720;
x264_nal_t* nals;
int i_nals;
int64_t frameCount = 0;
int k;
for (k = 0; k < (1280*3*720); k++)
{
bgr[k] = rand();
}
x264_param_default_preset(&x264Param, "veryfast", "zerolatency");
x264Param.i_threads = 1;
x264Param.i_width = 1280;
x264Param.i_height = 720;
x264Param.i_fps_num = fps;
x264Param.i_fps_den = 1;
x264Param.i_keyint_max = fps;
x264Param.b_intra_refresh = 1;
x264Param.rc.i_rc_method = X264_RC_CRF;
x264Param.i_csp = X264_CSP_BGR;
x264Param.rc.f_rf_constant = 25;
x264Param.rc.f_rf_constant_max = 35;
x264Param.b_repeat_headers = 1;
x264Param.b_annexb = 1;
x264_param_apply_profile(&x264Param, "baseline");
encoder = x264_encoder_open(&x264Param);
x264_picture_alloc(&pic_in, X264_CSP_BGR, width, height);
/* Load 24-bit BGR bitmap */
pic_in.img.i_csp = X264_CSP_BGR;
pic_in.img.i_plane = 1;
pic_in.img.i_stride[0] = 3 * 1280;
pic_in.img.plane[0] = bgr;
pic_in.i_pts = frameCount;
pic_in.i_type = X264_TYPE_AUTO;
pic_out.i_pts = frameCount;
/* Returns a frame size of 912 for first frame in this case */
frame_size = x264_encoder_encode(encoder, &nals, &i_nals, &pic_in, &pic_out);
printf("Decoder returned frame size = %d \n", frame_size);
printf("Decoder returned %d NAL units \n", i_nals);
if (frame_size >= 0)
{
int i;
int j;
accum_frame_size = 0;
for (i = 0; i < i_nals; i++)
{
printf("******************* NAL %d (%d bytes) *******************\n", i, nals[i].i_payload);
for (j = 0; j < nals[i].i_payload; j++)
{
if (j == 0) printf("First 10 bytes: ");
if (j < 10) printf("%02X |", nals[i].p_payload[j]);
accum_frame_size++;
}
printf("\n");
}
}
printf("Verified frame size = %d \n", accum_frame_size);EDIT #2
The encoder outputs this :x264 [error]: baseline profile doesn't support 4:4:4
x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
x264 [info]: profile High 4:4:4 Predictive, level 3.1, 4:4:4 8-bit
Decoder returned frame size = 1467194
Decoder returned 4 NAL units
******************* NAL 0 (31 bytes) *******************
First 10 bytes: 00 |00 |00 |01 |67 |F4 |00 |1F |91 |89 |
******************* NAL 1 (8 bytes) *******************
First 10 bytes: 00 |00 |00 |01 |68 |EF |1F |2C |
******************* NAL 2 (595 bytes) *******************
First 10 bytes: 00 |00 |01 |06 |05 |FF |FF |4C |DC |45 |
******************* NAL 3 (1466560 bytes) *******************
First 10 bytes: 00 |00 |01 |65 |88 |82 |0A |FF |F5 |B0 |
Verified frame size = 1467194Isn’t each NAL unit supposed to start with 0x00 0x00 0x00 0x01 ?
szatmary : I appreciate your valuable feedback. So you’re saying that each NAL unit does not necessarily start with 0,0,0,1. However, I’m a bit unclear on your answer. Are you implying that with a certain configuration the NAL units will start with 0,0,0,1 ? If so, which configuration is that ? I need to make sure that each NAL unit I transmit out on the network to a remote receiver starts with 0,0,0,1. Prior to exploring the x264 library I was using the x264 exe and piped BMP data in and encoded data out from the x264 process. I then parsed the encoder output and looked for NAL units by looking for 0,0,0,1. How do I accomplish the same with the x264 library ?
Regarding libswscale :
I downloaded the ffmpeg source and ran configure and make in MINGW. After the process had completed I couldn’t find anything but a number of .exe files. How do I build actual static libraries (.lib) which I can use in a Visual Studio project ?
-
Mac build ffmpeg for Android
23 avril 2019, par Liu SilongI want to compile ffmpeg on my Mac. The ndk version is r19c and the FFmpeg version is 4.1.3. The build script is copied from this article. But there are some problems when compiling, as follows:
Thanks!!!
-
Problem using -to, combining -to with framerate change
21 avril 2019, par LLLI have a question regarding the use of the
-to
option :In FFmpeg version 3 (at least 3.2.12 included in Debian 9),
-to
was an output only option. In more recent version it seems to be accepted as an input option as well (as written here https://www.ffmpeg.org/ffmpeg.html#Main-options) but I run into limitations when using in conjunction with-r
.
What I expect, if I increase the framerate of the input, is that the output will be shorter. But it is not the case if I’m not using the whole input :ffmpeg -r 30 -to 10 -i my18fpsFile.avi out.mp4
out.mp4 will be 10 seconds long, so the input has been read further than 10 seconds in.
In other terms, even as an input option, it seems to behave like an output option.Tested with ffmpeg version N-48102-g7cab5471b2-static https://johnvansickle.com/ffmpeg/ on Debian Stretch.
Thanks for your advice or confirmation that this is not normal.
Edit : Thank you Gyan for your reply and your explanation.
While it seems to work, some testing makes me remember why I wasn’t satisfied with this solution :
Stating-r
as an input option forces the framerate for the reading of the input and ensures one frame in the input is one frame in the output. This is what I want.Using yours solution with the filter on the output does cause dropped frames sometimes (which I have never had with
-r
).
However, some more testing draws me to the conclusion that the dropped frames problem happens only with an mkv container ! Your solution works fine with other containers (as far as I have tested), but with mkv (and various video codecs, it doesn’t seem to make a difference), I get a lot of dropped frames.
Using-r
with mkv causes no dropped frames.In conclusion, I’m not sure how to generalize this solution, as avoiding mkv is annoying for me.
But thank you, and if anyone has some more experience or ideas, please chime in.Adding logs :
Note the line :
[avi @ 0x6cf6880] parser not found for codec rawvideo, packets or times may be invalid
I guess it is the cause of the problem ? Is there a solution if the files are raw avi with no index ?Although the warning is the same, I don’t get dropped frames if I use the exact same command only with f.mov instead of mkv.
ffmpeg -v 40 -to 10 -i f.avi -vf setpts=N/30/TB -r 30 f.mkv
ffmpeg version N-48102-g7cab5471b2-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-6 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
libavutil 56. 26.100 / 56. 26.100
libavcodec 58. 46.100 / 58. 46.100
libavformat 58. 26.100 / 58. 26.100
libavdevice 58. 6.101 / 58. 6.101
libavfilter 7. 48.100 / 7. 48.100
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
libpostproc 55. 4.100 / 55. 4.100
[avi @ 0x6cf6880] parser not found for codec rawvideo, packets or times may be invalid.
Last message repeated 1 times
Input #0, avi, from 'f.avi':
Duration: 00:01:11.62, start: 0.000000, bitrate: 846067 kb/s
Stream #0:0: Video: rawvideo, 1 reference frame, bgr24, 1632x1200, 846638 kb/s, 18 fps, 18 tbr, 18 tbn, 18 tbc
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[graph 0 input from stream 0:0 @ 0x6d0fc00] w:1632 h:1200 pixfmt:bgr24 tb:1000/17999 fr:17999/1000 sar:0/1 sws_param:flags=2
[auto_scaler_0 @ 0x6d105c0] w:iw h:ih flags:'bicubic' interl:0
[format @ 0x6cfe5c0] auto-inserting filter 'auto_scaler_0' between the filter 'Parsed_setpts_0' and the filter 'format'
[trim_in_0_0 @ 0x6d109c0] TB:0.055559 FRAME_RATE:17.999000 SAMPLE_RATE:nan
[auto_scaler_0 @ 0x6d105c0] w:1632 h:1200 fmt:bgr24 sar:0/1 -> w:1632 h:1200 fmt:yuv444p sar:0/1 flags:0x4
[libx264 @ 0x6cfb2c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x6cfb2c0] profile High 4:4:4 Predictive, level 4.0, 4:4:4, 8-bit
[libx264 @ 0x6cfb2c0] 264 - core 157 r2935 545de2f - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 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=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, matroska, to 'f.mkv':
Metadata:
encoder : Lavf58.26.100
Stream #0:0: Video: h264 (libx264), 1 reference frame (H264 / 0x34363248), yuv444p, 1632x1200, q=-1--1, 30 fps, 1k tbn, 30 tbc
Metadata:
encoder : Lavc58.46.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
Past duration 0.666481 too large
*** dropping frame 5 from stream 0 at ts 3
Past duration 0.666191 too large
*** dropping frame 9 from stream 0 at ts 8
Past duration 0.665916 too large
*** dropping frame 13 from stream 0 at ts 13
Past duration 0.665642 too large
*** dropping frame 17 from stream 0 at ts 18
Past duration 0.665367 too large
*** dropping frame 21 from stream 0 at ts 23
Past duration 0.665092 too large
*** dropping frame 25 from stream 0 at ts 28
Past duration 0.664803 too large
*** dropping frame 29 from stream 0 at ts 33me=00:00:00.00 bitrate=N/A dup=0 drop=6 speed= 0x
Past duration 0.664528 too large
*** dropping frame 33 from stream 0 at ts 38
Past duration 0.664253 too large
*** dropping frame 37 from stream 0 at ts 43
Past duration 0.663979 too large
*** dropping frame 41 from stream 0 at ts 48
Past duration 0.663689 too large
*** dropping frame 45 from stream 0 at ts 53
Past duration 0.663414 too large 1kB time=00:00:00.00 bitrate=N/A dup=0 drop=11 speed= 0x
*** dropping frame 49 from stream 0 at ts 58
Past duration 0.663139 too large
*** dropping frame 53 from stream 0 at ts 63ime=00:00:00.00 bitrate=5768.0kbits/s dup=0 drop=12 speed=0.00049x
Past duration 0.662865 too large
*** dropping frame 57 from stream 0 at ts 68ime=00:00:00.13 bitrate= 43.0kbits/s dup=0 drop=13 speed=0.0514x
Past duration 0.662590 too large
*** dropping frame 61 from stream 0 at ts 73ime=00:00:00.30 bitrate= 19.2kbits/s dup=0 drop=14 speed=0.094x
Past duration 0.662300 too large
*** dropping frame 65 from stream 0 at ts 78ime=00:00:00.46 bitrate= 12.3kbits/s dup=0 drop=15 speed=0.125x
Past duration 0.662025 too large 1kB time=00:00:00.60 bitrate= 9.6kbits/s dup=0 drop=16 speed=0.142x
*** dropping frame 69 from stream 0 at ts 83
Past duration 0.661751 too large 1kB time=00:00:00.76 bitrate= 7.5kbits/s dup=0 drop=17 speed=0.162x
*** dropping frame 73 from stream 0 at ts 88
Past duration 0.661476 too large 1kB time=00:00:00.93 bitrate= 6.2kbits/s dup=0 drop=18 speed=0.175x
*** dropping frame 77 from stream 0 at ts 93
Past duration 0.661201 too large
*** dropping frame 81 from stream 0 at ts 98ime=00:00:01.13 bitrate=8036.9kbits/s dup=0 drop=19 speed=0.193x
Past duration 0.660912 too large
*** dropping frame 85 from stream 0 at ts 103me=00:00:01.30 bitrate=7005.3kbits/s dup=0 drop=20 speed=0.204x
Past duration 0.660637 too large
*** dropping frame 89 from stream 0 at ts 108me=00:00:01.46 bitrate=6208.3kbits/s dup=0 drop=21 speed=0.21x
Past duration 0.660362 too large
*** dropping frame 93 from stream 0 at ts 113
Past duration 0.660088 too large 1113kB time=00:00:01.76 bitrate=5154.9kbits/s dup=0 drop=23 speed=0.235x
*** dropping frame 97 from stream 0 at ts 118
Past duration 0.659813 too large 1113kB time=00:00:01.83 bitrate=4969.4kbits/s dup=0 drop=24 speed=0.229x
*** dropping frame 101 from stream 0 at ts 123
Past duration 0.659523 too large
*** dropping frame 105 from stream 0 at ts 128e=00:00:02.13 bitrate=4270.8kbits/s dup=0 drop=25 speed=0.235x
Past duration 0.659248 too large
*** dropping frame 109 from stream 0 at ts 133
Past duration 0.658974 too large 2399kB time=00:00:02.43 bitrate=8075.2kbits/s dup=0 drop=27 speed=0.252x
*** dropping frame 113 from stream 0 at ts 138
Past duration 0.658699 too large
*** dropping frame 117 from stream 0 at ts 143e=00:00:02.63 bitrate=7462.1kbits/s dup=0 drop=28 speed=0.25x
Past duration 0.658424 too large
*** dropping frame 121 from stream 0 at ts 148
Past duration 0.658134 too large 2399kB time=00:00:02.93 bitrate=6699.1kbits/s dup=0 drop=30 speed=0.266x
*** dropping frame 125 from stream 0 at ts 153
Past duration 0.657860 too large
*** dropping frame 129 from stream 0 at ts 158e=00:00:03.13 bitrate=6271.6kbits/s dup=0 drop=31 speed=0.265x
Past duration 0.657585 too large
*** dropping frame 133 from stream 0 at ts 163
Past duration 0.657310 too large 2399kB time=00:00:03.33 bitrate=5895.4kbits/s dup=0 drop=33 speed=0.271x
*** dropping frame 137 from stream 0 at ts 168e=00:00:03.46 bitrate=5667.6kbits/s dup=0 drop=33 speed=0.269x
Past duration 0.657036 too large
*** dropping frame 141 from stream 0 at ts 173
Past duration 0.656746 too large
No more output streams to write to, finishing.e=00:00:03.80 bitrate=5171.0kbits/s dup=0 drop=35 speed=0.279x
frame= 145 fps=8.0 q=-1.0 Lsize= 4590kB time=00:00:05.90 bitrate=6372.0kbits/s dup=0 drop=35 speed=0.326x
video:4588kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.042357%
Input file #0 (f.avi):
Input stream #0:0 (video): 181 packets read (1063411200 bytes); 181 frames decoded;
Total: 181 packets (1063411200 bytes) demuxed
Output file #0 (f.mkv):
Output stream #0:0 (video): 145 frames encoded; 145 packets muxed (4698140 bytes);
Total: 145 packets (4698140 bytes) muxed
[AVIOContext @ 0x6cfe940] Statistics: 20 seeks, 33 writeouts
[libx264 @ 0x6cfb2c0] frame I:4 Avg QP:25.17 size: 84331
[libx264 @ 0x6cfb2c0] frame P:40 Avg QP:26.64 size: 47807
[libx264 @ 0x6cfb2c0] frame B:101 Avg QP:27.85 size: 24236
[libx264 @ 0x6cfb2c0] consecutive B-frames: 4.1% 8.3% 2.1% 85.5%
[libx264 @ 0x6cfb2c0] mb I I16..4: 29.5% 0.0% 70.5%
[libx264 @ 0x6cfb2c0] mb P I16..4: 12.0% 0.0% 20.1% P16..4: 38.5% 16.5% 4.5% 0.0% 0.0% skip: 8.4%
[libx264 @ 0x6cfb2c0] mb B I16..4: 1.8% 0.0% 2.7% B16..8: 46.5% 11.4% 1.6% direct: 7.6% skip:28.4% L0:40.6% L1:55.6% BI: 3.8%
[libx264 @ 0x6cfb2c0] coded y,u,v intra: 55.9% 11.8% 19.2% inter: 22.1% 1.1% 2.6%
[libx264 @ 0x6cfb2c0] i16 v,h,dc,p: 30% 15% 7% 48%
[libx264 @ 0x6cfb2c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 26% 16% 18% 7% 8% 8% 7% 7% 3%
[libx264 @ 0x6cfb2c0] Weighted P-Frames: Y:17.5% UV:10.0%
[libx264 @ 0x6cfb2c0] ref P L0: 54.3% 15.8% 20.0% 8.8% 1.2%
[libx264 @ 0x6cfb2c0] ref B L0: 87.9% 9.3% 2.8%
[libx264 @ 0x6cfb2c0] ref B L1: 95.9% 4.1%
[libx264 @ 0x6cfb2c0] kb/s:6263.27
[AVIOContext @ 0x6cff580] Statistics: 1063666996 bytes read, 4 seeks