Recherche avancée

Médias (91)

Autres articles (57)

  • La sauvegarde automatique de canaux SPIP

    1er avril 2010, par

    Dans le cadre de la mise en place d’une plateforme ouverte, il est important pour les hébergeurs de pouvoir disposer de sauvegardes assez régulières pour parer à tout problème éventuel.
    Pour réaliser cette tâche on se base sur deux plugins SPIP : Saveauto qui permet une sauvegarde régulière de la base de donnée sous la forme d’un dump mysql (utilisable dans phpmyadmin) mes_fichiers_2 qui permet de réaliser une archive au format zip des données importantes du site (les documents, les éléments (...)

  • XMP PHP

    13 mai 2011, par

    Dixit Wikipedia, XMP signifie :
    Extensible Metadata Platform ou XMP est un format de métadonnées basé sur XML utilisé dans les applications PDF, de photographie et de graphisme. Il a été lancé par Adobe Systems en avril 2001 en étant intégré à la version 5.0 d’Adobe Acrobat.
    Étant basé sur XML, il gère un ensemble de tags dynamiques pour l’utilisation dans le cadre du Web sémantique.
    XMP permet d’enregistrer sous forme d’un document XML des informations relatives à un fichier : titre, auteur, historique (...)

  • Sélection de projets utilisant MediaSPIP

    29 avril 2011, par

    Les exemples cités ci-dessous sont des éléments représentatifs d’usages spécifiques de MediaSPIP pour certains projets.
    Vous pensez avoir un site "remarquable" réalisé avec MediaSPIP ? Faites le nous savoir ici.
    Ferme MediaSPIP @ Infini
    L’Association Infini développe des activités d’accueil, de point d’accès internet, de formation, de conduite de projets innovants dans le domaine des Technologies de l’Information et de la Communication, et l’hébergement de sites. Elle joue en la matière un rôle unique (...)

Sur d’autres sites (4659)

  • Winamp and the March of GUI

    1er juillet 2012, par Multimedia Mike — General, ars technica, gui, user interface, winamp

    Ars Technica recently published a 15-year retrospective on the venerable Winamp multimedia player, prompting bouts of nostalgia and revelations of "Huh ? That program is still around ?" from many readers. I was among them.



    I remember first using Winamp in 1997. I remember finding a few of these new files called MP3s online and being able to play the first 20 seconds using the official Fraunhofer Windows player— full playback required the fully licensed version. Then I searched for another player and came up with Winamp. The first version I ever used was v1.05 in the summer of 1997. I remember checking the website often for updates and trying out every single one. I can’t imagine doing that nowadays— programs need to auto-update themselves (which Winamp probably does now ; I can’t recall the last time I used the program).

    Video Underdog
    The last time Winamp came up on my radar was early in 2003 when a new version came with support for a custom, proprietary multimedia audio/video format called Nullsoft Video (NSV). I remember the timeframe because the date is indicated in the earliest revision of my NSV spec document (back when I was maintaining such docs in a series of plaintext files). This was cobbled together from details I and others in the open source multimedia community sorted out from sample files. It was missing quite a few details, though.

    Then, Winamp founder Justin Frankel — introduced through a colleague on the xine team — emailed me his official NSV format and told me I was free to incorporate details into my document just as long as it wasn’t obvious that I had the official spec. This put me in an obnoxious position of trying to incorporate details which would have been very difficult to reverse engineer without the official doc. I think I coped with the situation by never really getting around to updating my doc in any meaningful way. Then, one day, the official spec was released to the world anyway, and it is now mirrored here at multimedia.cx.

    I don’t think the format ever really caught on in any meaningful way, so not a big deal. (Anytime I say that about a format, I always learn it saw huge adoption is some small but vocal community.)

    What’s Wrong With This Picture ?
    What I really wanted to discuss in this post was the matter of graphical user interfaces and how they have changed in the last 15 years.

    I still remember when I first downloaded Winamp v1.05 and tried it on my Windows machine at the time. Indignantly, the first thought I had was, "What makes this program think it’s so special that it’s allowed to violate the user interface conventions put forth by the rest of the desktop ?" All of the Windows programs followed a standard set of user interface patterns and had a consistent look and feel... and then Winamp came along and felt it could violate all those conventions.

    I guess I let the program get away with it because it was either that or only play 20-second clips from the unregistered Fraunhofer player. Though incredibly sterile by comparison, the Fraunhofer player, it should be noted, followed Windows UI guidelines to the letter.

    As the summer of 1997 progressed and more Winamp versions were released, eventually one came out (I think it was v1.6 or so) that supported skins. I was excited because there was a skin that made the program look like a proper Windows program— at least if you used the default Windows color scheme, and had all of your fonts a certain type and size.

    Skins were implemented by packaging together a set of BMP images to overlay on various UI elements. I immediately saw a number of shortcomings with this skinning approach. A big one was UI lock-in. Ironically, if you skin an app and wish to maintain backwards compatibility with the thousands of skins selflessly authored by your vibrant community (seriously, I couldn’t believe how prolific these things were), then you were effectively locked into the primary UI. Forget about adding a new button anywhere.

    Another big problem was resolution-independence. Basing your UI on static bitmaps doesn’t scale well with various resolutions. Winamp had its normal mode and it also had double-sized mode.

    Skins proliferated among many types of programs in the late 1990s. I always treasured this Suck.com (remember them ? that’s a whole other nostalgia trip) essay from April, 2000 entitled Skin Cancer. Still, Winamp was basically the standard, and the best, and I put away my righteous nerd rage and even dug through the vast troves of skins. I remember settling on Swankamp for a good part of 1998, probably due to the neo-swing revival at the time.



    Then again, if Winamp irked me, imagine my reaction when I was first exposed to the Sonique Music Player in 1998 :



    The New UI Order
    Upon reflection, I realize now that I had a really myopic view of what a computer GUI should be. I thought the GUIs were necessarily supposed to follow the WIMP (windows, icons, mouse, pointer) paradigm and couldn’t conceive of anything different. For a long time, I couldn’t envision a useful GUI on a small device (like a phone) because WIMP didn’t fit well on such a small interface (even though I saw various ill-fated attempts to make it work). This thinking seriously crippled me when I was trying to craft a GUI for a custom console media player I was developing as a hobby many years ago.

    I’m looking around at what I have open on my Windows 7 desktop right now. Google Chrome browser, Apple iTunes, Adobe Photoshop Elements, and VMware Player are 4 programs which all seem to have their own skins. Maybe Winamp doesn’t look so out of place these days.

  • ffmpeg Error while filtering : Cannot allocate memory

    7 juillet 2017, par Andres MERE

    My workstation seems to have plenty of memory (and everything). When I am trying to run ffmpeg as follows :

    /usr/local/bin/ffmpeg \
       -loglevel debug \
       -i "A066C002_170619NU_CANON.mov" \
       -filter_complex "[0:0] [0:2] amerge, aformat=sample_fmts=s16:channel_layouts=stereo [a]" \
       -map "[a]" \
       -map 0:5 \
       -c:a libfdk_aac \
       -vbr 3 \
       -vcodec libx264 \
       -profile:v baseline \
       -level 3.0 \
       -vf scale=1280:720 \
       -pix_fmt yuv420p \
       -crf 20 \
       -metadata title="Test movie" \
       -movflags +faststart \
       -y \
       "A066C002_170619NU_CANON.mp4"

    It fails with "Error while filtering : Cannot allocate memory".

    ffmpeg version N-86721-gf605b56-am Copyright (c) 2000-2017 the FFmpeg developers
         built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4)
         configuration: --extra-version=am --enable-gpl --enable-libfdk-aac --enable-libsoxr --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree --enable-shared
         libavutil      55. 67.100 / 55. 67.100
         libavcodec     57.100.103 / 57.100.103
         libavformat    57. 75.100 / 57. 75.100
         libavdevice    57.  7.100 / 57.  7.100
         libavfilter     6. 94.100 /  6. 94.100
         libswscale      4.  7.101 /  4.  7.101
         libswresample   2.  8.100 /  2.  8.100
         libpostproc    54.  6.100 / 54.  6.100
       Splitting the commandline.
       Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument 'debug'.
       Reading option '-i' ... matched as input url with argument 'A066C002_170619NU_CANON.mov'.
       Reading option '-filter_complex' ... matched as option 'filter_complex' (create a complex filtergraph) with argument '[0:0] [0:2] amerge, aformat=sample_fmts=s16:channel_layouts=stereo [a]'.
       Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '[a]'.
       Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:5'.
       Reading option '-c:a' ... matched as option 'c' (codec name) with argument 'libfdk_aac'.
       Reading option '-vbr' ... matched as AVOption 'vbr' with argument '3'.
       Reading option '-vcodec' ... matched as option 'vcodec' (force video codec ('copy' to copy stream)) with argument 'libx264'.
       Reading option '-profile:v' ... matched as option 'profile' (set profile) with argument 'baseline'.
       Reading option '-level' ... matched as AVOption 'level' with argument '3.0'.
       Reading option '-vf' ... matched as option 'vf' (set video filters) with argument 'scale=1280:720'.
       Reading option '-pix_fmt' ... matched as option 'pix_fmt' (set pixel format) with argument 'yuv420p'.
       Reading option '-crf' ... matched as AVOption 'crf' with argument '20'.
       Reading option '-metadata' ... matched as option 'metadata' (add metadata) with argument 'title=Test movie'.
       Reading option '-movflags' ... matched as AVOption 'movflags' with argument '+faststart'.
       Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
       Reading option 'A066C002_170619NU_CANON.mp4' ... matched as output url.
       Finished splitting the commandline.
       Parsing a group of options: global .
       Applying option loglevel (set logging level) with argument debug.
       Applying option filter_complex (create a complex filtergraph) with argument [0:0] [0:2] amerge, aformat=sample_fmts=s16:channel_layouts=stereo [a].
       Applying option y (overwrite output files) with argument 1.
       Successfully parsed a group of options.
       Parsing a group of options: input url A066C002_170619NU_CANON.mov.
       Successfully parsed a group of options.
       Opening an input file: A066C002_170619NU_CANON.mov.
       [NULL @ 0x1c4f920] Opening 'A066C002_170619NU_CANON.mov' for reading
       [file @ 0x1c4ffc0] Setting default whitelist 'file,crypto'
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Unknown dref type 0x73696c61 size 12
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Processing st: 0, edit list 0 - media time: 0, duration: 129254400
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Unknown dref type 0x73696c61 size 12
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Processing st: 1, edit list 0 - media time: 0, duration: 129254400
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Unknown dref type 0x73696c61 size 12
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Processing st: 2, edit list 0 - media time: 0, duration: 129254400
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Unknown dref type 0x73696c61 size 12
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Processing st: 3, edit list 0 - media time: 0, duration: 129254400
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Unknown dref type 0x73696c61 size 12
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Processing st: 4, edit list 0 - media time: 0, duration: 1
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Unknown dref type 0x73696c61 size 12
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Processing st: 5, edit list 0 - media time: 0, duration: 67320
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] Before avformat_find_stream_info() pos: 59339926200 bytes read:760258 seeks:3 nb_streams:6
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] All info found
       [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1c4f920] After avformat_find_stream_info() pos: 1180516 bytes read:1945622 seeks:4 frames:144
       Guessed Channel Layout for Input Stream #0.0 : mono
       Guessed Channel Layout for Input Stream #0.1 : mono
       Guessed Channel Layout for Input Stream #0.2 : mono
       Guessed Channel Layout for Input Stream #0.3 : mono
       Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'A066C002_170619NU_CANON.mov':
         Metadata:
           creation_time   : 2017-06-19T10:12:13.000000Z
           com.apple.quicktime.creationdate: 2017-06-19T13:12:13+0300
           com.apple.proapps.manufacturer: CANON
           com.apple.quicktime.make: CANON
           com.apple.proapps.mio.cameraName: EOS C300 Mark II
           com.apple.proapps.cameraname: EOS C300 Mark II
           com.apple.quicktime.model: EOS C300 Mark II
           com.apple.quicktime.camera.identifier: 060e2b34-0401-010d-0e15-0056454f0200
           com.divergentmedia.editready.timecodeStart: 05:45:28:08
           com.divergentmedia.editready.sonyXDCamTC: 05:45:28:08
           com.divergentmedia.editReady.version: EditReady 1.4.9, 798
           com.apple.proapps.studio.metadataFieldDominanceOverride: 1
           date            : 2017-06-19T13:12:13+0300
           date-eng        : 2017-06-19T13:12:13+0300
           make            : CANON
           make-eng        : CANON
           model           : EOS C300 Mark II
           model-eng       : EOS C300 Mark II
           timecode        : 05:45:28:08
         Duration: 00:44:52.80, start: 0.000000, bitrate: 176292 kb/s
           Stream #0:0(eng), 47, 1/48000: Audio: pcm_s16le (lpcm / 0x6D63706C), 48000 Hz, mono, s16, 768 kb/s (default)
           Metadata:
             creation_time   : 2017-06-19T10:12:13.000000Z
             handler_name    : Apple Alias Data Handler
           Stream #0:1(eng), 47, 1/48000: Audio: pcm_s16le (lpcm / 0x6D63706C), 48000 Hz, mono, s16, 768 kb/s (default)
           Metadata:
             creation_time   : 2017-06-19T10:12:13.000000Z
             handler_name    : Apple Alias Data Handler
           Stream #0:2(eng), 47, 1/48000: Audio: pcm_s16le (lpcm / 0x6D63706C), 48000 Hz, mono, s16, 768 kb/s (default)
           Metadata:
             creation_time   : 2017-06-19T10:12:13.000000Z
             handler_name    : Apple Alias Data Handler
           Stream #0:3(eng), 1, 1/48000: Audio: pcm_s16le (lpcm / 0x6D63706C), 48000 Hz, mono, s16, 768 kb/s (default)
           Metadata:
             creation_time   : 2017-06-19T10:12:13.000000Z
             handler_name    : Apple Alias Data Handler
           Stream #0:4(eng), 1, 1/25: Data: none (tmcd / 0x64636D74), 0/1, 0 kb/s (default)
           Metadata:
             creation_time   : 2017-06-19T10:12:13.000000Z
             handler_name    : Apple Alias Data Handler
             timecode        : 05:45:28:08
           Stream #0:5(eng), 1, 1/25: Video: prores, 1 reference frame (apch / 0x68637061), yuv422p10le(bt709, progressive), 1920x1080, 0/1, 173217 kb/s, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 25 tbn, 25 tbc (default)
           Metadata:
             creation_time   : 2017-06-21T11:52:58.000000Z
             handler_name    : Apple Alias Data Handler
             encoder         : Apple ProRes 422 (HQ)
       Successfully opened the file.
       detected 16 logical cores
       [Parsed_aformat_1 @ 0x1c71a60] Setting 'sample_fmts' to value 's16'
       [Parsed_aformat_1 @ 0x1c71a60] Setting 'channel_layouts' to value 'stereo'
       Parsing a group of options: output url A066C002_170619NU_CANON.mp4.
       Applying option map (set input stream mapping) with argument [a].
       Applying option map (set input stream mapping) with argument 0:5.
       Applying option c:a (codec name) with argument libfdk_aac.
       Applying option vcodec (force video codec ('copy' to copy stream)) with argument libx264.
       Applying option profile:v (set profile) with argument baseline.
       Applying option vf (set video filters) with argument scale=1280:720.
       Applying option pix_fmt (set pixel format) with argument yuv420p.
       Applying option metadata (add metadata) with argument title=Test movie.
       Successfully parsed a group of options.
       Opening an output file: A066C002_170619NU_CANON.mp4.
       [file @ 0x1d4fe40] Setting default whitelist 'file,crypto'
       Successfully opened the file.
       Stream mapping:
         Stream #0:0 (pcm_s16le) -> amerge:in0 (graph 0)
         Stream #0:2 (pcm_s16le) -> amerge:in1 (graph 0)
         aformat (graph 0) -> Stream #0:0 (libfdk_aac)
         Stream #0:5 -> #0:1 (prores (native) -> h264 (libx264))
       Press [q] to stop, [?] for help
       cur_dts is invalid (this is harmless if it occurs once at the start per stream)
           Last message repeated 1 times
       [Parsed_scale_0 @ 0x2397e60] Setting 'w' to value '1280'
       [Parsed_scale_0 @ 0x2397e60] Setting 'h' to value '720'
       [Parsed_scale_0 @ 0x2397e60] Setting 'flags' to value 'bicubic'
       [Parsed_scale_0 @ 0x2397e60] w:1280 h:720 flags:'bicubic' interl:0
       [graph 1 input from stream 0:5 @ 0x23984c0] Setting 'video_size' to value '1920x1080'
       [graph 1 input from stream 0:5 @ 0x23984c0] Setting 'pix_fmt' to value '74'
       [graph 1 input from stream 0:5 @ 0x23984c0] Setting 'time_base' to value '1/25'
       [graph 1 input from stream 0:5 @ 0x23984c0] Setting 'pixel_aspect' to value '1/1'
       [graph 1 input from stream 0:5 @ 0x23984c0] Setting 'sws_param' to value 'flags=2'
       [graph 1 input from stream 0:5 @ 0x23984c0] Setting 'frame_rate' to value '25/1'
       [graph 1 input from stream 0:5 @ 0x23984c0] w:1920 h:1080 pixfmt:yuv422p10le tb:1/25 fr:25/1 sar:1/1 sws_param:flags=2
       [format @ 0x2399240] compat: called with args=[yuv420p]
       [format @ 0x2399240] Setting 'pix_fmts' to value 'yuv420p'
       [AVFilterGraph @ 0x1d517e0] query_formats: 4 queried, 3 merged, 0 already done, 0 delayed
       [Parsed_scale_0 @ 0x2397e60] w:1920 h:1080 fmt:yuv422p10le sar:1/1 -> w:1280 h:720 fmt:yuv420p sar:1/1 flags:0x4
       [libx264 @ 0x1d4f1a0] using mv_range_thread = 24
       [libx264 @ 0x1d4f1a0] using SAR=1/1
       [libx264 @ 0x1d4f1a0] frame MB size (80x45) > level limit (1620)
       [libx264 @ 0x1d4f1a0] MB rate (90000) > level limit (40500)
       [libx264 @ 0x1d4f1a0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
       [libx264 @ 0x1d4f1a0] profile Constrained Baseline, level 3.0
       [libx264 @ 0x1d4f1a0] 264 - core 152 r2851 ba24899 - H.264/MPEG-4 AVC codec - Copyleft 2003-2017 - http://www.videolan.org/x264.html - options: cabac=0 ref=2 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=-2 threads=22 lookahead_threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=20.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
       cur_dts is invalid (this is harmless if it occurs once at the start per stream)
           Last message repeated 94 times
       [Parsed_aformat_1 @ 0x2559500] Setting 'sample_fmts' to value 's16'
       [Parsed_aformat_1 @ 0x2559500] Setting 'channel_layouts' to value 'stereo'
       [graph_0_in_0_0 @ 0x257c7c0] Setting 'time_base' to value '1/48000'
       [graph_0_in_0_0 @ 0x257c7c0] Setting 'sample_rate' to value '48000'
       [graph_0_in_0_0 @ 0x257c7c0] Setting 'sample_fmt' to value 's16'
       [graph_0_in_0_0 @ 0x257c7c0] Setting 'channel_layout' to value '0x4'
       [graph_0_in_0_0 @ 0x257c7c0] tb:1/48000 samplefmt:s16 samplerate:48000 chlayout:0x4
       [graph_0_in_0_2 @ 0x25820a0] Setting 'time_base' to value '1/48000'
       [graph_0_in_0_2 @ 0x25820a0] Setting 'sample_rate' to value '48000'
       [graph_0_in_0_2 @ 0x25820a0] Setting 'sample_fmt' to value 's16'
       [graph_0_in_0_2 @ 0x25820a0] Setting 'channel_layout' to value '0x4'
       [graph_0_in_0_2 @ 0x25820a0] tb:1/48000 samplefmt:s16 samplerate:48000 chlayout:0x4
       [format_out_0_0 @ 0x2580ce0] Setting 'sample_fmts' to value 's16'
       [format_out_0_0 @ 0x2580ce0] Setting 'sample_rates' to value '96000|88200|64000|48000|44100|32000|24000|22050|16000|12000|11025|8000'
       [format_out_0_0 @ 0x2580ce0] Setting 'channel_layouts' to value '0x4|0x3|0x7|0x107|0x37|0x3f|0xff|0x63f'
       [Parsed_amerge_0 @ 0x1c6edc0] No channel layout for input 1
       [AVFilterGraph @ 0x1c8abc0] query_formats: 5 queried, 6 merged, 0 already done, 9 delayed
       [AVFilterGraph @ 0x1c8abc0] query_formats not finished
       [Parsed_amerge_0 @ 0x1c6edc0] Input channel layouts overlap: output layout will be determined by the number of distinct input channels
       [AVFilterGraph @ 0x1c8abc0] query_formats: 1 queried, 9 merged, 6 already done, 0 delayed
       [Parsed_amerge_0 @ 0x1c6edc0] in0:mono + in1:mono -> out:stereo
       [libfdk_aac @ 0x1d4e300] Note, the VBR setting is unsupported and only works with some parameter combinations
       Output #0, mp4, to 'A066C002_170619NU_CANON.mp4':
         Metadata:
           timecode        : 05:45:28:08
           com.apple.quicktime.creationdate: 2017-06-19T13:12:13+0300
           com.apple.proapps.manufacturer: CANON
           com.apple.quicktime.make: CANON
           com.apple.proapps.mio.cameraName: EOS C300 Mark II
           com.apple.proapps.cameraname: EOS C300 Mark II
           com.apple.quicktime.model: EOS C300 Mark II
           com.apple.quicktime.camera.identifier: 060e2b34-0401-010d-0e15-0056454f0200
           com.divergentmedia.editready.timecodeStart: 05:45:28:08
           com.divergentmedia.editready.sonyXDCamTC: 05:45:28:08
           com.divergentmedia.editReady.version: EditReady 1.4.9, 798
           com.apple.proapps.studio.metadataFieldDominanceOverride: 1
           date            : 2017-06-19T13:12:13+0300
           date-eng        : 2017-06-19T13:12:13+0300
           make            : CANON
           make-eng        : CANON
           model           : EOS C300 Mark II
           model-eng       : EOS C300 Mark II
           title           : Test movie
           encoder         : Lavf57.75.100
           Stream #0:0, 0, 1/48000: Audio: aac (libfdk_aac) (mp4a / 0x6134706D), 48000 Hz, stereo, s16, delay 2048 (default)
           Metadata:
             encoder         : Lavc57.100.103 libfdk_aac
           Stream #0:1(eng), 0, 1/12800: Video: h264 (libx264), 1 reference frame (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 0/1, q=-1--1, 25 fps, 12800 tbn, 25 tbc (default)
           Metadata:
             creation_time   : 2017-06-21T11:52:58.000000Z
             handler_name    : Apple Alias Data Handler
             encoder         : Lavc57.100.103 libx264
           Side data:
             cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
       cur_dts is invalid (this is harmless if it occurs once at the start per stream)
           Last message repeated 2 times
       Clipping frame in rate conversion by 0.000008
       cur_dts is invalid (this is harmless if it occurs once at the start per stream)
           Last message repeated 201 times
       cur_dts is invalid (this is harmless if it occurs once at the start per stream) 0x    
           Last message repeated 157 times
       cur_dts is invalid (this is harmless if it occurs once at the start per stream) 0x    
       [libx264 @ 0x1d4f1a0] frame=   0 QP=19.02 NAL=3 Slice:I Poc:0   I:3600 P:0    SKIP:0    size=49899 bytes
       Error while filtering: Cannot allocate memory
       [libx264 @ 0x1d4f1a0] frame=   1 QP=19.20 NAL=2 Slice:P Poc:2   I:14   P:2118 SKIP:1468 size=6808 bytes
       [libx264 @ 0x1d4f1a0] frame=   2 QP=18.86 NAL=2 Slice:P Poc:4   I:15   P:2339 SKIP:1246 size=7088 bytes
       [libx264 @ 0x1d4f1a0] frame=   3 QP=19.08 NAL=2 Slice:P Poc:6   I:9    P:2449 SKIP:1142 size=7341 bytes
       [libx264 @ 0x1d4f1a0] frame=   4 QP=18.92 NAL=2 Slice:P Poc:8   I:5    P:2482 SKIP:1113 size=7725 bytes
       [libx264 @ 0x1d4f1a0] frame=   5 QP=18.73 NAL=2 Slice:P Poc:10  I:6    P:2100 SKIP:1494 size=6831 bytes
       [libx264 @ 0x1d4f1a0] frame=   6 QP=18.73 NAL=2 Slice:P Poc:12  I:4    P:2492 SKIP:1104 size=8298 bytes
       [libx264 @ 0x1d4f1a0] frame=   7 QP=18.52 NAL=2 Slice:P Poc:14  I:1    P:2397 SKIP:1202 size=7250 bytes
       [libx264 @ 0x1d4f1a0] frame=   8 QP=18.51 NAL=2 Slice:P Poc:16  I:7    P:1523 SKIP:2070 size=5344 bytes
       [libx264 @ 0x1d4f1a0] frame=   9 QP=18.51 NAL=2 Slice:P Poc:18  I:6    P:2398 SKIP:1196 size=7865 bytes
       [libx264 @ 0x1d4f1a0] frame=  10 QP=18.58 NAL=2 Slice:P Poc:20  I:1    P:1840 SKIP:1759 size=6451 bytes
       [libx264 @ 0x1d4f1a0] frame=  11 QP=18.58 NAL=2 Slice:P Poc:22  I:5    P:1764 SKIP:1831 size=6159 bytes
       [libx264 @ 0x1d4f1a0] frame=  12 QP=18.52 NAL=2 Slice:P Poc:24  I:3    P:2421 SKIP:1176 size=8151 bytes
       [libx264 @ 0x1d4f1a0] frame=  13 QP=18.51 NAL=2 Slice:P Poc:26  I:1    P:1892 SKIP:1707 size=6476 bytes
       [libx264 @ 0x1d4f1a0] frame=  14 QP=18.41 NAL=2 Slice:P Poc:28  I:3    P:1919 SKIP:1678 size=6431 bytes
       [libx264 @ 0x1d4f1a0] frame=  15 QP=18.48 NAL=2 Slice:P Poc:30  I:1    P:1255 SKIP:2344 size=4060 bytes
       [libx264 @ 0x1d4f1a0] frame=  16 QP=18.79 NAL=2 Slice:P Poc:32  I:2    P:1373 SKIP:2225 size=4398 bytes
       [libx264 @ 0x1d4f1a0] frame=  17 QP=18.77 NAL=2 Slice:P Poc:34  I:2    P:1459 SKIP:2139 size=4480 bytes
       [libx264 @ 0x1d4f1a0] frame=  18 QP=19.01 NAL=2 Slice:P Poc:36  I:7    P:1658 SKIP:1935 size=5003 bytes
       [libx264 @ 0x1d4f1a0] scene cut at 48 Icost:227110 Pcost:199261 ratio:0.1226 bias:0.1307 gop:48 (imb:3134 pmb:220)
       [libx264 @ 0x1d4f1a0] frame=  19 QP=18.95 NAL=2 Slice:P Poc:38  I:0    P:2461 SKIP:1139 size=7169 bytes
       [libx264 @ 0x1d4f1a0] frame=  20 QP=19.01 NAL=2 Slice:P Poc:40  I:1    P:2118 SKIP:1481 size=6048 bytes
       [libx264 @ 0x1d4f1a0] frame=  21 QP=19.04 NAL=2 Slice:P Poc:42  I:0    P:2114 SKIP:1486 size=5838 bytes
       [libx264 @ 0x1d4f1a0] frame=  22 QP=18.97 NAL=2 Slice:P Poc:44  I:3    P:2277 SKIP:1320 size=5952 bytes
       [libx264 @ 0x1d4f1a0] frame=  23 QP=19.12 NAL=2 Slice:P Poc:46  I:0    P:1658 SKIP:1942 size=4813 bytes
       [libx264 @ 0x1d4f1a0] frame=  24 QP=19.33 NAL=2 Slice:P Poc:48  I:0    P:1926 SKIP:1674 size=5503 bytes
       [libx264 @ 0x1d4f1a0] frame=  25 QP=19.25 NAL=2 Slice:P Poc:50  I:0    P:2470 SKIP:1130 size=6478 bytes
       [libx264 @ 0x1d4f1a0] frame=  26 QP=19.21 NAL=2 Slice:P Poc:52  I:0    P:2589 SKIP:1011 size=6985 bytes
       [libx264 @ 0x1d4f1a0] frame=  27 QP=19.12 NAL=2 Slice:P Poc:54  I:0    P:2312 SKIP:1288 size=6381 bytes
       [libx264 @ 0x1d4f1a0] frame=  28 QP=19.20 NAL=2 Slice:P Poc:56  I:2    P:2532 SKIP:1066 size=7296 bytes
       [libx264 @ 0x1d4f1a0] frame=  29 QP=19.01 NAL=2 Slice:P Poc:58  I:0    P:2611 SKIP:989  size=8186 bytes
       [libx264 @ 0x1d4f1a0] frame=  30 QP=18.95 NAL=2 Slice:P Poc:60  I:0    P:2582 SKIP:1018 size=7610 bytes
       [libx264 @ 0x1d4f1a0] frame=  31 QP=19.02 NAL=2 Slice:P Poc:62  I:2    P:2620 SKIP:978  size=8077 bytes
       [libx264 @ 0x1d4f1a0] frame=  32 QP=19.09 NAL=2 Slice:P Poc:64  I:1    P:1989 SKIP:1610 size=6214 bytes
       [libx264 @ 0x1d4f1a0] frame=  33 QP=19.09 NAL=2 Slice:P Poc:66  I:0    P:2483 SKIP:1117 size=7027 bytes
       [libx264 @ 0x1d4f1a0] frame=  34 QP=19.17 NAL=2 Slice:P Poc:68  I:0    P:2477 SKIP:1123 size=6833 bytes
       [libx264 @ 0x1d4f1a0] frame=  35 QP=19.07 NAL=2 Slice:P Poc:70  I:1    P:2373 SKIP:1226 size=6915 bytes
       [libx264 @ 0x1d4f1a0] frame=  36 QP=19.28 NAL=2 Slice:P Poc:72  I:3    P:2400 SKIP:1197 size=6975 bytes
       [libx264 @ 0x1d4f1a0] frame=  37 QP=19.21 NAL=2 Slice:P Poc:74  I:1    P:2643 SKIP:956  size=7505 bytes
       [libx264 @ 0x1d4f1a0] frame=  38 QP=19.40 NAL=2 Slice:P Poc:76  I:0    P:2289 SKIP:1311 size=6682 bytes
       [libx264 @ 0x1d4f1a0] frame=  39 QP=19.52 NAL=2 Slice:P Poc:78  I:1    P:2074 SKIP:1525 size=5823 bytes
       [libx264 @ 0x1d4f1a0] frame=  40 QP=19.72 NAL=2 Slice:P Poc:80  I:2    P:2420 SKIP:1178 size=6552 bytes
       [libx264 @ 0x1d4f1a0] frame=  41 QP=19.99 NAL=2 Slice:P Poc:82  I:274  P:2019 SKIP:1307 size=7398 bytes
       [libx264 @ 0x1d4f1a0] frame=  42 QP=19.77 NAL=2 Slice:P Poc:84  I:545  P:1946 SKIP:1109 size=7933 bytes
       [libx264 @ 0x1d4f1a0] frame=  43 QP=19.52 NAL=2 Slice:P Poc:86  I:523  P:1969 SKIP:1108 size=7596 bytes
       [libx264 @ 0x1d4f1a0] frame=  44 QP=19.25 NAL=2 Slice:P Poc:88  I:649  P:1303 SKIP:1648 size=6070 bytes
       [libx264 @ 0x1d4f1a0] frame=  45 QP=18.80 NAL=2 Slice:P Poc:90  I:949  P:1115 SKIP:1536 size=6608 bytes
       [libx264 @ 0x1d4f1a0] frame=  46 QP=18.51 NAL=2 Slice:P Poc:92  I:915  P:1141 SKIP:1544 size=6499 bytes
       [libx264 @ 0x1d4f1a0] frame=  47 QP=18.38 NAL=2 Slice:P Poc:94  I:882  P:1071 SKIP:1647 size=6326 bytes
       [libx264 @ 0x1d4f1a0] frame=  48 QP=15.38 NAL=3 Slice:I Poc:0   I:3600 P:0    SKIP:0    size=15254 bytes
       [libx264 @ 0x1d4f1a0] frame=  49 QP=18.47 NAL=2 Slice:P Poc:2   I:870  P:1178 SKIP:1552 size=9327 bytes
       [libx264 @ 0x1d4f1a0] frame=  50 QP=18.35 NAL=2 Slice:P Poc:4   I:691  P:1606 SKIP:1303 size=9056 bytes
       [libx264 @ 0x1d4f1a0] frame=  51 QP=18.56 NAL=2 Slice:P Poc:6   I:567  P:1697 SKIP:1336 size=9923 bytes
       [libx264 @ 0x1d4f1a0] frame=  52 QP=18.72 NAL=2 Slice:P Poc:8   I:500  P:1725 SKIP:1375 size=10632 bytes
       [libx264 @ 0x1d4f1a0] frame=  53 QP=18.46 NAL=2 Slice:P Poc:10  I:537  P:1789 SKIP:1274 size=9973 bytes
       [libx264 @ 0x1d4f1a0] frame=  54 QP=18.55 NAL=2 Slice:P Poc:12  I:478  P:1916 SKIP:1206 size=10196 bytes
       [libx264 @ 0x1d4f1a0] frame=  55 QP=18.68 NAL=2 Slice:P Poc:14  I:446  P:2027 SKIP:1127 size=10172 bytes
       [libx264 @ 0x1d4f1a0] frame=  56 QP=19.00 NAL=2 Slice:P Poc:16  I:284  P:2138 SKIP:1178 size=9705 bytes
       [libx264 @ 0x1d4f1a0] frame=  57 QP=19.10 NAL=2 Slice:P Poc:18  I:244  P:2116 SKIP:1240 size=9518 bytes
       [libx264 @ 0x1d4f1a0] frame=  58 QP=19.39 NAL=2 Slice:P Poc:20  I:239  P:2231 SKIP:1130 size=8953 bytes
       [libx264 @ 0x1d4f1a0] frame=  59 QP=19.16 NAL=2 Slice:P Poc:22  I:178  P:2379 SKIP:1043 size=9059 bytes
       [libx264 @ 0x1d4f1a0] frame=  60 QP=19.28 NAL=2 Slice:P Poc:24  I:58   P:2329 SKIP:1213 size=8257 bytes
       [libx264 @ 0x1d4f1a0] frame=  61 QP=19.21 NAL=2 Slice:P Poc:26  I:34   P:2231 SKIP:1335 size=6689 bytes
       [libx264 @ 0x1d4f1a0] frame=  62 QP=19.55 NAL=2 Slice:P Poc:28  I:14   P:2219 SKIP:1367 size=6164 bytes
       [libx264 @ 0x1d4f1a0] frame=  63 QP=20.04 NAL=2 Slice:P Poc:30  I:8    P:1836 SKIP:1756 size=4318 bytes
       [mp4 @ 0x1d4c880] Starting second pass: moving the moov atom to the beginning of the file
       [mp4 @ 0x1d4c880] Opening 'A066C002_170619NU_CANON.mp4' for reading
       [file @ 0xa01a460] Setting default whitelist 'file,crypto'
       [AVIOContext @ 0x6b95260] Statistics: 509968 bytes read, 0 seeks
       frame=   64 fps= 48 q=-1.0 Lsize=     500kB time=00:00:02.52 bitrate=1625.5kbits/s speed=1.88x    
       video:497kB audio:1kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.417128%
       Input file #0 (A066C002_170619NU_CANON.mov):
         Input stream #0:0 (audio): 141 packets read (288000 bytes); 141 frames decoded (144000 samples);
         Input stream #0:1 (audio): 47 packets read (96000 bytes);
         Input stream #0:2 (audio): 141 packets read (288000 bytes); 141 frames decoded (144000 samples);
         Input stream #0:3 (audio): 1 packets read (2048 bytes);
         Input stream #0:4 (data): 1 packets read (4 bytes);
         Input stream #0:5 (video): 64 packets read (59520416 bytes); 64 frames decoded;
         Total: 395 packets (60194468 bytes) demuxed
       Output file #0 (A066C002_170619NU_CANON.mp4):
         Output stream #0:0 (audio): 1 frames encoded (1024 samples); 3 packets muxed (740 bytes);
         Output stream #0:1 (video): 64 frames encoded; 64 packets muxed (509175 bytes);
         Total: 67 packets (509915 bytes) muxed
       346 frames successfully decoded, 0 decoding errors
       [AVIOContext @ 0x1c71880] Statistics: 4 seeks, 7 writeouts
       [libx264 @ 0x1d4f1a0] frame I:2     Avg QP:17.20  size: 32576
       [libx264 @ 0x1d4f1a0] frame P:62    Avg QP:18.99  size:  7152
       [libx264 @ 0x1d4f1a0] mb I  I16..4: 49.2%  0.0% 50.8%
       [libx264 @ 0x1d4f1a0] mb P  I16..4:  3.5%  0.0%  1.0%  P16..4: 45.1%  8.4%  3.5%  0.0%  0.0%    skip:38.5%
       [libx264 @ 0x1d4f1a0] coded y,uvDC,uvAC intra: 30.7% 30.5% 4.8% inter: 7.0% 19.1% 0.3%
       [libx264 @ 0x1d4f1a0] i16 v,h,dc,p: 47% 21%  9% 23%
       [libx264 @ 0x1d4f1a0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 37% 18% 18%  5%  6%  4%  5%  4%  3%
       [libx264 @ 0x1d4f1a0] i8c dc,h,v,p: 72% 11% 15%  2%
       [libx264 @ 0x1d4f1a0] ref P L0: 63.8% 36.2%
       [libx264 @ 0x1d4f1a0] kb/s:1589.21
       [AVIOContext @ 0x1c583a0] Statistics: 61656934 bytes read, 59 seeks

    I happen to be absolute beginner (at least in ffmpeg). What went wrong ?

    Thanks ! Andres Mere

  • Parsing The Clue Chronicles

    30 décembre 2018, par Multimedia Mike — Game Hacking

    A long time ago, I procured a 1999 game called Clue Chronicles : Fatal Illusion, based on the classic board game Clue, a.k.a. Cluedo. At the time, I was big into collecting old, unloved PC games so that I could research obscure multimedia formats.



    Surveying the 3 CD-ROMs contained in the box packaging revealed only Smacker (SMK) videos for full motion video which was nothing new to me or the multimedia hacking community at the time. Studying the mix of data formats present on the discs, I found a selection of straightforward formats such as WAV for audio and BMP for still images. I generally find myself more fascinated by how computer games are constructed rather than by playing them, and this mix of files has always triggered a strong “I could implement a new engine for this !” feeling in me, perhaps as part of the ScummVM project which already provides the core infrastructure for reimplementing engines for 2D adventure games.

    Tying all of the assets together is a custom high-level programming language. I have touched on this before in a blog post over a decade ago. The scripts are in a series of files bearing the extension .ini (usually reserved for configuration scripts, but we’ll let that slide). A representative sample of such a script can be found here :

    clue-chronicles-scarlet-1.txt

    What Is This Language ?
    At the time I first analyzed this language, I was still primarily a C/C++-minded programmer, with a decent amount of Perl experience as a high level language, and had just started to explore Python. I assessed this language to be “mildly object oriented with C++-type comments (‘//’) and reliant upon a number of implicit library functions”. Other people saw other properties. When I look at it nowadays, it reminds me a bit more of JavaScript than C++. I think it’s sort of a Rorschach test for programming languages.

    Strangely, I sort of had this fear that I would put a lot of effort into figuring out how to parse out the language only for someone to come along and point out that it’s a well-known yet academic language that already has a great deal of supporting code and libraries available as open source. Google for “spanish dolphins far side comic” for an illustration of the feeling this would leave me with.

    It doesn’t matter in the end. Even if such libraries exist, how easy would they be to integrate into something like ScummVM ? Time to focus on a workable approach to understanding and processing the format.

    Problem Scope
    So I set about to see if I can write a program to parse the language seen in these INI files. Some questions :

    1. How large is the corpus of data that I need to be sure to support ?
    2. What parsing approach should I take ?
    3. What is the exact language format ?
    4. Other hidden challenges ?

    To figure out how large the data corpus is, I counted all of the INI files on all of the discs. There are 138 unique INI files between the 3 discs. However, there are 146 unique INI files after installation. This leads to a hidden challenge described a bit later.

    What parsing approach should I take ? I worried a bit too much that I might not be doing this the “right” way. I’m trying to ignore doubts like this, like how “SQL Shame” blocked me on a task for a little while a few years ago as I concerned myself that I might not be using the purest, most elegant approach to the problem. I know I covered language parsing a lot time ago in university computer science education and there is a lot of academic literature to the matter. But sometimes, you just have to charge in and experiment and prototype and see what falls out. In doing so, I expect to have a better understanding of the problems that need to solved and the right questions to ask, not unlike that time that I wrote a continuous integration system from scratch because I didn’t actually know that “continuous integration” was the keyword I needed.

    Next, what is the exact language format ? I realized that parsing the language isn’t the first and foremost problem here– I need to know exactly what the language is. I need to know what the grammar are keywords are. In essence, I need to reverse engineer the language before I write a proper parser for it. I guess that fits in nicely with the historical aim of this blog (reverse engineering).

    Now, about the hidden challenges– I mentioned that there are 8 more INI files after the game installs itself. Okay, so what’s the big deal ? For some reason, all of the INI files are in plaintext on the CD-ROM but get compressed (apparently, according to file size ratios) when installed to the hard drive. This includes those 8 extra INI files. I thought to look inside the CAB installation archive file on the CD-ROM and the files were there… but all in compressed form. I suspect that one of the files forms the “root” of the program and is the launching point for the game.

    Parsing Approach
    I took a stab at parsing an INI file. My approach was to first perform lexical analysis on the file and create a list of 4 types : symbols, numbers, strings, and language elements ([]{}()=., :). Apparently, this is the kind of thing that Lex/Flex are good at. This prototyping tool is written in Python, but when I port this to ScummVM, it might be useful to call upon the services of Lex/Flex, or another lexical analyzer, for there are many. I have a feeling it will be easier to use better tools when I understand the full structure of the language based on the data available.

    The purpose of this tool is to explore all the possibilities of the existing corpus of INI files. To that end, I ran all 138 of the plaintext files through it, collected all of the symbols, and massaged the results, assuming that the symbols that occurred most frequently are probably core language features. These are all the symbols which occur more than 1000 times among all the scripts :

       6248 false
       5734 looping
       4390 scripts
       3877 layer
       3423 sequentialscript
       3408 setactive
       3360 file
       3257 thescreen
       3239 true
       3008 autoplay
       2914 offset
       2599 transparent
       2441 text
       2361 caption
       2276 add
       2205 ge
       2197 smackanimation
       2196 graphicscript
       2196 graphic
       1977 setstate
       1642 state
       1611 skippable
       1576 desc
       1413 delayscript
       1298 script
       1267 seconds
       1019 rect
    

    About That Compression
    I have sorted out at least these few details of the compression :

    bytes 0-3    "COMP" (a pretty strong sign that this is, in fact, compressed data)
    bytes 4-11   unknown
    bytes 12-15  size of uncompressed data
    bytes 16-19  size of compressed data (filesize - 20)
    bytes 20-    compressed payload
    

    The compression ratios are on the same order of gzip. I was hoping that it was stock zlib data. However, I have been unable to prove this. I wrote a Python script that scrubbed through the first 100 bytes of payload data and tried to get Python’s zlib.decompress to initialize– no luck. It’s frustrating to know that I’ll have to reverse engineer a compression algorithm that deals with just 8 total text files if I want to see this effort through to fruition.

    Update, January 15, 2019
    Some folks expressed interest in trying to sort out the details of the compression format. So I have posted a followup in which I post some samples and go into deeper details about things I have tried :

    Reverse Engineering Clue Chronicles Compression

    The post Parsing The Clue Chronicles first appeared on Breaking Eggs And Making Omelettes.