Archive for the ‘Technology’ Category.

Integrating Dotsub in to your video CMS

It’s a question we get here at Dotsub all the time. How do I integrate the captioning process into my custom CMS system? In this blog post I’ll show you how simple it is to add subtitles to your CMS workflow with a few calls to the Dotsub API.

I’ll be using cURL to call the Dotsub API and Python to listen for callbacks. This guide will use features from our ‘Extended API‘ which is only available to Enterprise accounts. If you need access to this API please contact us.

We will implement a workflow which will do the following:

  • Upload videos to Dotsub.
  • Orders captions and translations.
  • Listens for Pings from Dotsub server to download completed subtitle files.

The first step is to upload the video to Dotsub. Our team is good, but not good enough to caption your video without the file! Our ‘Media API‘ lets you upload a video file or provide us with a URL directly to a video file.

curl -u "username:password" -L -F [email protected]/Users/brooks/Movies/foo.mov -F title='My Video' -F description='Example' -F language='eng' -F license='a2be14e1-37d9-11dd-ae16-0800200c9a66' -F project=projectId https://dotsub.com/api/media

Note: You’ll have to replace username, password and projectId with the values for your Dotsub account.
Dotsub will reply with the UUID for your new video.

{"status":{"message":"Media created","error":false,"uuid":"f67c4500-9616-4ee6-962b-122c2aeb1e78","code":200}}

There you have it, your first video uploaded to Dotsub ready to be captioned.

Now we have to tell Dotsub what to do with this video. In this case we want captions and translations in a few languages. Let’s get it translated into French (Canada), Italian and Spanish. We do this by calling the order API:

curl -u "username:password" --form items="transcription,f67c4500-9616-4ee6-962b-122c2aeb1e78" 
--form items="translation,f67c4500-9616-4ee6-962b-122c2aeb1e78,fre_ca" --form items="translation,f67c4500-9616-4ee6-962b-122c2aeb1e78,ita" --form items="translation,f67c4500-9616-4ee6-962b-122c2aeb1e78,spa" https://dotsub.com/api/order

Note: You’ll have replace f67c4500-9616-4ee6-962b-122c2aeb1e78 with a UUID of your uploaded Dotsub video.
Dotsub will reply with all the details of your order:

