
Recherche avancée
Autres articles (101)
-
HTML5 audio and video support
13 avril 2011, parMediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
For older browsers the Flowplayer flash fallback is used.
MediaSPIP allows for media playback on major mobile platforms with the above (...) -
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 : (...) -
Formulaire personnalisable
21 juin 2013, parCette page présente les champs disponibles dans le formulaire de publication d’un média et il indique les différents champs qu’on peut ajouter. Formulaire de création d’un Media
Dans le cas d’un document de type média, les champs proposés par défaut sont : Texte Activer/Désactiver le forum ( on peut désactiver l’invite au commentaire pour chaque article ) Licence Ajout/suppression d’auteurs Tags
On peut modifier ce formulaire dans la partie :
Administration > Configuration des masques de formulaire. (...)
Sur d’autres sites (6680)
-
aarch64 : Use regular hwcaps flags instead of HWCAP_CPUID for CPU feature detection...
14 février 2024, par Martin Storsjöaarch64 : Use regular hwcaps flags instead of HWCAP_CPUID for CPU feature detection on Linux
This makes the code much simpler (especially for adding support
for other instruction set extensions), avoids needing inline
assembly for this feature, and generally is more of the canonical
way to do this.The CPU feature detection was added in
493fcde50a84cb23854335bcb0e55c6f383d55db, using HWCAP_CPUID.The argument for using that, was that HWCAP_CPUID was added much
earlier in the kernel (in Linux v4.11), while the HWCAP flags for
individual features always come later. This allows detecting support
for new CPU extensions before the kernel exposes information about
them via hwcap flags.However in practice, there's probably quite little advantage in this.
E.g. HWCAP2_I8MM was added in Linux v5.10 - long after HWCAP_CPUID,
but there's probably very little practical cases where one would
run a kernel older than that on a CPU that supports those instructions.Additionally, we provide our own definitions of the flag values to
check (as they are fixed constants anyway), with names not conflicting
with the ones from system headers. This reduces the number of ifdefs
needed, and allows detecting those features even if building with
userland headers that are lacking the definitions of those flags.Also, slightly older versions of QEMU, e.g. 6.2 in Ubuntu 22.04,
do expose support for these features via HWCAP flags, but the
emulated cpuid registers are missing the bits for exposing e.g. I8MM.
(This issue is fixed in later versions of QEMU though.)Signed-off-by : Martin Storsjö <martin@martin.st>
-
fluent-ffmpeg concatenate files ends up with wrong length
24 juillet 2021, par Hugo CoxI have the following input file :


