
Recherche avancée
Autres articles (29)
-
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 (...) -
Contribute to a better visual interface
13 avril 2011MediaSPIP is based on a system of themes and templates. Templates define the placement of information on the page, and can be adapted to a wide range of uses. Themes define the overall graphic appearance of the site.
Anyone can submit a new graphic theme or template and make it available to the MediaSPIP community. -
Librairies et binaires spécifiques au traitement vidéo et sonore
31 janvier 2010, parLes logiciels et librairies suivantes sont utilisées par SPIPmotion d’une manière ou d’une autre.
Binaires obligatoires FFMpeg : encodeur principal, permet de transcoder presque tous les types de fichiers vidéo et sonores dans les formats lisibles sur Internet. CF ce tutoriel pour son installation ; Oggz-tools : outils d’inspection de fichiers ogg ; Mediainfo : récupération d’informations depuis la plupart des formats vidéos et sonores ;
Binaires complémentaires et facultatifs flvtool2 : (...)
Sur d’autres sites (2456)
-
Does H.264 encoded video with BT.709 matrix include any gamma adjustment ?
27 janvier 2019, par MoDJI have read the BT.709 spec a number of times and the thing that is just not clear is should an encoded H.264 bitstream actually apply any gamma curve to the encoded data ? Note the specific mention of a gamma like formula in the BT.709 spec. Apple provided examples of OpenGL or Metal shaders that read YUV data from CoreVideo provided buffers do not do any sort of gamma adjustment. YUV values are being read and processed as though they are simple linear values. I also examined the source code of ffmpeg and found no gamma adjustments being applied after the BT.709 scaling step. I then created a test video with just two linear grayscale colors 5 and 26 corresponding to 2% and 10% levels. When converted to H.264 with both ffmpeg and iMovie, the output BT.709 values are (YCbCr) (20 128 128) and (38 128 128) and these values exactly match the output of the BT.709 conversion matrix without any gamma adjustment.
A great piece of background on this topic can be found at Quicktime Gamma Bug. It seems that some historical issues with Quicktime and Adobe encoders were improperly doing different gamma adjustments and the results made video streams look awful on different players. This is really confusing because if you compare to sRGB, it clearly indicates how to apply a gamma encoding and then decode it to convert between sRGB and linear. Why does BT.709 go into so much detail about the same sort of gamma adjustment curve if no gamma adjustment is applied after the matrix step when creating a h.264 data stream ? Are all the color steps in a h.264 stream meant to be coded as straight linear (gamma 1.0) values ?
In case specific example input would make things more clear, I am attaching 3 color bar images, the exact values of different colors can be displayed in an image editor with these image files.
This first image is in the sRGB colorspace and is tagged as sRGB.
This second image has been converted to the linear RGB colorspace and is tagged with a linear RGB profile.
This third image has been converted to REC.709 profile levels with Rec709-elle-V4-rec709.icc from elles_icc_profiles
. This seems to be what one would need to do to simulate "camera" gamma as described in BT.709.Note how the sRGB value in the lower right corner (0x555555) becomes linear RGB (0x171717) and the BT.709 gamma encoded value becomes (0x464646). What is unclear is if I should be passing a linear RGB value into ffmpeg or if I should be passing an already BT.709 gamma encoded value which would then need to be decoded in the client before the linear conversion Matrix step to get back to RGB.
Update :
Based on the feedback, I have updated my C based implementation and Metal shader and uploaded to github as an iOS example project MetalBT709Decoder.
Encoding a normalized linear RGB value is implemented like this :
static inline
int BT709_convertLinearRGBToYCbCr(
float Rn,
float Gn,
float Bn,
int *YPtr,
int *CbPtr,
int *CrPtr,
int applyGammaMap)
{
// Gamma adjustment to non-linear value
if (applyGammaMap) {
Rn = BT709_linearNormToNonLinear(Rn);
Gn = BT709_linearNormToNonLinear(Gn);
Bn = BT709_linearNormToNonLinear(Bn);
}
// https://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.709-6-201506-I!!PDF-E.pdf
float Ey = (Kr * Rn) + (Kg * Gn) + (Kb * Bn);
float Eb = (Bn - Ey) / Eb_minus_Ey_Range;
float Er = (Rn - Ey) / Er_minus_Ey_Range;
// Quant Y to range [16, 235] (inclusive 219 values)
// Quant Eb, Er to range [16, 240] (inclusive 224 values, centered at 128)
float AdjEy = (Ey * (YMax-YMin)) + 16;
float AdjEb = (Eb * (UVMax-UVMin)) + 128;
float AdjEr = (Er * (UVMax-UVMin)) + 128;
*YPtr = (int) round(AdjEy);
*CbPtr = (int) round(AdjEb);
*CrPtr = (int) round(AdjEr);
return 0;
}Decoding from YCbCr to linear RGB is implemented like so :
static inline
int BT709_convertYCbCrToLinearRGB(
int Y,
int Cb,
int Cr,
float *RPtr,
float *GPtr,
float *BPtr,
int applyGammaMap)
{
// https://en.wikipedia.org/wiki/YCbCr#ITU-R_BT.709_conversion
// http://www.niwa.nu/2013/05/understanding-yuv-values/
// Normalize Y to range [0 255]
//
// Note that the matrix multiply will adjust
// this byte normalized range to account for
// the limited range [16 235]
float Yn = (Y - 16) * (1.0f / 255.0f);
// Normalize Cb and CR with zero at 128 and range [0 255]
// Note that matrix will adjust to limited range [16 240]
float Cbn = (Cb - 128) * (1.0f / 255.0f);
float Crn = (Cr - 128) * (1.0f / 255.0f);
const float YScale = 255.0f / (YMax-YMin);
const float UVScale = 255.0f / (UVMax-UVMin);
const
float BT709Mat[] = {
YScale, 0.000f, (UVScale * Er_minus_Ey_Range),
YScale, (-1.0f * UVScale * Eb_minus_Ey_Range * Kb_over_Kg), (-1.0f * UVScale * Er_minus_Ey_Range * Kr_over_Kg),
YScale, (UVScale * Eb_minus_Ey_Range), 0.000f,
};
// Matrix multiply operation
//
// rgb = BT709Mat * YCbCr
// Convert input Y, Cb, Cr to normalized float values
float Rn = (Yn * BT709Mat[0]) + (Cbn * BT709Mat[1]) + (Crn * BT709Mat[2]);
float Gn = (Yn * BT709Mat[3]) + (Cbn * BT709Mat[4]) + (Crn * BT709Mat[5]);
float Bn = (Yn * BT709Mat[6]) + (Cbn * BT709Mat[7]) + (Crn * BT709Mat[8]);
// Saturate normalzied linear (R G B) to range [0.0, 1.0]
Rn = saturatef(Rn);
Gn = saturatef(Gn);
Bn = saturatef(Bn);
// Gamma adjustment for RGB components after matrix transform
if (applyGammaMap) {
Rn = BT709_nonLinearNormToLinear(Rn);
Gn = BT709_nonLinearNormToLinear(Gn);
Bn = BT709_nonLinearNormToLinear(Bn);
}
*RPtr = Rn;
*GPtr = Gn;
*BPtr = Bn;
return 0;
}I believe this logic is implemented correctly, but I am having a very difficult time validating the results. When I generate a .m4v file that contains gamma adjusted color values (osxcolor_test_image_24bit_BT709.m4v), the result come out as expected. But a test case like (bars_709_Frame01.m4v) that I found here does not seem to work as the color bar values seem to be encoded as linear (no gamma adjustment).
For a SMPTE test pattern, the 0.75 graylevel is linear RGB (191 191 191), should this RGB be encoded with no gamma adjustment as (Y Cb Cr) (180 128 128) or should the value in the bitstream appear as the gamma adjusted (Y Cb Cr) (206 128 128) ?
(follow up)
After doing additional research into this gamma issue, it has become clear that what Apple is actually doing in AVFoundation is using a 1.961 gamma function. This is the case when encoding with AVAssetWriterInputPixelBufferAdaptor, when using vImage, or with CoreVideo APIs. This piecewise gamma function is defined as follows :#define APPLE_GAMMA_196 (1.960938f)
static inline
float Apple196_nonLinearNormToLinear(float normV) {
const float xIntercept = 0.05583828f;
if (normV < xIntercept) {
normV *= (1.0f / 16.0f);
} else {
const float gamma = APPLE_GAMMA_196;
normV = pow(normV, gamma);
}
return normV;
}
static inline
float Apple196_linearNormToNonLinear(float normV) {
const float yIntercept = 0.00349f;
if (normV < yIntercept) {
normV *= 16.0f;
} else {
const float gamma = 1.0f / APPLE_GAMMA_196;
normV = pow(normV, gamma);
}
return normV;
} -
ffmpeg converting JPG slideshow to H264
22 décembre 2018, par pholI am trying to convert a set of jpg files to a slideshow with varying durations using ffconcat
output.txt contents :
ffconcat version 1.0
file slide_0001.jpg
duration 0.163
file slide_0002.jpg
duration 0.533
file slide_0003.jpg
duration 1.067
file slide_0004.jpg
duration 0.533
file slide_0005.jpg
etc.FFmpeg command :
ffmpeg -i output.txt output.mkv
I also tried :
ffmpeg -i output.txt -c:v copy output.mkv
However, when converting, the colours of the images become skewed.
White becomes pink / purple and dark green becomes light green.
The same happens when choosing different codecs and containers.
Is there a way to solve this ?EDIT :
I performed the same conversion again. I attached the log output as requested.
However, in the meantime I have figured out that converting without ffconcat duration and then altering timecodes with mp4fpsmod is more efficient in terms of storage (3 vs 40 MB) and gives less issues in different players. The result is nonetheless the same : colours are still wrong, both on my workstation (Ubuntu 18.04) and laptop (macOS Mojave).I tried to alter things with
pix_fmt
and-vf format
as can be seen in the second log output. This did not solve the problem.Background info :
The input jpg files are from a lecture recording made with MediaSite, which has both a video stream for the room as well as this slideshow stream for the slides.Example of input :
Example of output :
log output MKV conversion :$ ffmpeg -i outputnew.txt output12345.mkv
ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gpl --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-opencl --enable-videotoolbox
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Input #0, concat, from 'outputnew.txt':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 1280x720, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x7fb284802800] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x7fb284802800] profile High 4:4:4 Predictive, level 3.1, 4:4:4 8-bit
[libx264 @ 0x7fb284802800] 264 - core 152 r2854 e9a5903 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - 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 'output12345.mkv':
Metadata:
encoder : Lavf58.20.100
Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuvj444p(pc), 1280x720, q=-1--1, 25 fps, 1k tbn, 25 tbc
Metadata:
encoder : Lavc58.35.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
[mjpeg @ 0x7fb284061200] EOI missing, emulating=00:02:12.96 bitrate= 491.3kbits/s speed=14.3x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 487.2kbits/s speed=14.3x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 333.0kbits/s speed=22.3x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 338.8kbits/s speed=22.7x
Last message repeated 2 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 164.7kbits/s speed=41.6x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 122.7kbits/s speed=55.7x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 111.2kbits/s speed=60.5x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 105.3kbits/s speed=64.4x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 82.2kbits/s speed=82.7x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 79.7kbits/s speed=85.8x
Last message repeated 2 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 59.7kbits/s speed= 114x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 53.8kbits/s speed= 127x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 54.7kbits/s speed= 124x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 47.1kbits/s speed= 143x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 47.0kbits/s speed= 144x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 44.6kbits/s speed= 151x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 34.4kbits/s speed= 194x
Last message repeated 2 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 32.9kbits/s speed= 204x
Last message repeated 2 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 32.8kbits/s speed= 203x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 32.6kbits/s speed= 202x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 28.8kbits/s speed= 229x
Last message repeated 2 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 27.9kbits/s speed= 236x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 27.9kbits/s speed= 233x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 23.9kbits/s speed= 274x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 24.2kbits/s speed= 273x
Last message repeated 2 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 24.2kbits/s speed= 274x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 24.0kbits/s speed= 276x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 24.2kbits/s speed= 273x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 23.6kbits/s speed= 278x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 23.7kbits/s speed= 279x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 23.6kbits/s speed= 279x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 24.0kbits/s speed= 276x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 23.5kbits/s speed= 281x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 20.4kbits/s speed= 325x
[mjpeg @ 0x7fb28502a000] EOI missing, emulating
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 20.1kbits/s speed= 329x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 20.1kbits/s speed= 330x
frame= 635 fps= 14 q=-1.0 Lsize= 37389kB time=04:22:06.76 bitrate= 19.5kbits/s speed= 343x
video:37378kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.029620%
[libx264 @ 0x7fb284802800] frame I:16 Avg QP:11.98 size:154224
[libx264 @ 0x7fb284802800] frame P:184 Avg QP:13.30 size: 79029
[libx264 @ 0x7fb284802800] frame B:435 Avg QP:13.19 size: 48887
[libx264 @ 0x7fb284802800] consecutive B-frames: 6.0% 4.4% 10.9% 78.7%
[libx264 @ 0x7fb284802800] mb I I16..4: 55.7% 0.0% 44.3%
[libx264 @ 0x7fb284802800] mb P I16..4: 32.4% 0.0% 21.5% P16..4: 13.3% 15.1% 11.3% 0.0% 0.0% skip: 6.4%
[libx264 @ 0x7fb284802800] mb B I16..4: 17.8% 0.0% 7.2% B16..8: 19.1% 19.4% 6.5% direct:14.6% skip:15.3% L0:47.0% L1:38.9% BI:14.1%
[libx264 @ 0x7fb284802800] coded y,u,v intra: 63.7% 26.1% 56.3% inter: 46.5% 24.6% 43.5%
[libx264 @ 0x7fb284802800] i16 v,h,dc,p: 19% 18% 58% 4%
[libx264 @ 0x7fb284802800] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 35% 20% 25% 4% 4% 3% 3% 3% 3%
[libx264 @ 0x7fb284802800] Weighted P-Frames: Y:5.4% UV:5.4%
[libx264 @ 0x7fb284802800] ref P L0: 43.2% 4.4% 30.8% 21.4% 0.2%
[libx264 @ 0x7fb284802800] ref B L0: 64.1% 27.3% 8.6%
[libx264 @ 0x7fb284802800] ref B L1: 85.3% 14.7%
[libx264 @ 0x7fb284802800] kb/s:19.25Log output mp4 conversion :
$ ffmpeg -i slide_%04d.jpg -vf format=rgba -pix_fmt yuv420p -vcodec libx264 -movflags +faststart -preset veryslow output12345.mp4
ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gpl --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-opencl --enable-videotoolbox
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Input #0, image2, from 'slide_%04d.jpg':
Duration: 00:00:25.36, start: 0.000000, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 1280x720, 25 fps, 25 tbr, 25 tbn, 25 tbc
File 'output12345.mp4' already exists. Overwrite ? [y/N] y
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[swscaler @ 0x7fb7e280b000] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 0x7fb7e1803c00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x7fb7e1803c00] profile High, level 5.0
[libx264 @ 0x7fb7e1803c00] 264 - core 152 r2854 e9a5903 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=16 deblock=1:0:0 analyse=0x3:0x133 me=umh subme=10 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=24 chroma_me=1 trellis=2 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=8 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=60 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 'output12345.mp4':
Metadata:
encoder : Lavf58.20.100
Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 1280x720, q=-1--1, 25 fps, 12800 tbn, 25 tbc
Metadata:
encoder : Lavc58.35.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
[mp4 @ 0x7fb7e1801800] Starting second pass: moving the moov atom to the beginning of the file
frame= 634 fps=8.5 q=-1.0 Lsize= 2252kB time=00:00:25.24 bitrate= 731.0kbits/s speed=0.337x
video:2245kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.307448%
[libx264 @ 0x7fb7e1803c00] frame I:5 Avg QP:19.12 size: 49393
[libx264 @ 0x7fb7e1803c00] frame P:131 Avg QP:22.18 size: 9379
[libx264 @ 0x7fb7e1803c00] frame B:498 Avg QP:23.78 size: 1652
[libx264 @ 0x7fb7e1803c00] consecutive B-frames: 3.2% 1.6% 3.3% 29.7% 7.9% 16.1% 7.7% 16.4% 14.2%
[libx264 @ 0x7fb7e1803c00] mb I I16..4: 45.7% 37.9% 16.4%
[libx264 @ 0x7fb7e1803c00] mb P I16..4: 6.0% 5.3% 1.3% P16..4: 19.9% 1.9% 3.7% 0.3% 0.1% skip:61.5%
[libx264 @ 0x7fb7e1803c00] mb B I16..4: 0.3% 0.4% 0.1% B16..8: 17.5% 1.0% 0.2% direct: 0.3% skip:80.2% L0:52.3% L1:46.9% BI: 0.8%
[libx264 @ 0x7fb7e1803c00] 8x8 transform intra:43.0% inter:48.9%
[libx264 @ 0x7fb7e1803c00] direct mvs spatial:99.2% temporal:0.8%
[libx264 @ 0x7fb7e1803c00] coded y,uvDC,uvAC intra: 16.9% 25.8% 16.6% inter: 1.1% 1.9% 1.2%
[libx264 @ 0x7fb7e1803c00] i16 v,h,dc,p: 61% 28% 6% 6%
[libx264 @ 0x7fb7e1803c00] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 9% 50% 3% 4% 3% 3% 3% 5%
[libx264 @ 0x7fb7e1803c00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 18% 23% 19% 5% 7% 6% 6% 5% 10%
[libx264 @ 0x7fb7e1803c00] i8c dc,h,v,p: 46% 40% 13% 1%
[libx264 @ 0x7fb7e1803c00] Weighted P-Frames: Y:5.3% UV:5.3%
[libx264 @ 0x7fb7e1803c00] ref P L0: 33.2% 3.1% 11.6% 7.3% 8.8% 6.4% 6.5% 3.1% 3.2% 2.6% 2.4% 2.5% 2.8% 2.8% 2.3% 1.4%
[libx264 @ 0x7fb7e1803c00] ref B L0: 42.0% 15.1% 12.0% 5.4% 4.9% 4.3% 4.0% 1.9% 2.0% 1.8% 1.7% 1.8% 1.7% 1.1% 0.5%
[libx264 @ 0x7fb7e1803c00] ref B L1: 83.5% 16.5%
[libx264 @ 0x7fb7e1803c00] kb/s:725.10Player :
QuickTime, VLC and Kodi on both Linux and Mac.EDIT 2 :
Input files : https://drive.google.com/open?id=1kbBkSDSwe6ywgQ8lkjqkh-MKCzGA4bj8 -
ffmpeg converting JPG slideshow to MKV
17 décembre 2018, par pholI am trying to convert a set of jpg files to a slideshow with varying durations using ffconcat
output.txt contents :
ffconcat version 1.0
file slide_0001.jpg
duration 0.163
file slide_0002.jpg
duration 0.533
file slide_0003.jpg
duration 1.067
file slide_0004.jpg
duration 0.533
file slide_0005.jpg
etc.FFmpeg command :
ffmpeg -i output.txt output.mkv
I also tried :
ffmpeg -i output.txt -c:v copy output.mkv
However, when converting, the colours of the images become skewed.
White becomes pink / purple and dark green becomes light green.
The same happens when choosing different codecs and containers.
Is there a way to solve this ?EDIT :
I performed the same conversion again. I attached the log output as requested.
However, in the meantime I have figured out that converting without ffconcat duration and then altering timecodes with mp4fpsmod is more efficient in terms of storage (3 vs 40 MB) and gives less issues in different players. The result is nonetheless the same : colours are still wrong, both on my workstation (Ubuntu 18.04) and laptop (macOS Mojave).I tried to alter things with
pix_fmt
and-vf format
as can be seen in the second log output. This did not solve the problem.Background info :
The input jpg files are from a lecture recording made with MediaSite, which has both a video stream for the room as well as this slideshow stream for the slides.Example of input :
Example of output :
log output MKV conversion :$ ffmpeg -i outputnew.txt output12345.mkv
ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gpl --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-opencl --enable-videotoolbox
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Input #0, concat, from 'outputnew.txt':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 1280x720, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x7fb284802800] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x7fb284802800] profile High 4:4:4 Predictive, level 3.1, 4:4:4 8-bit
[libx264 @ 0x7fb284802800] 264 - core 152 r2854 e9a5903 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - 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 'output12345.mkv':
Metadata:
encoder : Lavf58.20.100
Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuvj444p(pc), 1280x720, q=-1--1, 25 fps, 1k tbn, 25 tbc
Metadata:
encoder : Lavc58.35.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
[mjpeg @ 0x7fb284061200] EOI missing, emulating=00:02:12.96 bitrate= 491.3kbits/s speed=14.3x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 487.2kbits/s speed=14.3x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 333.0kbits/s speed=22.3x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 338.8kbits/s speed=22.7x
Last message repeated 2 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 164.7kbits/s speed=41.6x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 122.7kbits/s speed=55.7x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 111.2kbits/s speed=60.5x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 105.3kbits/s speed=64.4x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 82.2kbits/s speed=82.7x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 79.7kbits/s speed=85.8x
Last message repeated 2 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 59.7kbits/s speed= 114x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 53.8kbits/s speed= 127x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 54.7kbits/s speed= 124x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 47.1kbits/s speed= 143x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 47.0kbits/s speed= 144x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 44.6kbits/s speed= 151x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 34.4kbits/s speed= 194x
Last message repeated 2 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 32.9kbits/s speed= 204x
Last message repeated 2 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 32.8kbits/s speed= 203x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 32.6kbits/s speed= 202x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 28.8kbits/s speed= 229x
Last message repeated 2 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 27.9kbits/s speed= 236x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 27.9kbits/s speed= 233x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 23.9kbits/s speed= 274x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 24.2kbits/s speed= 273x
Last message repeated 2 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 24.2kbits/s speed= 274x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 24.0kbits/s speed= 276x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 24.2kbits/s speed= 273x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 23.6kbits/s speed= 278x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 23.7kbits/s speed= 279x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 23.6kbits/s speed= 279x
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 24.0kbits/s speed= 276x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 23.5kbits/s speed= 281x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 20.4kbits/s speed= 325x
[mjpeg @ 0x7fb28502a000] EOI missing, emulating
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 20.1kbits/s speed= 329x
Last message repeated 1 times
[matroska @ 0x7fb284812e00] Starting new cluster due to timestampte= 20.1kbits/s speed= 330x
frame= 635 fps= 14 q=-1.0 Lsize= 37389kB time=04:22:06.76 bitrate= 19.5kbits/s speed= 343x
video:37378kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.029620%
[libx264 @ 0x7fb284802800] frame I:16 Avg QP:11.98 size:154224
[libx264 @ 0x7fb284802800] frame P:184 Avg QP:13.30 size: 79029
[libx264 @ 0x7fb284802800] frame B:435 Avg QP:13.19 size: 48887
[libx264 @ 0x7fb284802800] consecutive B-frames: 6.0% 4.4% 10.9% 78.7%
[libx264 @ 0x7fb284802800] mb I I16..4: 55.7% 0.0% 44.3%
[libx264 @ 0x7fb284802800] mb P I16..4: 32.4% 0.0% 21.5% P16..4: 13.3% 15.1% 11.3% 0.0% 0.0% skip: 6.4%
[libx264 @ 0x7fb284802800] mb B I16..4: 17.8% 0.0% 7.2% B16..8: 19.1% 19.4% 6.5% direct:14.6% skip:15.3% L0:47.0% L1:38.9% BI:14.1%
[libx264 @ 0x7fb284802800] coded y,u,v intra: 63.7% 26.1% 56.3% inter: 46.5% 24.6% 43.5%
[libx264 @ 0x7fb284802800] i16 v,h,dc,p: 19% 18% 58% 4%
[libx264 @ 0x7fb284802800] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 35% 20% 25% 4% 4% 3% 3% 3% 3%
[libx264 @ 0x7fb284802800] Weighted P-Frames: Y:5.4% UV:5.4%
[libx264 @ 0x7fb284802800] ref P L0: 43.2% 4.4% 30.8% 21.4% 0.2%
[libx264 @ 0x7fb284802800] ref B L0: 64.1% 27.3% 8.6%
[libx264 @ 0x7fb284802800] ref B L1: 85.3% 14.7%
[libx264 @ 0x7fb284802800] kb/s:19.25Log output mp4 conversion :
$ ffmpeg -i slide_%04d.jpg -vf format=rgba -pix_fmt yuv420p -vcodec libx264 -movflags +faststart -preset veryslow output12345.mp4
ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gpl --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-opencl --enable-videotoolbox
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Input #0, image2, from 'slide_%04d.jpg':
Duration: 00:00:25.36, start: 0.000000, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 1280x720, 25 fps, 25 tbr, 25 tbn, 25 tbc
File 'output12345.mp4' already exists. Overwrite ? [y/N] y
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[swscaler @ 0x7fb7e280b000] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 0x7fb7e1803c00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x7fb7e1803c00] profile High, level 5.0
[libx264 @ 0x7fb7e1803c00] 264 - core 152 r2854 e9a5903 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=1 ref=16 deblock=1:0:0 analyse=0x3:0x133 me=umh subme=10 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=24 chroma_me=1 trellis=2 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=8 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=60 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 'output12345.mp4':
Metadata:
encoder : Lavf58.20.100
Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 1280x720, q=-1--1, 25 fps, 12800 tbn, 25 tbc
Metadata:
encoder : Lavc58.35.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
[mp4 @ 0x7fb7e1801800] Starting second pass: moving the moov atom to the beginning of the file
frame= 634 fps=8.5 q=-1.0 Lsize= 2252kB time=00:00:25.24 bitrate= 731.0kbits/s speed=0.337x
video:2245kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.307448%
[libx264 @ 0x7fb7e1803c00] frame I:5 Avg QP:19.12 size: 49393
[libx264 @ 0x7fb7e1803c00] frame P:131 Avg QP:22.18 size: 9379
[libx264 @ 0x7fb7e1803c00] frame B:498 Avg QP:23.78 size: 1652
[libx264 @ 0x7fb7e1803c00] consecutive B-frames: 3.2% 1.6% 3.3% 29.7% 7.9% 16.1% 7.7% 16.4% 14.2%
[libx264 @ 0x7fb7e1803c00] mb I I16..4: 45.7% 37.9% 16.4%
[libx264 @ 0x7fb7e1803c00] mb P I16..4: 6.0% 5.3% 1.3% P16..4: 19.9% 1.9% 3.7% 0.3% 0.1% skip:61.5%
[libx264 @ 0x7fb7e1803c00] mb B I16..4: 0.3% 0.4% 0.1% B16..8: 17.5% 1.0% 0.2% direct: 0.3% skip:80.2% L0:52.3% L1:46.9% BI: 0.8%
[libx264 @ 0x7fb7e1803c00] 8x8 transform intra:43.0% inter:48.9%
[libx264 @ 0x7fb7e1803c00] direct mvs spatial:99.2% temporal:0.8%
[libx264 @ 0x7fb7e1803c00] coded y,uvDC,uvAC intra: 16.9% 25.8% 16.6% inter: 1.1% 1.9% 1.2%
[libx264 @ 0x7fb7e1803c00] i16 v,h,dc,p: 61% 28% 6% 6%
[libx264 @ 0x7fb7e1803c00] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 9% 50% 3% 4% 3% 3% 3% 5%
[libx264 @ 0x7fb7e1803c00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 18% 23% 19% 5% 7% 6% 6% 5% 10%
[libx264 @ 0x7fb7e1803c00] i8c dc,h,v,p: 46% 40% 13% 1%
[libx264 @ 0x7fb7e1803c00] Weighted P-Frames: Y:5.3% UV:5.3%
[libx264 @ 0x7fb7e1803c00] ref P L0: 33.2% 3.1% 11.6% 7.3% 8.8% 6.4% 6.5% 3.1% 3.2% 2.6% 2.4% 2.5% 2.8% 2.8% 2.3% 1.4%
[libx264 @ 0x7fb7e1803c00] ref B L0: 42.0% 15.1% 12.0% 5.4% 4.9% 4.3% 4.0% 1.9% 2.0% 1.8% 1.7% 1.8% 1.7% 1.1% 0.5%
[libx264 @ 0x7fb7e1803c00] ref B L1: 83.5% 16.5%
[libx264 @ 0x7fb7e1803c00] kb/s:725.10Player :
QuickTime, VLC and Kodi on both Linux and Mac.EDIT 2 :
Input files : https://drive.google.com/open?id=1kbBkSDSwe6ywgQ8lkjqkh-MKCzGA4bj8