{
    "order": {
        "completionDate": 1424375078795,
        "createdBy": "admin",
        "dateCreated": 1424375078760,
        "discount": 0,
        "id": "e94503e7-c253-4ed6-a8f3-1dda65833363",
        "invoiceNumber": "",
        "invoiced": false,
        "notes": "",
        "orderItems": [
            {
                "actor": "",
                "completionDate": 1424375078781,
                "dateCreated": 1424375078781,
                "deliveryDate": 0,
                "id": "e4b97aed-1918-44d8-b3b9-5743b350b903",
                "itemType": "TranscriptionOrderItem",
                "language": "eng",
                "languageName": "English",
                "mediaExternalIdentifier": "",
                "mediaId": "f67c4500-9616-4ee6-962b-122c2aeb1e78",
                "mediaLanguage": "eng",
                "mediaLanguageName": "English",
                "mediaTitle": "My Video",
                "orderId": "e94503e7-c253-4ed6-a8f3-1dda65833363",
                "orderNumber": "249",
                "orderProjectId": "",
                "orderProjectName": "",
                "orderStatus": "PENDING",
                "orderUsername": "admin",
                "percentageComplete": 0,
                "period": null,
                "price": 0,
                "readyToAssign": true,
                "subtitleSpecification": null,
                "userName": "",
                "vendorAssignedDate": 0,
                "vendorId": "",
                "vendorName": "",
                "videoMinutes": 0
            },
            {
                "actor": "",
                "completionDate": 1424375078783,
                "dateCreated": 1424375078783,
                "deliveryDate": 0,
                "id": "529c8a1b-0e50-491b-a3ac-6813441405f6",
                "itemType": "TranslationOrderItem",
                "language": "spa",
                "languageName": "Spanish",
                "mediaExternalIdentifier": "",
                "mediaId": "f67c4500-9616-4ee6-962b-122c2aeb1e78",
                "mediaLanguage": "eng",
                "mediaLanguageName": "English",
                "mediaTitle": "My Video",
                "orderId": "e94503e7-c253-4ed6-a8f3-1dda65833363",
                "orderNumber": "249",
                "orderProjectId": "",
                "orderProjectName": "",
                "orderStatus": "PENDING",
                "orderUsername": "admin",
                "percentageComplete": 0,
                "period": null,
                "price": 0,
                "readyToAssign": true,
                "subtitleSpecification": null,
                "userName": "",
                "vendorAssignedDate": 0,
                "vendorId": "",
                "vendorName": "",
                "videoMinutes": 0
            },
            {
                "actor": "",
                "completionDate": 1424375078782,
                "dateCreated": 1424375078782,
                "deliveryDate": 0,
                "id": "8d065be9-e72f-47b5-8cca-720eb6ea9078",
                "itemType": "TranslationOrderItem",
                "language": "ita",
                "languageName": "Italian",
                "mediaExternalIdentifier": "",
                "mediaId": "f67c4500-9616-4ee6-962b-122c2aeb1e78",
                "mediaLanguage": "eng",
                "mediaLanguageName": "English",
                "mediaTitle": "My Video",
                "orderId": "e94503e7-c253-4ed6-a8f3-1dda65833363",
                "orderNumber": "249",
                "orderProjectId": "",
                "orderProjectName": "",
                "orderStatus": "PENDING",
                "orderUsername": "admin",
                "percentageComplete": 0,
                "period": null,
                "price": 0,
                "readyToAssign": true,
                "subtitleSpecification": null,
                "userName": "",
                "vendorAssignedDate": 0,
                "vendorId": "",
                "vendorName": "",
                "videoMinutes": 0
            },
            {
                "actor": "",
                "completionDate": 1424375078782,
                "dateCreated": 1424375078782,
                "deliveryDate": 0,
                "id": "6a2c0dfa-d814-45ca-9d72-ac1deaea827d",
                "itemType": "TranslationOrderItem",
                "language": "fre_ca",
                "languageName": "French (Canada)",
                "mediaExternalIdentifier": "",
                "mediaId": "f67c4500-9616-4ee6-962b-122c2aeb1e78",
                "mediaLanguage": "eng",
                "mediaLanguageName": "English",
                "mediaTitle": "My Video",
                "orderId": "e94503e7-c253-4ed6-a8f3-1dda65833363",
                "orderNumber": "249",
                "orderProjectId": "",
                "orderProjectName": "",
                "orderStatus": "PENDING",
                "orderUsername": "admin",
                "percentageComplete": 0,
                "period": null,
                "price": 0,
                "readyToAssign": true,
                "subtitleSpecification": null,
                "userName": "",
                "vendorAssignedDate": 0,
                "vendorId": "",
                "vendorName": "",
                "videoMinutes": 0
            }
        ],
        "orderNumber": 249,
        "orderSource": "ADMIN",
        "orderStatus": "PENDING",
        "price": 0,
        "projectId": "",
        "projectName": "",
        "totalItems": 4,
        "videoMinutes": 0
    }
}

Now we will build a Python script that listens for pings from the Dotsub API. The address Dotsub sends pings to is configured under ‘Project Settings’ in your project.

We will listen for ‘order pings‘ where their status is ‘ITEM_COMPLETED’. When we see that an item is completed we will download it using the ‘Order Download‘ API.

from BaseHTTPServer import BaseHTTPRequestHandler
from SocketServer import ThreadingMixIn
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
import base64
import urllib2
import cgi
#An example script that listens for HTTP order pings from the Dotsub API.

username = "username"
password = "password"

auth_header = base64.b64encode(("%s:%s" % (username, password)))

download_url = "https://dotsub.com/api/order/%s/items/%s/download"

class PostHandler(BaseHTTPRequestHandler):
    def do_POST(self):
        # Parse the form data posted
        form = cgi.FieldStorage(
            fp=self.rfile,
            headers=self.headers,
            environ={'REQUEST_METHOD': 'POST',
                     'CONTENT_TYPE': self.headers['Content-Type'],
                     })
        #There are the 4 fields the Dotsub Order Ping API posts in a callback.
        orderId = form['orderId'].value
        itemId = form['itemId'].value
        language = form['language'].value
        state = form['state'].value
        #only download an item when the item has been completed
        if state == 'ITEM_COMPLETE':
            file_url = download_url % (orderId, itemId)
            sub_req = urllib2.Request(file_url)
            sub_req.add_header('Authorization', 'Basic %s' % auth_header)
            u = urllib2.urlopen(sub_req)
            filename =  "%s_%s.srt" % (itemId, language)
            localFile = open( filename, 'w')
            localFile.write(u.read())
            localFile.close()
        self.send_response(200)

