Skip to content

Commit

Permalink
Subtitles export (#168)
Browse files Browse the repository at this point in the history
* added option to export srt files

and layout to export other type of captions with auto segmentation of lines

* added support for other subtitles formats
  • Loading branch information
Pietro authored Jul 31, 2019
1 parent 4319001 commit ffb68a8
Show file tree
Hide file tree
Showing 35 changed files with 10,232 additions and 45 deletions.
36 changes: 19 additions & 17 deletions demo/select-export-format.js
Original file line number Diff line number Diff line change
@@ -1,23 +1,25 @@
import React from 'react';
import PropTypes from 'prop-types';

// using PureComponent to minimise number of unnecessary re-renders
class ExportFormatSelect extends React.PureComponent {

render() {
const { props } = this;

return (<select className={ props.className } name={ props.name } value={ props.value } onChange={ props.handleChange }>
<option value="draftjs">Draft Js</option>
<option value="txt">Text file</option>
<option value="txtspeakertimecodes">Text file - with Speakers and Timecodes</option>
<option value="html" disabled>HTML</option>
<option value="docx">MS Word</option>
<option value="digitalpaperedit">Digital Paper Edit</option>
</select>
);
}
}
const ExportFormatSelect = props => {
return <select className={ props.className } name={ props.name } value={ props.value } onChange={ props.handleChange }>
<option value="draftjs">Draft Js</option>
<option value="txt">Text file</option>
<option value="txtspeakertimecodes">Text file - with Speakers and Timecodes</option>
<option value="html" disabled>HTML</option>
<option value="word" disabled>MS Word</option>
<option value="digitalpaperedit">Digital Paper Edit</option>
<option value="srt">Srt - Captions</option>
<option value="ttml">TTML - Captions</option>
<option value="premiereTTML">TTML for Adobe Premiere - Captions</option>
<option value="itt">iTT - Captions</option>
<option value="csv">CSV - Captions</option>
<option value="vtt">VTT - Captions</option>
<option value="pre-segment-txt">Pre-segment-txt - Captions</option>
<option value="docx">MS Word</option>
<option value="json-captions">Json - Captions</option>
</select>;
};

ExportFormatSelect.propTypes = {
className: PropTypes.string,
Expand Down
95 changes: 67 additions & 28 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@
"react-dom": "^16.6.0",
"react-keyboard-shortcuts": "^1.1.3",
"react-simple-tooltip": "^2.3.3",
"sbd": "^1.0.15",
"smpte-timecode": "^1.2.3"
"react-visibility-sensor": "^5.1.1"
},
"peerDependencies": {
Expand Down
43 changes: 43 additions & 0 deletions packages/export-adapters/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import draftToTxt from './txt/index';
import draftToDocx from './docx/index';
import draftToTxtSpeakersTimecodes from './txt-speakers-timecodes/index';
import draftToDigitalPaperEdit from './draftjs-to-digital-paper-edit/index.js';
import subtitlesGenerator from './subtitles-generator/index.js';
/**
* Adapters for Draft.js conversion
* @param {json} blockData - Draft.js blocks
Expand All @@ -20,6 +21,48 @@ const exportAdapter = (blockData, exportFormat, transcriptTitle) => {
return { data: draftToTxtSpeakersTimecodes(blockData), ext: 'txt' };
case 'digitalpaperedit':
return { data: draftToDigitalPaperEdit(blockData), ext: 'json' };
case 'srt':
var { words } = draftToDigitalPaperEdit(blockData);
const srtContent = subtitlesGenerator({ words, type: 'srt', numberOfCharPerLine: 35 });

return { data: srtContent, ext: 'srt' };

case 'premiereTTML':
var { words } = draftToDigitalPaperEdit(blockData);
var content = subtitlesGenerator({ words, type: 'premiere' });

return { data: content, ext: 'ttml' };
case 'ttml':
var { words } = draftToDigitalPaperEdit(blockData);
var content = subtitlesGenerator({ words, type: 'ttml' });

return { data: content, ext: 'ttml' };
case 'itt':
var { words } = draftToDigitalPaperEdit(blockData);
var content = subtitlesGenerator({ words, type: 'itt' });

return { data: content, ext: 'itt' };

case 'csv':
var { words } = draftToDigitalPaperEdit(blockData);
var content = subtitlesGenerator({ words, type: 'csv' });

return { data: content, ext: 'csv' };
case 'vtt':
var { words } = draftToDigitalPaperEdit(blockData);
var content = subtitlesGenerator({ words, type: 'vtt' });

return { data: content, ext: 'vtt' };
case 'json-captions':
var { words } = draftToDigitalPaperEdit(blockData);
var content = subtitlesGenerator({ words, type: 'json' });

return { data: content, ext: 'json' };
case 'pre-segment-txt':
var { words } = draftToDigitalPaperEdit(blockData);
var content = subtitlesGenerator({ words, type: 'pre-segment-txt' });

return { data: content, ext: 'txt' };
default:
// code block
console.error('Did not recognise the export format');
Expand Down
Loading

0 comments on commit ffb68a8

Please sign in to comment.