
Recherche avancée
Autres articles (16)
-
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 -
Librairies et logiciels spécifiques aux médias
10 décembre 2010, parPour un fonctionnement correct et optimal, plusieurs choses sont à prendre en considération.
Il est important, après avoir installé apache2, mysql et php5, d’installer d’autres logiciels nécessaires dont les installations sont décrites dans les liens afférants. Un ensemble de librairies multimedias (x264, libtheora, libvpx) utilisées pour l’encodage et le décodage des vidéos et sons afin de supporter le plus grand nombre de fichiers possibles. Cf. : ce tutoriel ; FFMpeg avec le maximum de décodeurs et (...) -
Other interesting software
13 avril 2011, parWe don’t claim to be the only ones doing what we do ... and especially not to assert claims to be the best either ... What we do, we just try to do it well and getting better ...
The following list represents softwares that tend to be more or less as MediaSPIP or that MediaSPIP tries more or less to do the same, whatever ...
We don’t know them, we didn’t try them, but you can take a peek.
Videopress
Website : http://videopress.com/
License : GNU/GPL v2
Source code : (...)
Sur d’autres sites (5689)
-
ffmpeg determine correct codec to use
6 janvier 2015, par nhaI am trying to use
.y4m
files that I feed into Chrome for playing.
This is the only format that I can use.I have a set of
.y4m
files that are working for my use case, taken from here.
For example let’s say that I use the file mobile_qcif_7.5fps.y4m.I also have a
.mp4
file (specifically the samplesmall.mp4
file from techslides ). I know how to convertsmall.mp4
tosmall.y4m
with the following command :ffmpeg -y -i small.mp4 small.y4m
I would like the resulting file to be accepted by Chrome, just like the other file.
What options should I use (and how to find them) ?Additional information
ffprobe
gives :$ ffprobe small.y4m
avprobe version 0.8.13-6:0.8.13-0ubuntu0.13.10.1, Copyright (c) 2007-2014 the Libav developers
built on Jul 15 2014 13:48:35 with gcc 4.8.1
[yuv4mpegpipe @ 0x23160c0] Estimating duration from bitrate, this may be inaccurate
Input #0, yuv4mpegpipe, from 'small.y4m':
Duration: N/A, bitrate: N/A
Stream #0.0: Video: rawvideo, yuv420p, 560x320, 30 fps, 30 tbr, 30 tbn, 30 tbc
$ ffprobe mobile_qcif_7.5fps.y4m
avprobe version 0.8.13-6:0.8.13-0ubuntu0.13.10.1, Copyright (c) 2007-2014 the Libav developers
built on Jul 15 2014 13:48:35 with gcc 4.8.1
[yuv4mpegpipe @ 0x1e080c0] max_analyze_duration reached
[yuv4mpegpipe @ 0x1e080c0] Estimating duration from bitrate, this may be inaccurate
Input #0, yuv4mpegpipe, from 'mobile_qcif_7.5fps.y4m':
Duration: N/A, bitrate: N/A
Stream #0.0: Video: rawvideo, yuv420p, 176x144, PAR 128:117 DAR 1408:1053, 7.50 fps, 7.50 tbr, 7.50 tbn, 7.50 tbcOS : I am using ffmpeg in Ubuntu 13.10 from the default repository : I ran
sudo apt-get install ffmpeg libavcodec-extra-53
Complete console output
$ ffmpeg -y -i small.mp4 small.y4m
ffmpeg version 0.8.13-6:0.8.13-0ubuntu0.13.10.1, Copyright (c) 2000-2014 the Libav developers
built on Jul 15 2014 13:48:35 with gcc 4.8.1
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'small.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isomavc1
creation_time : 2010-03-20 21:29:11
encoder : HandBrake 0.9.4 2009112300
Duration: 00:00:05.56, start: 0.000000, bitrate: 551 kb/s
Stream #0.0(und): Video: h264 (Constrained Baseline), yuv420p, 560x320, 465 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc
Metadata:
creation_time : 2010-03-20 21:29:11
Stream #0.1(eng): Audio: aac, 48000 Hz, mono, s16, 83 kb/s
Metadata:
creation_time : 2010-03-20 21:29:11
[buffer @ 0x7274e0] w:560 h:320 pixfmt:yuv420p
Output #0, yuv4mpegpipe, to 'small.y4m':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isomavc1
creation_time : 2010-03-20 21:29:11
encoder : Lavf53.21.1
Stream #0.0(und): Video: rawvideo, yuv420p, 560x320, q=2-31, 200 kb/s, 90k tbn, 30 tbc
Metadata:
creation_time : 2010-03-20 21:29:11
Stream mapping:
Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
frame= 166 fps= 0 q=0.0 Lsize= 43576kB time=5.53 bitrate=64513.5kbits/s
video:0kB audio:0kB global headers:0kB muxing overhead inf%Head of the files
Not sure if this is relevant, but the text content of both files begin like that :
mobile_qcif_7.5fps.y4m
YUV4MPEG2 W176 H144 F15:2 Ip A128:117
FRAME
small.y4m (invalid)
YUV4MPEG2 W560 H320 F15:2 Ip A0:0 C420mpeg2 XYSCSS=420MPEG2
FRAMEAdditional experiment
Taking the sample
mobile_qcif_7.5fps.y4m
, turning it into a.mp4
file and then back into a.y4m
produces an invalid file (at least for Chrome).Answer to comments in the answer of @SirDarius
Following the suggestion of @SirDarius ; I tried the following commands.
They failed to produce a valid file.# [COMMAND] # [RESULT] [HEADER]
ffmpeg -i small.mp4 -vf fps=7.5 -an -c:v rawvideo -f yuv4mpegpipe -pix_fmt yuv444p -y small_yuv444p.y4m # KO YUV4MPEG2 W560 H320 F15:2 Ip A0:0 C444 XYSCSS=444
ffmpeg -i small.mp4 -vf fps=7.5 -an -c:v rawvideo -f yuv4mpegpipe -pix_fmt yuv422p -y small_yuv422p.y4m # KO YUV4MPEG2 W560 H320 F15:2 Ip A0:0 C422 XYSCSS=422
ffmpeg -i small.mp4 -vf fps=7.5 -an -c:v rawvideo -f yuv4mpegpipe -pix_fmt yuv420p -y small_yuv420p.y4m # KO YUV4MPEG2 W560 H320 F15:2 Ip A0:0 C420mpeg2 XYSCSS=420MPEG2
ffmpeg -i small.mp4 -vf fps=7.5 -an -c:v rawvideo -f yuv4mpegpipe -pix_fmt yuv411p -y small_yuv411p.y4m # KO YUV4MPEG2 W560 H320 F15:2 Ip A0:0 C411 XYSCSS=411
ffmpeg -i small.mp4 -vf fps=7.5 -an -c:v rawvideo -f yuv4mpegpipe -strict -1 -pix_fmt yuv420p9 -y small_yuv420p9.y4m # KO YUV4MPEG2 W560 H320 F15:2 Ip A0:0 C420p9 XYSCSS=420P9
ffmpeg -i small.mp4 -vf fps=7.5 -an -c:v rawvideo -f yuv4mpegpipe -strict -1 -pix_fmt yuv420p12 -y small_yuv420p12.y4m # KO YUV4MPEG2 W560 H320 F15:2 Ip A0:0 C420p12 XYSCSS=420P12
ffmpeg -i small.mp4 -vf fps=7.5 -an -c:v rawvideo -f yuv4mpegpipe -strict -1 -pix_fmt yuv420p14 -y small_yuv420p14.y4m # KO YUV4MPEG2 W560 H320 F15:2 Ip A0:0 C420p14 XYSCSS=420P14
ffmpeg -i small.mp4 -vf fps=7.5 -an -c:v rawvideo -f yuv4mpegpipe -strict -1 -pix_fmt yuv420p16 -y small_yuv420p16.y4m # KO YUV4MPEG2 W560 H320 F15:2 Ip A0:0 C420p16 XYSCSS=420P16When trying other formats (like
yuv420p12be
, which was in the output of-pix_fmts
), I had the following output (hence my previous trials) :$ ffmpeg -i small.mp4 -vf fps=7.5 -an -c:v rawvideo -f yuv4mpegpipe -pix_fmt yuv420p12be -y small_yuv420p12be.y4m
ffmpeg version N-68884-g3ebd76a Copyright (c) 2000-2015 the FFmpeg developers
built on Jan 6 2015 11:03:21 with gcc 4.8 (Ubuntu/Linaro 4.8.1-10ubuntu9)
configuration:
libavutil 54. 16.100 / 54. 16.100
libavcodec 56. 19.100 / 56. 19.100
libavformat 56. 18.100 / 56. 18.100
libavdevice 56. 3.100 / 56. 3.100
libavfilter 5. 6.100 / 5. 6.100
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x21d0220] overread end of atom 'colr' by 1 bytes
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'small.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isomavc1
creation_time : 2010-03-20 21:29:11
encoder : HandBrake 0.9.4 2009112300
Duration: 00:00:05.57, start: 0.000000, bitrate: 551 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709), 560x320, 465 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc (default)
Metadata:
creation_time : 2010-03-20 21:29:11
encoder : JVT/AVC Coding
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 83 kb/s (default)
Metadata:
creation_time : 2010-03-20 21:29:11
[yuv4mpegpipe @ 0x21d8180] ERROR: yuv4mpeg can only handle yuv444p, yuv422p, yuv420p, yuv411p and gray8 pixel formats. And using 'strict -1' also yuv444p9, yuv422p9, yuv420p9, yuv444p10, yuv422p10, yuv420p10, yuv444p12, yuv422p12, yuv420p12, yuv444p14, yuv422p14, yuv420p14, yuv444p16, yuv422p16, yuv420p16 and gray16 pixel formats. Use -pix_fmt to select one.
Output #0, yuv4mpegpipe, to 'small_yuv420p12be.y4m':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isomavc1
encoder : Lavf56.18.100
Stream #0:0(und): Video: rawvideo ([12][11]3Y / 0x59330B0C), yuv420p12be, 560x320, q=2-31, 200 kb/s, 7.50 fps, 7.50 tbn, 7.50 tbc (default)
Metadata:
creation_time : 2010-03-20 21:29:11
encoder : Lavc56.19.100 rawvideo
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native))
Could not write header for output file #0 (incorrect codec parameters ?): Input/output errorAfter that, I also tried to edit with an hexadecimal editor (bless) the small_yuv420p.y4m file. I replace
C420mpeg2
byC420
, and the file was accepted by Chrome.
What does the number in420p[number]
correspond to ? It is not explained there.
Is there any way to makeffmpeg
output this kind of header files ?@SirDarius, thank you again for your help.
The question
(in case you forgot after this text blob)
How can I convert the
small.mp4
into asmall.y4m
file that has the same properties as themobile_qcif_7.5fps.y4m
file ? -
ffmpeg - Adding audio to a complex filter
9 janvier 2015, par user3630651I am using c# to programmatically write an ffmpeg command to crossfade a logo into a video. I also need to cut a couple of seconds into the video.
Here is the currently working ffmpeg command :
(No audio)-y -loop 1 -t 3.2 -i "logo.png" -i "video.mp4" -r 29.97 -f lavfi -i color=black -filter_complex "
[0:v] scale=640:-1, crop=640:360, format=pix_fmts=yuv420p, fade=t=out:st=2.7:d=0.5:alpha=1, setpts=PTS-STARTPTS [va0];
[1:v] format=pix_fmts=yuv420p, fade=t=in:st=0:d=0.5:alpha=1, setpts=PTS-STARTPTS + 3.2 / TB [va1];
[2:v] scale=640:-1, crop=640:360, trim=duration=147.768 [over];
[over][va0] overlay [over1];
[over1][va1] overlay=format=yuv420 [outv]
" -vcodec libx264 -map [outv] "Finished.mp4"I want to add audio from "video.mp4"([1:a]) to the output starting a few seconds in, how do I go about this without causing a buffer overflow ?
Thank you for your help in advance !
Edit, Adding ffmpeg output on request :
ffmpeg version N-66012-g97b8809 Copyright (c) 2000-2014 the FFmpeg developers
built on Sep 1 2014 00:21:15 with gcc 4.8.3 (GCC)
configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-decklink --enable-zlib
libavutil 54. 7.100 / 54. 7.100
libavcodec 56. 1.100 / 56. 1.100
libavformat 56. 3.100 / 56. 3.100
libavdevice 56. 0.100 / 56. 0.100
libavfilter 5. 0.103 / 5. 0.103
libswscale 3. 0.100 / 3. 0.100
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 0.100 / 53. 0.100
Input #0, image2, from 'C:\VideoApplicationAssets\test\logo.png':
Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
Stream #0:0: Video: png, rgba, 500x400 [SAR 9065:9065 DAR 5:4], 25 fps, 25 tbr, 25 tbn, 25 tbc
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\VideoApplicationAssets\test\2.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2014-03-07 04:36:36
Duration: 00:02:24.68, start: 0.000000, bitrate: 574 kb/s
Stream #1:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 475 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #1:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 96 kb/s (default)
Metadata:
creation_time : 2014-03-07 04:36:36
handler_name : IsoMedia File Produced by Google, 5-11-2011
Input #2, lavfi, from 'color=black':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #2:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
[libx264 @ 000000000049cf60] using SAR=1/1
[libx264 @ 000000000049cf60] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 000000000049cf60] profile High, level 3.0
[libx264 @ 000000000049cf60] 264 - core 142 r2479 dd79a61 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 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, mp4, to 'C:\VideoApplicationAssets\test\Finished.mp4':
Metadata:
encoder : Lavf56.3.100
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 29.97 fps, 11988 tbn, 29.97 tbc (default)
Metadata:
encoder : Lavc56.1.100 libx264
Stream mapping:
Stream #0:0 (png) -> scale
Stream #1:0 (h264) -> format
Stream #2:0 (rawvideo) -> scale
overlay -> Stream #0:0 (libx264)
Press [q] to stop, [?] for help
frame= 149 fps=0.0 q=29.0 size= 23kB time=00:00:03.23 bitrate= 57.6kbits/s
frame= 240 fps=239 q=29.0 size= 200kB time=00:00:06.27 bitrate= 260.6kbits/s
frame= 345 fps=229 q=29.0 size= 343kB time=00:00:09.77 bitrate= 287.2kbits/s
frame= 431 fps=215 q=29.0 size= 496kB time=00:00:12.64 bitrate= 321.1kbits/s
frame= 502 fps=200 q=29.0 size= 633kB time=00:00:15.01 bitrate= 345.5kbits/s
frame= 659 fps=219 q=29.0 size= 737kB time=00:00:20.25 bitrate= 298.0kbits/s
frame= 843 fps=240 q=26.0 size= 790kB time=00:00:26.39 bitrate= 245.1kbits/s
frame= 988 fps=246 q=29.0 size= 982kB time=00:00:31.23 bitrate= 257.7kbits/s
frame= 1124 fps=249 q=29.0 size= 1200kB time=00:00:35.76 bitrate= 274.9kbits/s
frame= 1292 fps=257 q=29.0 size= 1410kB time=00:00:41.37 bitrate= 279.3kbits/s
frame= 1437 fps=260 q=29.0 size= 1773kB time=00:00:46.21 bitrate= 314.2kbits/s
frame= 1565 fps=260 q=29.0 size= 2206kB time=00:00:50.48 bitrate= 358.0kbits/s
frame= 1709 fps=262 q=29.0 size= 2542kB time=00:00:55.28 bitrate= 376.7kbits/s
frame= 1872 fps=266 q=29.0 size= 2920kB time=00:01:00.72 bitrate= 393.9kbits/s
frame= 2000 fps=265 q=29.0 size= 3157kB time=00:01:04.99 bitrate= 397.9kbits/s
frame= 2108 fps=262 q=29.0 size= 3378kB time=00:01:08.60 bitrate= 403.4kbits/s
frame= 2196 fps=257 q=29.0 size= 3592kB time=00:01:11.53 bitrate= 411.4kbits/s
frame= 2291 fps=254 q=29.0 size= 3791kB time=00:01:14.70 bitrate= 415.7kbits/s
frame= 2394 fps=251 q=29.0 size= 4013kB time=00:01:18.14 bitrate= 420.7kbits/s
frame= 2492 fps=248 q=29.0 size= 4191kB time=00:01:21.41 bitrate= 421.7kbits/s
frame= 2670 fps=253 q=29.0 size= 4323kB time=00:01:27.35 bitrate= 405.4kbits/s
frame= 2829 fps=256 q=29.0 size= 4437kB time=00:01:32.65 bitrate= 392.3kbits/s
frame= 2972 fps=257 q=29.0 size= 4749kB time=00:01:37.43 bitrate= 399.3kbits/s
frame= 3143 fps=261 q=29.0 size= 5016kB time=00:01:43.13 bitrate= 398.4kbits/s
frame= 3247 fps=259 q=29.0 size= 5430kB time=00:01:46.60 bitrate= 417.3kbits/s
frame= 3396 fps=260 q=29.0 size= 5737kB time=00:01:51.57 bitrate= 421.2kbits/s
frame= 3544 fps=262 q=29.0 size= 5995kB time=00:01:56.51 bitrate= 421.5kbits/s
frame= 3691 fps=263 q=29.0 size= 6251kB time=00:02:01.42 bitrate= 421.7kbits/s
frame= 3880 fps=267 q=29.0 size= 6342kB time=00:02:07.72 bitrate= 406.7kbits/s
frame= 4059 fps=270 q=29.0 size= 6426kB time=00:02:13.70 bitrate= 393.7kbits/s
frame= 4158 fps=267 q=29.0 size= 6699kB time=00:02:17.00 bitrate= 400.5kbits/s
frame= 4309 fps=268 q=29.0 size= 6911kB time=00:02:22.04 bitrate= 398.6kbits/s
frame= 4388 fps=265 q=29.0 size= 7187kB time=00:02:24.67 bitrate= 407.0kbits/s
frame= 4430 fps=260 q=-1.0 Lsize= 7537kB time=00:02:27.74 bitrate= 417.9kbits/s dup=0 drop=2
video:7491kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.618146%
[libx264 @ 000000000049cf60] frame I:40 Avg QP:18.78 size: 22979
[libx264 @ 000000000049cf60] frame P:1964 Avg QP:22.33 size: 3056
[libx264 @ 000000000049cf60] frame B:2426 Avg QP:27.35 size: 309
[libx264 @ 000000000049cf60] consecutive B-frames: 24.5% 5.1% 6.6% 63.7%
[libx264 @ 000000000049cf60] mb I I16..4: 19.5% 35.8% 44.7%
[libx264 @ 000000000049cf60] mb P I16..4: 4.1% 5.7% 2.0% P16..4: 24.4% 6.9% 2.5% 0.0% 0.0% skip:54.5%
[libx264 @ 000000000049cf60] mb B I16..4: 0.3% 0.2% 0.1% B16..8: 11.1% 0.7% 0.1% direct: 0.4% skip:87.0% L0:44.2% L1:52.6% BI: 3.2%
[libx264 @ 000000000049cf60] 8x8 transform intra:45.7% inter:56.0%
[libx264 @ 000000000049cf60] coded y,uvDC,uvAC intra: 45.5% 44.9% 11.1% inter: 5.9% 6.3% 0.4%
[libx264 @ 000000000049cf60] i16 v,h,dc,p: 24% 39% 14% 23%
[libx264 @ 000000000049cf60] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 28% 24% 24% 3% 4% 4% 5% 3% 4%
[libx264 @ 000000000049cf60] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 22% 26% 14% 5% 7% 7% 7% 5% 6%
[libx264 @ 000000000049cf60] i8c dc,h,v,p: 57% 22% 17% 4%
[libx264 @ 000000000049cf60] Weighted P-Frames: Y:6.6% UV:4.4%
[libx264 @ 000000000049cf60] ref P L0: 79.1% 10.7% 8.3% 1.9% 0.1%
[libx264 @ 000000000049cf60] ref B L0: 92.1% 7.3% 0.7%
[libx264 @ 000000000049cf60] ref B L1: 94.8% 5.2%
[libx264 @ 000000000049cf60] kb/s:415.11 -
FFmpegFrameGrabber video artefacts from RTSP network camera
2 février 2015, par UncleChrisI’m using JavaCV FFmpegFrameGrabber to grab frames from my network camera through RTSP protocol. Simplified code looks like this :
/* from ini method */
// url like: rtsp://ip:port/stream1
grabber = new FFmpegFrameGrabber(stream.getUrl());
// type: RTP
grabber.setFormat(stream.getMediaType());
grabber.start();
/* it's called in while loop from outside */
public void grab() throws FrameProcessorsException {
try {
LOGGER.info(grabber.getFrameNumber());
frame = grabber.grab();
} catch (FrameGrabber.Exception e) {
throw new FrameProcessorsException(e);
}
// I save my frames to other grabber, to make mp4 file to watch it later
try {
videoRecorder.recordFrame(frame, grabber.getTimestamp(), grabber.getImageWidth(), grabber.getImageHeight(), grabber.getAudioChannels());
} catch (FrameRecorder.Exception e) {
throw new FrameProcessorsException(e);
}
// my processing, the troublemaker
long currentFrameNum = grabber.getFrameNumber();
if (processing && currentFrameNum - lastFrameWithAnalysis >= PROCESS_FREQUENCY) {
lastFrameWithAnalysis = currentFrameNum;
Mat frameMat = new Mat(frame, false);
try {
LOGGER.info("Processing :" + grabber.getFrameNumber());
AnalysisResult result = frameAnalyzer.processFrame(frameMat, (int) currentFrameNum);
videoAnalysisSaver.saveFrameAnalysisResult(frameMat, result, (int) currentFrameNum);
} catch (ServerErrorException | NotExistException e) {
LOGGER.warn(e);
}In code You can see
processing
variable. If it’s set to false, I can watch my network streams on page with no problems. But if I set it to true, suddenly, I got visual artefacts, looking like this :http://answers.opencv.org/upfiles/1400931120927032.png
And also I can see some infos on my logs :
[libx264 @ 0x7fe2a7e2ae00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x7fe2a7e2ae00] profile High, level 4.0
[libx264 @ 0x7fe2a7e2ae00] 264 - core 142 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1,00:0,00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 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=abr mbtree=1 bitrate=400 ratetol=1,0 qcomp=0,60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1,40 aq=1:1,00
[mp4 @ 0x7fe2909feee0] Using AVStream.codec.time_base as a timebase hint to the muxer is deprecated. Set AVStream.time_base instead.
2015-02-02 10:34:31,986 INFO [img.StreamGrabber] 6
2015-02-02 10:34:31,998 INFO [img.StreamGrabber] Processing :1
2015-02-02 10:34:32,881 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1524, 1564, 678, 718) is above threshold
2015-02-02 10:34:32,882 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1538, 1577, 678, 717) is above threshold
2015-02-02 10:34:32,884 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1320, 1420, 298, 398) is above threshold
2015-02-02 10:34:33,199 INFO [img.StreamGrabber] 1
2015-02-02 10:34:33,212 INFO [img.StreamGrabber] 2
2015-02-02 10:34:33,222 INFO [img.StreamGrabber] 3
2015-02-02 10:34:33,232 INFO [img.StreamGrabber] 4
2015-02-02 10:34:33,244 INFO [img.StreamGrabber] 5
2015-02-02 10:34:33,255 INFO [img.StreamGrabber] Processing :6
2015-02-02 10:34:33,870 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1537, 1578, 678, 719) is above threshold
2015-02-02 10:34:33,871 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1315, 1422, 298, 405) is above threshold
2015-02-02 10:34:34,318 INFO [img.StreamGrabber] 6
2015-02-02 10:34:34,338 INFO [img.StreamGrabber] 7
2015-02-02 10:34:34,347 INFO [img.StreamGrabber] 8
2015-02-02 10:34:34,357 INFO [img.StreamGrabber] 9
2015-02-02 10:34:34,368 INFO [img.StreamGrabber] 10
2015-02-02 10:34:34,379 INFO [img.StreamGrabber] Processing :11
2015-02-02 10:34:35,025 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1561, 1618, 477, 534) is above threshold
2015-02-02 10:34:35,027 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1318, 1421, 300, 403) is above threshold
2015-02-02 10:34:35,185 INFO [img.StreamGrabber] 11
2015-02-02 10:34:35,202 INFO [img.StreamGrabber] 12
2015-02-02 10:34:35,213 INFO [img.StreamGrabber] 13
2015-02-02 10:34:35,223 INFO [img.StreamGrabber] 14
2015-02-02 10:34:35,235 INFO [img.StreamGrabber] 15
2015-02-02 10:34:35,286 INFO [img.StreamGrabber] Processing :16
2015-02-02 10:34:35,952 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1429, 1470, 703, 744) is above threshold
2015-02-02 10:34:35,954 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1315, 1422, 295, 402) is above threshold
2015-02-02 10:34:36,218 INFO [img.StreamGrabber] 16
2015-02-02 10:34:36,237 INFO [img.StreamGrabber] 17
2015-02-02 10:34:36,246 INFO [img.StreamGrabber] 18
2015-02-02 10:34:36,257 INFO [img.StreamGrabber] 19
2015-02-02 10:34:36,268 INFO [img.StreamGrabber] 20
2015-02-02 10:34:36,279 INFO [img.StreamGrabber] Processing :21
2015-02-02 10:34:36,967 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1562, 1616, 480, 534) is above threshold
2015-02-02 10:34:36,968 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1314, 1420, 296, 402) is above threshold
2015-02-02 10:34:37,186 INFO [img.StreamGrabber] 21
2015-02-02 10:34:37,206 INFO [img.StreamGrabber] 22
2015-02-02 10:34:37,217 INFO [img.StreamGrabber] 23
2015-02-02 10:34:37,227 INFO [img.StreamGrabber] 24
[h264 @ 0x7fe2915b30a0] RTP: missed 1514 packets
[h264 @ 0x7fe2f1050ea0] Cannot use next picture in error concealment
[h264 @ 0x7fe2f1050ea0] concealing 4608 DC, 4608 AC, 4608 MV errors in P frame
2015-02-02 10:34:37,238 INFO [img.StreamGrabber] 25
2015-02-02 10:34:37,250 INFO [img.StreamGrabber] Processing :26
2015-02-02 10:34:37,944 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1562, 1616, 479, 533) is above threshold
2015-02-02 10:34:37,945 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1315, 1422, 297, 404) is above threshold
2015-02-02 10:34:38,107 INFO [img.StreamGrabber] 26
[h264 @ 0x7fe2915b30a0] RTP: missed 295 packets
[h264 @ 0x7fe2a5713e00] Cannot use next picture in error concealment
[h264 @ 0x7fe2a5713e00] concealing 1996 DC, 1996 AC, 1996 MV errors in P frame
2015-02-02 10:34:38,120 INFO [img.StreamGrabber] 27
2015-02-02 10:34:38,130 INFO [img.StreamGrabber] 28
2015-02-02 10:34:38,143 INFO [img.StreamGrabber] 29
2015-02-02 10:34:38,231 INFO [img.StreamGrabber] 30
2015-02-02 10:34:38,249 INFO [img.StreamGrabber] Processing :31
2015-02-02 10:34:38,962 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1170, 1211, 322, 363) is above threshold
2015-02-02 10:34:38,964 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1316, 1421, 298, 403) is above threshold
2015-02-02 10:34:39,329 INFO [img.StreamGrabber] 31
[h264 @ 0x7fe2915b30a0] RTP: missed 232 packets
[h264 @ 0x7fe2a4203d80] Cannot use next picture in error concealment
[h264 @ 0x7fe2a4203d80] concealing 1142 DC, 1142 AC, 1142 MV errors in P frame
2015-02-02 10:34:39,342 INFO [img.StreamGrabber] 32
2015-02-02 10:34:39,352 INFO [img.StreamGrabber] 33
[h264 @ 0x7fe2915b30a0] RTP: missed 1 packets
[h264 @ 0x7fe2915b43c0] corrupted macroblock 86 67 (total_coeff=-1)
[h264 @ 0x7fe2915b43c0] error while decoding MB 86 67
[h264 @ 0x7fe2915b43c0] Cannot use next picture in error concealment
[h264 @ 0x7fe2915b43c0] concealing 83 DC, 83 AC, 83 MV errors in P frame
2015-02-02 10:34:39,362 INFO [img.StreamGrabber] Processing :144
2015-02-02 10:34:40,071 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1563, 1614, 480, 531) is above threshold
2015-02-02 10:34:40,074 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1318, 1423, 296, 401) is above threshold
2015-02-02 10:34:40,462 INFO [img.StreamGrabber] 144
2015-02-02 10:34:40,482 INFO [img.StreamGrabber] 145
[h264 @ 0x7fe2915b30a0] RTP: missed 377 packets
[h264 @ 0x7fe2a515baa0] Cannot use next picture in error concealment
[h264 @ 0x7fe2a515baa0] concealing 6822 DC, 6822 AC, 6822 MV errors in P frame
2015-02-02 10:34:40,494 INFO [img.StreamGrabber] Processing :167
2015-02-02 10:34:41,222 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1563, 1615, 479, 531) is above threshold
2015-02-02 10:34:41,230 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1319, 1421, 295, 397) is above threshold
2015-02-02 10:34:41,930 INFO [img.StreamGrabber] 167
2015-02-02 10:34:41,947 INFO [img.StreamGrabber] 168
2015-02-02 10:34:41,958 INFO [img.StreamGrabber] 169
2015-02-02 10:34:41,970 INFO [img.StreamGrabber] 170
2015-02-02 10:34:41,985 INFO [img.StreamGrabber] 171
[h264 @ 0x7fe2915b30a0] RTP: missed 311 packets
[h264 @ 0x7fe2f10506c0] Cannot use next picture in error concealment
[h264 @ 0x7fe2f10506c0] concealing 1409 DC, 1409 AC, 1409 MV errors in P frame
2015-02-02 10:34:41,997 INFO [img.StreamGrabber] Processing :190
2015-02-02 10:34:42,715 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1322, 1384, 340, 402) is above threshold
2015-02-02 10:34:42,717 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1312, 1425, 290, 403) is above threshold
2015-02-02 10:34:42,929 INFO [img.StreamGrabber] 190
[h264 @ 0x7fe2915b30a0] RTP: missed 13 packets
[h264 @ 0x7fe2f1050ea0] Cannot use next picture in error concealment
[h264 @ 0x7fe2f1050ea0] concealing 6489 DC, 6489 AC, 6489 MV errors in P frame
2015-02-02 10:34:42,943 INFO [img.StreamGrabber] 191
[h264 @ 0x7fe2915b30a0] RTP: missed 484 packets
[h264 @ 0x7fe2915b43c0] concealing 6609 DC, 6609 AC, 6609 MV errors in I frame
2015-02-02 10:34:42,957 INFO [img.StreamGrabber] 192
2015-02-02 10:34:42,970 INFO [img.StreamGrabber] 193
[h264 @ 0x7fe2915b30a0] RTP: missed 313 packets
[h264 @ 0x7fe2a51a0fc0] Cannot use next picture in error concealment
[h264 @ 0x7fe2a51a0fc0] concealing 1666 DC, 1666 AC, 1666 MV errors in P frame
2015-02-02 10:34:43,271 INFO [img.StreamGrabber] 194
2015-02-02 10:34:43,314 INFO [img.StreamGrabber] Processing :249
2015-02-02 10:34:44,099 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1322, 1384, 340, 402) is above threshold
2015-02-02 10:34:44,100 INFO [img.analysis.face.PersonFaceRecognizer] Predicted face (1313, 1403, 300, 390) is above threshold
2015-02-02 10:34:45,473 INFO [img.save.event.EventMaker] Creating 1 face recognition events
2015-02-02 10:34:45,618 INFO [core.task.StreamRecordingTaskExecutor] Stream recording task ended: rtsp://MYURLMy guess is, that my computer is simply too busy to catch all packages from camera stream. I’m operating on two streams, one is low quality with like 3 fps, and other is 30. Of course problems show up all the time on fast one, and rarely on slow stream.
I’m wondering if there is possibility to force somehow FFmpegFrameGraber not to create artifacts, but simply drop current frame and go to next one ? Fps and frame continuity is not so important. I was trying to use grabber’s setfps, settimestamp, delayedGrab method’s to somehow slow down 30-fps stream, but it didn’t even react to that. I’m sure I’m doing something wrong.I’ve found some topics related to my problem, but they did not helped me, maybe You will see more :
http://answers.opencv.org/question/34012/ip-camera-h264-error-while-decoding/
How to deal with cv::VideoCapture decode errors ?
http://superuser.com/questions/663928/ffmpeg-to-capture-stills-from-h-264-streamThank You for Your help.