class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
    """Handle requests in a separate thread."""

if __name__ == '__main__':
    server = ThreadedHTTPServer(('', 9088), PostHandler)
    print 'Starting server, use  to stop'
    server.serve_forever()

And there you have it. In under 100 lines of code, we are submitting video files to Dotsub, ordering captions and translations, and handling the download of completed caption files.сайтповедение клиентоввзлом пользователей вконтакте

Updated YouTube Synchronization and Upload

We have recently made some updates to how Dotsub integrates with YouTube. We are now using OAuth 2.0 and the latest version on YouTube APIs.

You will now be asked what channel in your YouTube account you’d like to give Dotsub access to. This will simplify the connection process for anyone using channels.

Screen Shot 2015-02-13 at 12.50.36 PM

 

After selecting the channel you will see a confirmation screen:

Screen Shot 2015-02-13 at 12.52.43 PM

 

The same push and match options are available to all users. Our enterprise clients can also set up automated subtitle updates to YouTube.

Because of this update, you will be asked again to give permission on your YouTube account next time you use the feature. You can see if you have made this update on your ‘My Account‘ page. Users who need to re-authenticate with YouTube will see this warning message:

Screen Shot 2015-02-13 at 12.48.05 PMsiteсоздание веб контентаскачать vkbot бесплатно и без регистрации

Dotsub.com now with full site SSL

We are happy to announce that Dotsub.com is now enforcing that all users access via SSL. While we have supported SSL for a few years, SSL first is an important step forward.

HTTPS ensures that information between you and Dotsub is encrypted. This protects you from man in the middle attacks, where someone could potentially listen into your requests.

If you have any questions please let us know! Enjoy secure browsing of Dotsub.comизготовление сайтов визитоккак раскрутить новый магазинodnovzlom скачать бесплатно

Language Services Sector Growth

According to market research firm Common Sense Advisory (CSA), the global market for outsourced language services and technology will surpass US$37.19 billion in 2014.  The industry, they predict, will continue to grow between the period of 2013 and 2018, at a compound annual growth rate of 5.72%.

“Language service providers in most regions of the world reported steady growth during calendar year 2013,” explained Don DePalma, CSA’s founder and Chief Strategy Officer. “However, we contend that the era of double-digit growth in language services is over, due to several factors, including exchange rates, global competition, and an increase in the use of translation technology. The good news is that the market continues to grow, just not as much as it once did.”

This pattern of strong growth reflects the continued expansion of multinational companies.  It is also fueled by the lowering of technological barriers allowing small and emerging organizations to do business globally.

Research on Global Markets says that the market for providing language service is expected to grow in almost all the parts of the world. Major growth is expected in the developed nations of Europe and North America. They also predict that the developing countries of the Middle East, Asia Pacific, and Latin America will emerge as growth areas for the industry.  Currently the US is the single largest market.  The figure below is a snapshot of the global market size in 2012.

CSA

 

 

 

 

 

 

 

 

 

 

 

 

Sources:

www.commonsenseadvisory.com

www.researchonglobalmarkets.com

 сайтиндексирование гугланонимайзер вк с музыкой и видео

Vimeo Integration

Dotsub is happy to announce we have added support for Vimeo. You can now upload your Dotsub videos or captions into Vimeo.

Setting up a vimeo integration is very simple. You have to enable access from ‘My Account’ on our site menu:
Screen Shot 2015-01-14 at 8.42.05 AM

 

In your ‘My Account’ settings you will see ‘Publishing Settings’. Here you can enable/disable access to your Vimeo account.

Screen Shot 2015-01-14 at 8.42.17 AM

 

Clicking ‘Enable Access’ will prompt you to validate Dotsub access to your Vimeo account:

Screen Shot 2015-01-14 at 8.42.30 AM

Please Note: Please do not uncheck ‘upload videos on my behalf’. Upload permissions is what allows Dotsub to send captions to your account. 

Now you can access the Vimeo feature from any of your videos. In the sidebar to the right of the video player, you will see the ‘Publish Video’ area. Hitting ‘Publish Video to my Vimeo Account’ will begin the sync process.

 

Screen Shot 2015-01-14 at 8.46.09 AM

You are now presented with two options. Select whichever is appropriate for you.

Screen Shot 2015-01-14 at 8.46.17 AM

After matching or pushing a video to Vimeo you will be shown the link to the video.

Screen Shot 2015-01-14 at 8.46.59 AM

You should now see captions on your Vimeo video!

 