ffconcat version 1.0
file '../tmp/59bd6a7896654d0b0c00705f/vidR/intro.mp4' #0
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out003.mp4' #1
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #2
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #2
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #2
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #2
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #2
file '../intersegment/paddingsegment_h264_0.6s_1920x1080_30fps.mp4' #2
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out007.mp4' #3
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #4
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #4
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #4
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #4
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #4
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #4
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #4
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #4
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out013.mp4' #5
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #6
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #6
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #6
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #6
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #6
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #6
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out017.mp4' #7
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #8
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #8
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #8
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #8
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #8
file '../intersegment/paddingsegment_h264_0.6s_1920x1080_30fps.mp4' #8
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out021.mp4' #9
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #10
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #10
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #10
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #10
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #10
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #10
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out025.mp4' #11
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #12
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #12
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #12
file '../intersegment/paddingsegment_h264_0.6s_1920x1080_30fps.mp4' #12
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out028.mp4' #13
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #14
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #14
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #14
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #14
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #14
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #14
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out032.mp4' #15
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #16
file '../intersegment/paddingsegment_h264_0.6s_1920x1080_30fps.mp4' #16
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out034.mp4' #17
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #18
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #18
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #18
file '../intersegment/paddingsegment_h264_0.6s_1920x1080_30fps.mp4' #18
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out037.mp4' #19
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #20
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #20
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out039.mp4' #21
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #22
file '../intersegment/paddingsegment_h264_0.6s_1920x1080_30fps.mp4' #22
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out041.mp4' #23
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #24
file '../intersegment/paddingsegment_h264_2.6s_1920x1080_30fps.mp4' #24
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out043.mp4' #25
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #26
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #26
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out045.mp4' #27
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #28
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #28
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out047.mp4' #29
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #30
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #30
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out049.mp4' #31
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #32
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #32
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out051.mp4' #33
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #34
file '../intersegment/paddingsegment_h264_0.6s_1920x1080_30fps.mp4' #34
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out053.mp4' #35
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #36
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #36
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out055.mp4' #37
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #38
file '../intersegment/paddingsegment_h264_2.6s_1920x1080_30fps.mp4' #38
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out057.mp4' #39
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #40
file '../intersegment/paddingsegment_h264_0.6s_1920x1080_30fps.mp4' #40
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out059.mp4' #41
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #42
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #42
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out061.mp4' #43
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #44
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #44
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out063.mp4' #45
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #46
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #46
file '../intersegment/paddingsegment_h264_0.6s_1920x1080_30fps.mp4' #46
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out065.mp4' #47
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #48
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #48
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #48
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out067.mp4' #49
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #50
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #50
file '../intersegment/paddingsegment_h264_2.6s_1920x1080_30fps.mp4' #50
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out070.mp4' #51
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #52
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #52
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #52
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #52
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #52
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #52
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out074.mp4' #53
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #54
file '../intersegment/paddingsegment_h264_0.6s_1920x1080_30fps.mp4' #54
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out076.mp4' #55
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #56
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #56
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #56
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #56
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #56
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out080.mp4' #57
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #58
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #58
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #58
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #58
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #58
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #58
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out084.mp4' #59
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #60
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #60
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #60
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #60
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #60
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #60
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out089.mp4' #61
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #62
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #62
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #62
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #62
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #62
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #62
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out093.mp4' #63
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #64
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #64
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #64
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #64
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out096.mp4' #65
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #66
file '../intersegment/paddingsegment_h264_2.6s_1920x1080_30fps.mp4' #66
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out098.mp4' #67
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #68
file '../intersegment/paddingsegment_h264_2.6s_1920x1080_30fps.mp4' #68
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out100.mp4' #69
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #70
file '../intersegment/paddingsegment_h264_0.6s_1920x1080_30fps.mp4' #70
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out102.mp4' #71
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #72
file '../intersegment/paddingsegment_h264_1.6s_1920x1080_30fps.mp4' #72
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out104.mp4' #73
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #74
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #74
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #74
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #74
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #74
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #74
file '../intersegment/paddingsegment_h264_0.6s_1920x1080_30fps.mp4' #74
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out109.mp4' #75
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #76
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #76
file '../intersegment/paddingsegment_h264_2.6s_1920x1080_30fps.mp4' #76
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out112.mp4' #77
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #78
file '../intersegment/paddingsegment_h264_0.6s_1920x1080_30fps.mp4' #78
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out114.mp4' #79
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #80
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #80
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #80
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #80
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #80
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #80
file '../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4' #80
file '../intersegment/paddingsegment_h264_0.6s_1920x1080_30fps.mp4' #80
file '../tmp/59bd6a7896654d0b0c00705f/vidR/out119.mp4' #81
file '../tmp/59bd6a7896654d0b0c00705f/vidR/outro.mp4' #82



However, when I use the following command :


ffmpeg(__dirname + '/log/vidR_concatenate.txt')
 .inputFormat('concat')
 .inputOptions([
 '-safe 0'
 ]).outputOptions([
 '-c copy'
 ]).output(__dirname + '/output/' + ID + '/video/1080p/' + ID + '-R-1080p.mp4')
 .on('start', function (commandLine) {
 console.log('Spawned Ffmpeg with command: ' + commandLine);
 })
 .on('error', function (err, stdout, stderr) {
 console.log('An error occurred: ' + err.message, err, stderr);
 })
 .on('progress', function (progress) {
 console.log('Processing: ' + progress.percent + '% done')
 })
 .on('end', function (err, stdout, stderr) {
 console.log('Finished vidR processing!' /*, err, stdout, stderr*/)
 resolve()
 })
 .run()



I do not end up with a video length that is the sum of all individual videos !


