initial commit
This commit is contained in:
commit
45ffd4c97c
74
linesplit.php
Executable file
74
linesplit.php
Executable file
@ -0,0 +1,74 @@
|
|||||||
|
#!/usr/bin/php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
|
||||||
|
// Split at double-NL to only split at srt boundaries
|
||||||
|
$lines = explode("\n\n", file_get_contents($_SERVER['argv'][1]));
|
||||||
|
|
||||||
|
$nextbuffer = '';
|
||||||
|
$buffwords = 0;
|
||||||
|
|
||||||
|
$nextline = 0;
|
||||||
|
|
||||||
|
global $output_buffer;
|
||||||
|
$output_buffer = '';
|
||||||
|
|
||||||
|
function flushwords($text) {
|
||||||
|
|
||||||
|
// Counter
|
||||||
|
static $count = 1;
|
||||||
|
|
||||||
|
// Copy to clipboard
|
||||||
|
$xclip = popen('xclip -selection clipboard', 'wb');
|
||||||
|
$n = fwrite($xclip, $text);
|
||||||
|
if ($n !== strlen($text)) {
|
||||||
|
throw new \Exception("short write");
|
||||||
|
}
|
||||||
|
if (pclose($xclip) !== 0) {
|
||||||
|
throw new \Exception("xclip fatal exit code");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait for signal that a response is ready in the clipboard
|
||||||
|
echo "Copied section #{$count} to clipboard, press enter to continue...\n";
|
||||||
|
fgets(STDIN, 2); // wait for NL
|
||||||
|
|
||||||
|
// Read from clipboard (has an extra trailing NL)
|
||||||
|
$resp = shell_exec('xclip -out -selection clipboard');
|
||||||
|
|
||||||
|
// Strip advertising lines and all trailing newlines
|
||||||
|
$resp = str_replace("Translated with www.DeepL.com/Translator (free version)\n", "", $resp);
|
||||||
|
$resp = trim($resp);
|
||||||
|
|
||||||
|
// Add to buffer with 2x NL
|
||||||
|
global $output_buffer;
|
||||||
|
$output_buffer .= $resp . "\n\n";
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
$line = $lines[$nextline++];
|
||||||
|
$linewords = strlen($line); // characters
|
||||||
|
|
||||||
|
if ($linewords + $buffwords > 5000) {
|
||||||
|
// flush buffer before adding
|
||||||
|
flushwords($nextbuffer);
|
||||||
|
$nextbuffer = '';
|
||||||
|
$buffwords = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$nextbuffer .= $line."\n\n";
|
||||||
|
$buffwords += $linewords + 2;
|
||||||
|
|
||||||
|
// echo "entry {$nextline} had {$linewords}, current total {$buffwords}\n";
|
||||||
|
|
||||||
|
} while($nextline < count($lines));
|
||||||
|
|
||||||
|
flushwords($nextbuffer);
|
||||||
|
$nextbuffer = '';
|
||||||
|
$buffwords = 0;
|
||||||
|
|
||||||
|
// All flushed
|
||||||
|
// Write the final output
|
||||||
|
|
||||||
|
file_put_contents($_SERVER['argv'][1].'.en.deepl.srt', $output_buffer);
|
Loading…
Reference in New Issue
Block a user