Screen Shot 2015-01-14 at 8.47.30 AM

 

If you have any questions please let us know at [email protected].free-anonymizer.ruаренда номеровнакрутка вконтакте онлайн

Dotsub.com November Statistics

Here is the December edition of our regular section giving you, the Dotsub community, an idea of where in the world our users were using Dotsub and what languages they were working in during the month of November, 2014 and as always a fascinating piece of geography trivia at the end, this month with some Natural History thrown in.

English, Spanish and Portuguese are well established at the top of the rankings these days and in the last few months French and Czech have been consistently 4th and 5th, with Dutch, Italian and German vying for the next 3 places. Russian is the first language with a different alphabet at 9th and Japanese, Chinese, Korean, Greek, Hebrew and Arabic are also represented in the top 20. So there are 13 of the top 20 using the Latin alphabet with 7 using other characters.

As always I have removed the top few (4 in this case) to make the graph a little more discernible.

 

In the countries section, Spain took second place pushing Canada to third, Brazil staying at 4th with the UK at 5th. Slovenia roared back into the top 20 at  #10 and New Zealand appeared at #14. Argentina dropped from #13 to #18 and Israel crept in at #20.

And removing the US allows everything else to be seen a little more easily.

 

Geography Trivia. The intriguing part of the data to me, as regular readers know, is the countries and/or territories that are at the other end of the list with only one or two visits. This month we primarily had unique visits from islands or groups of islands. This month, 10 of the 12 unique visitors came from island nations, the other 2 from African nations, one of those being the newest nation on earth, South Sudan.

The island group we will mention this week is Kiribati. Officially the Independent and Sovereign Republic of Kiribati, is an island nation in the central tropical Pacific Ocean. The permanent population is just over 100,000 (2011) on 800 square kilometers (310 sq mi). The nation is composed of 32 atolls and one raised coral island, Banaba, dispersed over 3.5 million square kilometers, (1,351,000 square miles) straddling the equator, and bordering the International Date Line at its easternmost point amidst the Line Islands.

The name Kiribati is the local pronunciation of Gilberts, which derives from the main island chain, named the Gilbert Islands after the British explorer Thomas Gilbert, who sailed through the islands in 1788. The capital, South Tarawa, consists of a number of islets connected through a series of causeways, located in the Tarawa archipelago. Kiribati became independent from the United Kingdom in 1979. It is a member of the Commonwealth of Nations, the IMF and the World Bank, and became a full member of the United Nations in 1999.

It reached the zenith of its popularity on December 31st, 1999 where because of its proximity to the International Date Line, it was the first nation to see the new millennium. It was probably also the first nation to realize that the Y2K fears were greatly exaggerated.

Its flag …

See you next month when we will do a wrap up of the stats for 2014 and see how things changed throughout the year.оптимизация нового сайтапрограмма для анализа позиций сайтакак взломать видео в контакте

Videum Ends the Year with a Relaunch!

Videum, a Dotsub partner, recently relaunched their website focused on delivering health & medical videos to a global audience.  Videum (www.videum.com) aggregates videos from some of the top health content producers and distributes them to leading health and video sites around the world.  With over 200+ publishers in 86 countries, Videum works with its strategic partner, Publicis Healthcare, to reach a target audience of healthcare professionals and consumers.  A primary feature of the Videum platform is its capability to enable multi-language subtitles, making content accessible across language barriers.

“Videum.com is powered by Dotsub,” explains Paul Dinsmore, President & COO of Videum, “Dotsub lets us make good on the promise of outstanding health content made effective because it can be delivered in native languages.”

New functionality on the website include an enhanced user experience, viewing through topical and custom Watchlists, and ‘lean-back’ viewing of health and medical videos by categories via Videum TV.

For more information, please contact Paul Dinsmore @ [email protected].dlya-minecraftэффективное продвижениекласнолом полная версия скачать

Autoplaying Brightcove Captions and Subtitles

We recently had a customer ask us how to have captions autoplay in their Brightcove player without any changes to their pages.  It turns out this is not currently possible. Since this is such an important and simple use-case, we decided to not only solve it for our client, but also to release the code on github for anyone to use.

If you are familiar with Brightcove you’ll know that there are two parts to any plugin. Flash and Javascript versions of a plugin need to be created.

First lets look at the Flash component. Brightcove provides the ‘CustomModule’ interface as a starting point for your plugin. All we have to do is override initialize() and set captions enabled to ‘true’.

