Recherche avancée

Médias (0)

Mot : - Tags -/organisation

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (66)

Sur d’autres sites (14161)

  • FFMPEG - How to pipe RMS_level and pts_time metadata without generating unwanted metadata

    6 février 2020, par Tovi Newman

    I am trying to find the loudest (highest rms_level) moment in an audio file, but I need to pipe the metadata rather than write to a file.

    I converted the answer found here : [https://superuser.com/questions/1183663/determining-audio-level-peaks-with-ffmpeg][1]

    By removing the write to file command and adding a pipe.
    Here’s what I’ve got.

    ffmpeg -i loudSoft.mp3 -af astats=metadata=1:reset=1,ametadata=print:key=lavfi.astats.Overall.RMS_level -f null - 2> result.txt

    The only problem is, now I’ve got a lot of unwanted metadata before and after the RMS_level and pts_time data as well as [Parsed_ametadata_1 @ 0x7f9d42c37500] being printed on each line. None of that was being written when I was writing to a file instead of piping. (all I need is the time and the rms.)

    Here is an abridged version of what I get when I write to file :

    frame:0    pts:0       pts_time:0
    lavfi.astats.Overall.RMS_level=-inf
    frame:1    pts:47      pts_time:0.00106576
    lavfi.astats.Overall.RMS_level=-165.163347
    frame:2    pts:1199    pts_time:0.0271882
    lavfi.astats.Overall.RMS_level=-99.736394
    frame:3    pts:2351    pts_time:0.0533107
    lavfi.astats.Overall.RMS_level=-88.112282
    frame:4    pts:3503    pts_time:0.0794331
    lavfi.astats.Overall.RMS_level=-86.554314
    frame:5    pts:4655    pts_time:0.105556
    lavfi.astats.Overall.RMS_level=-82.977501
    frame:6    pts:5807    pts_time:0.131678
    lavfi.astats.Overall.RMS_level=-79.698739
    frame:7    pts:6959    pts_time:0.1578
    lavfi.astats.Overall.RMS_level=-76.629393
    frame:8    pts:8111    pts_time:0.183923
    lavfi.astats.Overall.RMS_level=-71.581211
    frame:9    pts:9263    pts_time:0.210045
    lavfi.astats.Overall.RMS_level=-75.038503
    frame:10   pts:10415   pts_time:0.236168

    And here is what I’m looking at :

    ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
     built with Apple clang version 11.0.0 (clang-1100.0.33.16)
     configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.2_1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include/darwin -fno-stack-check' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
     libavutil      56. 31.100 / 56. 31.100
     libavcodec     58. 54.100 / 58. 54.100
     libavformat    58. 29.100 / 58. 29.100
     libavdevice    58.  8.100 / 58.  8.100
     libavfilter     7. 57.100 /  7. 57.100
     libavresample   4.  0.  0 /  4.  0.  0
     libswscale      5.  5.100 /  5.  5.100
     libswresample   3.  5.100 /  3.  5.100
     libpostproc    55.  5.100 / 55.  5.100
    Input #0, mp3, from 'loudSoft2.mp3':
     Metadata:
       encoder         : Lavf58.29.100
     Duration: 00:00:09.85, start: 0.025057, bitrate: 128 kb/s
       Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s
       Metadata:
         encoder         : Lavc58.54
    Stream mapping:
     Stream #0:0 -> #0:0 (mp3 (mp3float) -> pcm_s16le (native))
    Press [q] to stop, [?] for help
    [Parsed_ametadata_1 @ 0x7f9d42c37500] frame:0    pts:0       pts_time:0
    [Parsed_ametadata_1 @ 0x7f9d42c37500] lavfi.astats.Overall.RMS_level=-inf
    Output #0, null, to 'pipe:':
     Metadata:
       encoder         : Lavf58.29.100
       Stream #0:0: Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s
       Metadata:
         encoder         : Lavc58.54.100 pcm_s16le
    [Parsed_ametadata_1 @ 0x7f9d42c37500] frame:1    pts:47      pts_time:0.00106576
    [Parsed_ametadata_1 @ 0x7f9d42c37500] lavfi.astats.Overall.RMS_level=-165.163347
    [Parsed_ametadata_1 @ 0x7f9d42c37500] frame:2    pts:1199    pts_time:0.0271882
    [Parsed_ametadata_1 @ 0x7f9d42c37500] lavfi.astats.Overall.RMS_level=-99.736394
    [Parsed_ametadata_1 @ 0x7f9d42c37500] frame:3    pts:2351    pts_time:0.0533107


    *** MIDDLE OMITTED FOR BREVITY ***


    [Parsed_ametadata_1 @ 0x7f9d42c37500] lavfi.astats.Overall.RMS_level=-88.532185
    [Parsed_ametadata_1 @ 0x7f9d42c37500] frame:375  pts:430895  pts_time:9.77086
    [Parsed_ametadata_1 @ 0x7f9d42c37500] lavfi.astats.Overall.RMS_level=-88.594276
    [Parsed_ametadata_1 @ 0x7f9d42c37500] frame:376  pts:432047  pts_time:9.79698
    [Parsed_ametadata_1 @ 0x7f9d42c37500] lavfi.astats.Overall.RMS_level=-88.654138
    size=N/A time=00:00:09.82 bitrate=N/A speed=82.6x    
    video:0kB audio:1692kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
    [Parsed_astats_0 @ 0x7f9d42c37280] Channel: 1
    [Parsed_astats_0 @ 0x7f9d42c37280] DC offset: 0.000001
    [Parsed_astats_0 @ 0x7f9d42c37280] Min level: -0.000106
    [Parsed_astats_0 @ 0x7f9d42c37280] Max level: 0.000115
    [Parsed_astats_0 @ 0x7f9d42c37280] Min difference: 0.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Max difference: 0.000077
    [Parsed_astats_0 @ 0x7f9d42c37280] Mean difference: 0.000017
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS difference: 0.000022
    [Parsed_astats_0 @ 0x7f9d42c37280] Peak level dB: -78.752617
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS level dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS peak dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS trough dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] Crest factor: 3.126627
    [Parsed_astats_0 @ 0x7f9d42c37280] Flat factor: 0.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Peak count: 2
    [Parsed_astats_0 @ 0x7f9d42c37280] Bit depth: 32/32
    [Parsed_astats_0 @ 0x7f9d42c37280] Dynamic range: 76.274252
    [Parsed_astats_0 @ 0x7f9d42c37280] Zero crossings: 246
    [Parsed_astats_0 @ 0x7f9d42c37280] Zero crossings rate: 0.222624
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of NaNs: 0
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of Infs: 0
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of denormals: 0
    [Parsed_astats_0 @ 0x7f9d42c37280] Channel: 2
    [Parsed_astats_0 @ 0x7f9d42c37280] DC offset: 0.000001
    [Parsed_astats_0 @ 0x7f9d42c37280] Min level: -0.000106
    [Parsed_astats_0 @ 0x7f9d42c37280] Max level: 0.000115
    [Parsed_astats_0 @ 0x7f9d42c37280] Min difference: 0.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Max difference: 0.000077
    [Parsed_astats_0 @ 0x7f9d42c37280] Mean difference: 0.000017
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS difference: 0.000022
    [Parsed_astats_0 @ 0x7f9d42c37280] Peak level dB: -78.752617
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS level dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS peak dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS trough dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] Crest factor: 3.126627
    [Parsed_astats_0 @ 0x7f9d42c37280] Flat factor: 0.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Peak count: 2
    [Parsed_astats_0 @ 0x7f9d42c37280] Bit depth: 32/32
    [Parsed_astats_0 @ 0x7f9d42c37280] Dynamic range: 76.274252
    [Parsed_astats_0 @ 0x7f9d42c37280] Zero crossings: 246
    [Parsed_astats_0 @ 0x7f9d42c37280] Zero crossings rate: 0.222624
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of NaNs: 0
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of Infs: 0
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of denormals: 0
    [Parsed_astats_0 @ 0x7f9d42c37280] Overall
    [Parsed_astats_0 @ 0x7f9d42c37280] DC offset: 0.000001
    [Parsed_astats_0 @ 0x7f9d42c37280] Min level: -0.000106
    [Parsed_astats_0 @ 0x7f9d42c37280] Max level: 0.000115
    [Parsed_astats_0 @ 0x7f9d42c37280] Min difference: 0.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Max difference: 0.000077
    [Parsed_astats_0 @ 0x7f9d42c37280] Mean difference: 0.000017
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS difference: 0.000022
    [Parsed_astats_0 @ 0x7f9d42c37280] Peak level dB: -78.752617
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS level dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS peak dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] RMS trough dB: -88.654138
    [Parsed_astats_0 @ 0x7f9d42c37280] Flat factor: 0.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Peak count: 2.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Bit depth: 32/32
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of samples: 1105
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of NaNs: 0.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of Infs: 0.000000
    [Parsed_astats_0 @ 0x7f9d42c37280] Number of denormals: 0.000000
  • Failed encoding Carrierwave-video FFMPEG

    12 septembre 2018, par Cole Phiper

    I’m using Carrierwave-video and Carrierwave-ffmpegthumbnailer. The problem I am having, is the transcoder is now refusing to work & I can’t locate the origin of the error. I tried removing some of the custom settings, but nothing seems to work. How can I fix the transcoder to allow video uploads ?

    story_video_uploader.rb

    require 'mime/types'
    class StoryVideoUploader < CarrierWave::Uploader::Base

     # Include RMagick or MiniMagick support:
     # include CarrierWave::RMagick
     include CarrierWave::MiniMagick
     include CarrierWave::Video
     include CarrierWave::Video::Thumbnailer
     # include CarrierWave::FFMPEG

     # Choose what kind of storage to use for this uploader:
     storage :postgresql_lo
     # storage :fog

     # Override the directory where uploaded files will be stored.
     # This is a sensible default for uploaders that are meant to be mounted:

     version :thumb do
       process thumbnail: [{ format: 'png', quality: 10, size: 200, strip: false, logger: Rails.logger }]
       def full_filename(for_file)
         png_name(for_file, version_name)
       end
       process :apply_png_content_type
     end

     version :mp4 do
       process encode_video: [:mp4, resolution: '1024x1366', preserve_aspect_ratio: :width, watermark: { path: File.join(Rails.root, 'app/assets/images/', 'logo_94x70_WHITE.png'),  position: :bottom_right, pixles_from_edge: 10  }]
     end


     def png_name(for_file, version_name)
       %Q{#{version_name}_#{for_file.chomp(File.extname(for_file))}.png}
     end

     def store_dir
       "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
     end

     def extension_white_list
       [/png\Z/, /jpe?g\Z/, /gif\Z/, /mp4\Z/, /mov\Z/, /ogg\Z/, /webm\Z/, /avi\Z/, /3gp\Z/, /mkv\Z/]
     end

     def apply_png_content_type(*)
       file.instance_variable_set(:@content_type, 'image/png')
     end
    end

    Rails Console and Error output

    irb(main):020:0> >> story.story_video = File.open("/home/cole/Downloads/Video_Of_People_Walking.mp4")
    Running....ffmpegthumbnailer -i "/home/cole/Desktop/TestApp/tmp/1536704274-2522-0003-3784/thumb/Video_Of_People_Walking.mp4" -o "/home/cole/Desktop/TestApp/tmp/1536704274-2522-0003-3784/thumb/tmpfile.png" -c png -q 10 -s 200
    Success!
    I, [2018-09-11T18:17:58.675474 #2522]  INFO -- : Running transcoding...
    ["/usr/bin/ffmpeg", "-y", "-i", "/home/cole/Desktop/TestApp/tmp/1536704274-2522-0003-3784/mp4/Video_Of_People_Walking.mp4", "-vcodec", "libx264", "-acodec", "aac", "-s", "1024x576", "-r", "30", "-strict", "-2", "-map_metadata", "-1", "-vf", "\"movie=/home/cole/Desktop/TestApp/app/assets/images/logo_94x70_WHITE.png [logo]; [in][logo] overlay=main_w-overlay_w-10:main_h-overlay_h-10 [out]\"", "-aspect", "1.7777777777777777", "/home/cole/Desktop/TestApp/tmp/1536704274-2522-0003-3784/mp4/tmpfile.mp4"]

    E, [2018-09-11T18:18:00.233135 #2522] ERROR -- : Failed encoding...
    ["/usr/bin/ffmpeg", "-y", "-i", "/home/cole/Desktop/TestApp/tmp/1536704274-2522-0003-3784/mp4/Video_Of_People_Walking.mp4", "-vcodec", "libx264", "-acodec", "aac", "-s", "1024x576", "-r", "30", "-strict", "-2", "-map_metadata", "-1", "-vf", "\"movie=/home/cole/Desktop/TestApp/app/assets/images/logo_94x70_WHITE.png [logo]; [in][logo] overlay=main_w-overlay_w-10:main_h-overlay_h-10 [out]\"", "-aspect", "1.7777777777777777", "/home/cole/Desktop/TestApp/tmp/1536704274-2522-0003-3784/mp4/tmpfile.mp4"]

    ffmpeg version 3.4.4-0ubuntu0.18.04.1 Copyright (c) 2000-2018 the FFmpeg developers
     built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)
     configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
     libavutil      55. 78.100 / 55. 78.100
     libavcodec     57.107.100 / 57.107.100
     libavformat    57. 83.100 / 57. 83.100
     libavdevice    57. 10.100 / 57. 10.100
     libavfilter     6.107.100 /  6.107.100
     libavresample   3.  7.  0 /  3.  7.  0
     libswscale      4.  8.100 /  4.  8.100
     libswresample   2.  9.100 /  2.  9.100
     libpostproc    54.  7.100 / 54.  7.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/cole/Desktop/TestApp/tmp/1536704274-2522-0003-3784/mp4/Video_Of_People_Walking.mp4':
     Metadata:
       major_brand     : mp42
       minor_version   : 0
       compatible_brands: mp42mp41isomavc1
       creation_time   : 2017-03-09T02:02:54.000000Z
     Duration: 00:00:19.19, start: 0.000000, bitrate: 3454 kb/s
       Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 3451 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
       Metadata:
         creation_time   : 2017-03-09T02:02:54.000000Z
         handler_name    : L-SMASH Video Handler
         encoder         : AVC Coding
    Stream mapping:
     Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
    Press [q] to stop, [?] for help
    [AVFilterGraph @ 0x56309b654840] No such filter: '"movie'
    Error reinitializing filters!
    Failed to inject frame into filter network: Invalid argument
    Error while processing the decoded data for stream #0:0
    Conversion failed!

    Errors: encoded file is invalid.

    FFMPEG::Error: Failed encoding.Errors: encoded file is invalid. Full output: ffmpeg version 3.4.4-0ubuntu0.18.04.1 Copyright (c) 2000-2018 the FFmpeg developers
     built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)
     configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
     libavutil      55. 78.100 / 55. 78.100
     libavcodec     57.107.100 / 57.107.100
     libavformat    57. 83.100 / 57. 83.100
     libavdevice    57. 10.100 / 57. 10.100
     libavfilter     6.107.100 /  6.107.100
     libavresample   3.  7.  0 /  3.  7.  0
     libswscale      4.  8.100 /  4.  8.100
     libswresample   2.  9.100 /  2.  9.100
     libpostproc    54.  7.100 / 54.  7.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/cole/Desktop/TestApp/tmp/1536704274-2522-0003-3784/mp4/Video_Of_People_Walking.mp4':
     Metadata:
       major_brand     : mp42
       minor_version   : 0
       compatible_brands: mp42mp41isomavc1
       creation_time   : 2017-03-09T02:02:54.000000Z
     Duration: 00:00:19.19, start: 0.000000, bitrate: 3454 kb/s
       Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 3451 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
       Metadata:
         creation_time   : 2017-03-09T02:02:54.000000Z
         handler_name    : L-SMASH Video Handler
         encoder         : AVC Coding
    Stream mapping:
     Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
    Press [q] to stop, [?] for help
    [AVFilterGraph @ 0x56309b654840] No such filter: '"movie'
    Error reinitializing filters!
    Failed to inject frame into filter network: Invalid argument
    Error while processing the decoded data for stream #0:0
    Conversion failed!

       from (irb):20
    irb(main):021:0>
  • Presentation of Piwik’s collaborative translations platform : oTrance [Interview]

    19 avril 2013, par matt — Community, translation

    thank-you-around-worldPiwik enables domain administrators, hobbyists, power users, personal website builders and everyone in between to access enormous amounts of data for website analytics. To support all those users, Piwik needs to be available in a number of different languages. From the start, we made internationalization (i18n) part of Piwik’s DNA. There are now dozens active volunteers who help make sure each language is well represented in the latest official release of Piwik. As of now, Piwik is available in 48 languages.

    Recently a new tool became available that makes the translation of Piwik much easier. The software we are using is an open source platform called oTrance. It has made our translation architecture more robust, and it allows us to expedite the timely delivery of high quality and up-to-date translations to the thousands of people who rely on Piwik every day.

    We’ve met with oTrance creator and lead developer Daniel Schlichtholz who answered a few questions for us.

    What is oTrance ?

    oTranCe is the short form of “Online Translation Center”. It was born because I needed a translation platform for my project MySQLDumper.

    Many languages have been added by the community and manual maintenance became more and more time consuming. I wanted to change that. So I searched for an existing platform I could use and tested a lot of approaches. To put a long story short : none of the given solutions satisfied my needs.

    From the view of a translator maintaining a language should be as easy as possible. In most cases they have to install a program on their local machine or the workflow was too difficult. A translator doesn’t want to struggle with technical things ; he just wants to translate the phrases and wants to know the progress.

    That’s the main goal we want to reach : to make the translation process as easy as possible.

    What sets oTrance apart from the other ways to manage translations ?

    Ease of use is one advantage of oTranCe compared to other solutions. Another advantage is that project administrators can install oTranCe on their own server – so nobody is dependant of a third party provider.

    We love to get feedback from other users. User feedback influences the way oTranCe is developed. We believe that this way oTranCe satisfies the requirements of the real world.

    We also have extensive user documentation, in our “Working with oTranCe” wiki. We try to document use cases in an understandable way. We don’t write down marketing buzz words, but try to explain the use from the view of the user/administrator.

    Now that oTranCe 1.0 is out, what will you be working on next ?

    The language files can be exported to version control and oTranCe can commit changes to the target repository. Currently we support export to Subversion, and we are working on a Git export adapter, which will be released soon.

    Another issue we are trying to solve is the context problem. When your project uses many different phrases the translator often doesn’t know in which context the current phrase is used. Version 1.1.0 (not released yet, but you can grab the latest developer version from GitHub) introduces the oTranCe-connector. The idea behind it : a small plug in grabs the used phrases/keys on the current page, and on click this list is submitted to oTranCe, where the translator can edit the words. This way the translator knows in which context these phrases are used. I wrote a small plug in for OXID eShop. Since it is really easy to implement, my hope is that other plug ins for other applications will be added by the community.

    Matthieu : Congratulations Daniel for having created such an awesome Translation Platform. At Piwik we are really thankful for oTranCe, which has resulted in much better translation process, and happier translators. Keep up the good work !

    If you are a Piwik user, and if you want to participate in translating Piwik, please sign up for an account on oTrance and become part of the team making Piwik available in more languages across the world.