ffprobe -i ../intersegment/intersegment_h264_3s_1920x1080_30fps.mp4 :


Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'intersegment/intersegment_h264_3s_1920x1080_30fps.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf58.29.100
 Duration: 00:00:03.00, start: 0.000000, bitrate: 24 kb/s
 Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 19 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
 Metadata:
 handler_name : VideoHandler



ffprobe -i ../intersegment/paddingsegment_h264_0.6s_1920x1080_30fps.mp4 :


Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'intersegment/paddingsegment_h264_0.6s_1920x1080_30fps.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf58.29.100
 Duration: 00:00:00.60, start: 0.000000, bitrate: 45 kb/s
 Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 30 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
 Metadata:
 handler_name : VideoHandler



ffprobe -i ../tmp/59bd6a7896654d0b0c00705f/vidR/intro.mp4 :


Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'tmp/59bd6a7896654d0b0c00705f/vidR/intro.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf58.29.100
 Duration: 00:00:14.80, start: 0.000000, bitrate: 21 kb/s
 Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 17 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
 Metadata:
 handler_name : VideoHandler



ffprobe -i ../tmp/59bd6a7896654d0b0c00705f/vidR/outro.mp4 :


Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'tmp/59bd6a7896654d0b0c00705f/vidR/outro.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf58.29.100
 Duration: 00:00:05.30, start: 0.000000, bitrate: 22 kb/s
 Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 18 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
 Metadata:
 handler_name : VideoHandler



ffprobe -i ../tmp/59bd6a7896654d0b0c00705f/vidR/out003.mp4 :


Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'tmp/59bd6a7896654d0b0c00705f/vidR/out003.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 title : Big Buck Bunny, Sunflower version
 artist : Blender Foundation 2008, Janus Bager Kristensen 2013
 composer : Sacha Goedegebure
 encoder : Lavf58.29.100
 comment : Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net
 genre : Animation
 Duration: 00:00:08.40, start: 0.000000, bitrate: 3703 kb/s
 Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 3699 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
 Metadata:
 handler_name : GPAC ISO Video Handler



I thought all the fps, tbr, tbn and tbc are the same, so what is the problem ??
It is off several seconds from the total sum of each individual file !


-
What video format will allow Android MediaPlayer.seekTo() to reliably provide frame-accurate scrubbing ?
8 juillet 2015, par Tim ClossWe have an iOS app that we are currently rebuilding for Android. The app relies on being able to scrub video with frame accuracy. We have 3D animations that are rendered out as single frames ; we build subsets of frames into lots of small (1-2 second) videos ; and the app provides the ability to scrub those videos and see each individual frame.
The MP4 videos we initially created work fine on iOS. When we tried to get them working on Android (using the MediaPlayer class), we entered a world of pain ! What we need to do is find a video format that will play and allow frame-accurate scrubbing across all Android devices, using MediaPlayer.seekTo(). Initially we are targetting Android 3.0 and above, but we probably want to stretch back to 2.3.3 after our initial release. Here’s what I’ve discovered so far :
(A) Android claims that H264 "baseline profile" should be supported everywhere : (URL). However, within that, there are dozens of other settings that may or may not be supported. Is there a more fine-grained list anywhere ? Currently we are converting to H264 within an MP4 container.
(B) I haven’t yet seen an Android device that will accurately scrub H264 files without inserting keyframes ("intra frames"). iOS will happily take H264 files without keyframes and provide accurate scrubbing. It seems that, to allow accurate scrubbing, we need to insert a keyframe for every frame of the video (the relevant ffmpeg setting is "-g 1"). This significantly increases the file size.
(C) However, inserting a keyframe for every frame results in a video that will not play at all on the Samsung Galaxy Note 3 (Snapdragon chipset I believe). Reducing the keyframes to every second frame or above seems to work (ffmpeg setting "-g 2").
To summarise :
MediaPlayer.seekTo() seems very dependent on the video format, and varies across devices. Is this the intention ? Is there a base level of behaviour that seekTo() is supposed to provide, regardless of format ?What video format that will allow frame-accurate scrubbing (using MediaPlayer.seekTo()) across all Android devices (at least for 3.0 and above ?)