package {

import com.brightcove.api.APIModules;
import com.brightcove.api.CustomModule;
import com.brightcove.api.modules.CaptionsModule;

/**
 * A Brightcove plugin that auto loads captions.
 */
public class CaptionConfigurationModule extends CustomModule {

    override protected function initialize():void {
        var captionModule:CaptionsModule = player.getModule(APIModules.CAPTIONS) as CaptionsModule;
        captionModule.setCaptionsEnabled(true);
    }
}
}

The Javascript plugin is just as simple. Once the player is ready we set captions enabled to ‘true’.

(function() {
    function onPlayerReady() {
        var captionsModule = player.getModule(brightcove.api.modules.APIModules.CAPTIONS);
        captionsModule.setCaptionsEnabled(true);
    }

    var experience = player.getModule(brightcove.api.modules.APIModules.EXPERIENCE);
    if (experience.getReady()) {
        onPlayerReady();
    } else {
        experience.addEventListener(brightcove.player.events.ExperienceEvent.TEMPLATE_READY, onPlayerReady);
    }
}());

There you have it; two simple plugins to enable caption autoplay on your Brightcove player. You can also see these plugins in our GitHub account: https://github.com/dotsub/api-samples/tree/master/brightcove-autoplay-captionsраскрутка сайта в киевевзлом пароля в одноклассниках по логину

Captioning Your Videojs Videos

For a little change of pace, I thought it might be fun to do a write up on adding captions to an open source video player. Using Dotsub’s API, adding captions to most players is dead simple.

I decided to use videojs’s HTML5 player for this demo. Video.js is a great player and comes with built in subtitle support. This support is provided by HTML5’s track element. Dotsub’s API allows you to directly access various subtitle formats. Video.js uses WebVTT files which we can fetch from the Dotsub API using this URL pattern:

https://dotsub.com/media/<video_id>/c/<language_code>/vtt

This will fetch the WebVTT file for your video directly from our servers. We, by default, enable CORS on all WebVTT file requests, so you do not have to worry about same-origin policy issues.

Adding captions to a video player then only requires a track tag for every language you want to add. A simple player like:

<video id="dotsub_example" class="video-js vjs-default-skin" width="640" height="264" poster="http://video-js.zencoder.com/oceans-clip.png" controls preload="auto" data-setup='[]'>
<source src="http://video-js.zencoder.com/oceans-clip.mp4" type='video/mp4' />
<source src="http://video-js.zencoder.com/oceans-clip.webm" type='video/webm; codecs="vp8, vorbis"' />
<source src="http://video-js.zencoder.com/oceans-clip.ogg" type='video/ogg; codecs="theora, vorbis"' />
</video>

Becomes caption enabled by simply adding:

<video id="dotsub_example" class="video-js vjs-default-skin" width="640" height="264" poster="http://video-js.zencoder.com/oceans-clip.png" controls preload="auto" data-setup='[]'>
<source src="http://video-js.zencoder.com/oceans-clip.mp4" type='video/mp4' />
<source src="http://video-js.zencoder.com/oceans-clip.webm" type='video/webm; codecs="vp8, vorbis"' />
<source src="http://video-js.zencoder.com/oceans-clip.ogg" type='video/ogg; codecs="theora, vorbis"' />
<track kind='captions' src='https://dotsub.com/media/5d5f008c-b5d5-466f-bb83-2b3cfa997992/c/eng/vtt' srclang='en' label='English' default />
<track kind='captions' src='https://dotsub.com/media/5d5f008c-b5d5-466f-bb83-2b3cfa997992/c/spa/vtt' srclang='es' label='Spanish' />
<track kind='captions' src='https://dotsub.com/media/5d5f008c-b5d5-466f-bb83-2b3cfa997992/c/fre_ca/vtt' srclang='fr' label='French' />
</video>

Now you have a beautiful video.js player that supports captions:

 управление контекстной рекламойчитать чужую переписку в вк

New Feature: Upload Directly from Your Dropbox.com Account

Dotsub has added the ability to upload videos directly from your Dropbox.com account into your Dotsub account. This new addition makes adding files from Dropbox fast and simple.

On our upload page you will now see a ‘From Dropbox.com’ tab.

Screen Shot 2014-11-06 at 2.03.45 PM

Just hit ‘Choose from Dropbox’ and select the file from your account:

Screen Shot 2014-11-06 at 2.04.43 PM

Hit upload and *poof* your video is on Dotsub ready to be captioned and translated.план раскрутки сайтаклавиатурный шпион для андроид