Showing posts with label QC. Show all posts
Showing posts with label QC. Show all posts

Saturday, July 4, 2020

Ninku Ninku!

My colleague Eternal-Blizzard has just released the last two episodes of Ninku, thus completing a fansub odyssey that began back in 2004. Ninku was started and dropped by no less than six fansub groups, which must be close to a record among orphan series. The English-speaking anime community owes Eternal-Blizzard a debt of gratitude for persevering and finishing the series - from Blu-rays, no less.

Ninku is a fairly standard shounen story set in a fantasy world. "Ninku" is a martial art combining ninja and karate techniques. Ninku masters are the strongest warriors imaginable. However, in the recent past, the evil forces of the Empire have defeated and dispersed the Ninku and now rule tyrannically over the land. Only former Ninku captain Fuusuke and his tiny band of surviving Ninku warriors now oppose the might of the Empire.

It sort of sounds like a fantasy version of Star Wars, with Ninku power substituting for the Force, but it's not taken anywhere near as seriously. Fuusuke is a total goofball, a chibi who looks even younger than his 12 years. His tongue is always hanging out, and he's interested as much in a good meal as the pursuit of justice. His companions include Touji, who likes to fight in just a fundoshi; Aichou, who pilots a rickety biplane that crashes at the start of many episodes; Rihoko, Touji's sister, who is infatuated with Aichou; and Hiroyuki, a penguin whose explosive farts provide propulsion at critical moments. Together, they meander around the countryside, supposedly in order to rescue Fuusuke's mother from the villains, but mostly as an excuse to have single- or short-arc adventures.

The voice cast includes many well-known seiyuu:
  • Matsumoto Rika (Fuusuke) played Satoshi in the Pokemon franchise, Jim Hawking in Outlaw Star, Satoshi in the Pokemon franchise, Jinno in Bakuen Campus Guardress, Kei in Dirty Pair Flash, Sushi Tori in Let's Nupu Nupu, and Okon in Hidimari no Ki. The last two are Orphan releases.
  • Madono Mitsuaki (Aichou) played Prince Touma in the Ranma 1/2 movie Nihao My Concubine, the hero Takeru in the Dragon Knight h-OVA series, and Marron Glace in the Bakuretsu Hunters series.
  • Kosugi Juurouta (Touji) made his debut at the villainous Eyesman in Bavi Stock I, an Orphan release. He played Lantis in Magic Knight Rayearth, Tooyami in Tales of Seduction, and de Morcerf in Gankuutsuou. He also played Oguma in Fire Emblem, Dr. Bayfarm in Joker: Marginal City, Utsubushi in Amatsuki, Kannou in Okane ga Nai!, and Gisuke in Kage, all Orphan release. 
  • Hayashibara Megumi (Rihoko) was arguably the most famous seiyuu of the 1990s. She starred as Faye Valentine in Cowboy Bebop, Ayanami Rei in Evangelion, Rune Balot in the Mardock Scramble movies, Rebecca in One Piece, Lina in the Slayers franchise, female Ranma in Ranma 1/2, and Miyokichi in Showa Genroku Rakugo Shinju. She also played a number of feline roles, including including the title roles in the All Purpose Cultural Cat Girl Nuku Nuku and Hello Kitty franchises, as well as "lead cat" Iruinedo in Oruorane the Cat Player, an Orphan release. She played Navi in Izumo (1991) and Clair in Hashire Melos!, also Orphan releases.
  • Suzuki Katsume (Hiroyuki) played numerous featured roles, most recently in Brand New Animal.
  • Taniguchi Takashi (Kouchin, the final boss) played God in the Yondemasu Yo, Azazel-san series, among other roles.
  • Hiramatsu Akiko (Mekira an antagonist) played Nene Romanova in Bubblegum Crisis and Bubblegum Crash, Tom Kusanagi in Mikan Enikki, Konoe (the security maid) in Hanaukyo Maid Tai, and Miyuki in the You're Under Arrest franchise. She played Ninomiya, the police chief's reckless daughter, in Every Day Is Sunday, an Orphan release.
  • Ishida Akira (Sekirei) has had a storied career. He starred as Sasuke in Samurai Deeper Kyou, Chrno in Chrno Crusade, Howard in Uninhabited Planet Survive, Rion in Galerians: Rion, Komugi in Hen Zemi, and Arima in Princess Lover. He played Gaara in the Naruto franchise, Shinichi in Nana, Athrun Zala in the Gundam Seed Destiny properties, Cho Hokkai in the Saiyuuki franchise, Xellos in the Slayers franchise, Natori in the Natsume Yuujinchou franchise, Tsukasa in the Shokugei no Souma franchise, and Kuchiki in the Genshiken series. He played brother Oomori in Let's Nupu Nupu and Gordon in Fire Emblem, both Orphan releases.
The director, Abe Noriyuki, is best known for directing Yuu Yuu Hakusho and Flame of Recca.

Eternal-Blizzard and his Soldado-Saizen crew picked up from where Dattebaiyo broke off more than a decade ago. They re-released the DB episodes on a new Blu-ray source and continued on to finish the series. As usual, the staff list draws from across the "back catalog kairetsu" - Soldado, Saizen, Orphan, and more. I got roped into doing QC back around episode 30. Shounen's not my favorite genre, but Eternal-Blizzard has helped Orphan a lot, and I was happy to repay the favor.

The project isn't quite done. There will be batch torrent, to fix up whatever issues have turned up over 55 episodes. The batch will also include a drama CD. Still, the main story is over - in fact, it finished at episode 50 - so you can watch Ninku through and get the whole story. Fuusuke and friends will be waiting for you.

Wednesday, February 1, 2017

Collectr's Curmudgeonly Guide to QC


When I took up fansubbing in 2006, most groups had strong QC teams and QC processes. The teams took pride in putting out a good product; revisions after release were looked on with distaste. That began to change in the later years of the decade. Groups began to compete on getting releases out quickly – the so-called "speed-subbing" phenomenon. Nothing helps to shorten time-to-release than trimming lengthy parts of the release process, like QC. gg was among the first to go this routine, dispensing with QC altogether. Then as simultaneous streaming took over, QC seemed less important, because the "official subs" were assumed to be decent (a dangerous assumption, it turned out). Old-line groups tried to retain a strong QC process, but in most groups the QC team atrophied. Recruiting QCs became more and more difficult.

QC is probably the least understood – and least appreciated – part of the fansubbing process. QC is all about finding mistakes, not fixing them.  If you do your work as a QC well, no one will notice; and if you do it poorly, everyone will blame you for the mistakes that got through. QC requires attention to detail, as well as selflessness that is rather rare these days. It's also an excellent way to learn and understand the fansubbing process in all its complexity.

What is QC?

QC is the process of reviewing a fansub for mistakes – in translation, timing, editing, typesetting, or encoding – and for possible improvements. There are two phases: script QC (SQC) and release QC (RQC). The former is focused on the script while it is still easily changed; the latter on the final, hopefully releasable episode. In each case, the QC's job is to write a report detailing the errors and suggested changes; it is not to change the script.

SQC is usually done in Aegisub, the ubiquitous tool for subtitling anime. Aegisub offers many advantages, including the ability to replay lines easily and to step frame-by-frame when necessary. It also has a built-in spelling checker and other helpful tools.

RQC can be done in Aegisub, but it is better done by watching an encoded and muxed file. This allows for checks that only apply to the released file: missing or incorrectly typed fonts; missing or incorrect chapters; random muxing mistakes that affect the video or audio.

Script QC (SQC)

Before starting, you will need the script, the encoded file, and the fonts used in the episode. Any unique fonts must be installed before invoking Aegisub. They can be deleted later, if you don't want your font folder to become unduly cluttered. It also helps to have an editing guide, which details the conventions to be used in the show.  (See my blog entry on editing for information about compiling an editing guide.) If the translator or editor didn't supply one, you should compile one for yourself. This is particularly important for long series, where inter-episode consistency is easily lost, or for fansubs based on CrunchyRoll scripts; CR is notorious for changing character names from script to script.

With all that in hand, it's time to fire up Aegisub and start looking for errors.

Translation Errors

Unless you know Japanese yourself, you are unlikely to find true translation errors, but even a non-speaker can spot certain issues:

  • Discrepancies in length. Sometimes a long Japanese line is translated as a very short English sentence. (The reverse happens as well, although it's less common.) Some compression is to be expected, particularly on conventional polite phrases, but significant length discrepancies may indicate that a phrase or clause has been dropped.
  • Inconsistent romanization of names. Japanese names with long vowels (Kōsaku) can be romanized either by adding extra letters (Kousaku) or by treating long vowels as normal vowels (Kosaku). Whichever is chosen, it needs to be applied consistently to all Japanese names.
  • Inconsistent honorifics. If the translation includes honorifics, then it needs to include them wherever they are present, and to exclude them when absent. It is easy to confuse honorifics with Japanese particles, e.g., to hear "-no" as "-dono."
  • Inconsistent character names. This is a particular hazard in long series.
Timing Errors

Timers can have different conventions for handling lead-in, lead-out, lines that cross scene boundaries, and so on (see this blog entry). You need to understand the timer's preferred style before flagging timing errors.

In checking timing, it is really helpful to have a keyframes file. Modern compression algorithms, like H.264, do not put a keyframe at every scene change and will insert a keyframe in the middle of a long, static scene. A keyframes file provides a better (but not foolproof) indicator of where scene boundaries really are. There are batch scripts that will generate a keyframes file, if the encoder does not provide one.

While it is possible to check timing as you go, I usually make a separate pass, looking only at the audio display in Aegisub, to check timing. Issues to look for include:

  • Missing lead-in or lead-out. Unless a line abuts against a scene boundary or another line, it should have both lead-in and lead-out.
  • Scene shortfalls. With certain exceptions, lines should not start or stop a few frames from a scene boundary. The timer should have a standard about how many frames after the start or before the end of a scene must be present. If the line violates these standards, it should be snapped to the appropriate scene boundary.
  • Scene bleeds. Sometimes, a line crosses a scene boundary by just a slight amount. The decision of whether to terminate the line at the scene boundary, or to continue into the next scene, depends on the timer's standards. Some timers cross the boundary if there's a full word in the next scene; other if there's a full syllable in the next scene.
  • Gap between adjacent lines. Two adjacent but separated lines must have a minimum time between them, as established by the timer. Otherwise, they should be joined by extending the lead-out of the first line and possibly the lead-in of the second.
  • Lead-out/lead-in balance between joined lines. When adjacent lines are joined, the balance between lead-out and lead-in can be tricky, particularly if the time spacing is short. If there's any spacing at all, there should be both lead-out and lead-in, even if below the normal minimums.
  • Song timing errors. After the first episode in a series, the song translations are simply cut and pasted from episode to episode. A line at the start or end may be missed. Changes in keyframes may result in scene bleeds. The songs need to be checked on every episode, a tedious process.
Timing checks are complicated by the issue of false keyframes. Sometimes, a keyframe gets generated when there is, in fact, no real scene change. Thus, every possible timing violation involving a keyframe has to be checked to see if the scene boundary is really there.

Editing Errors

This is the largest category of checks, and includes spelling, grammar, punctuation, and style. Using tools can help to automate editing checks, but there is still a lot of staring and thinking that has to be done.

Automated Tools

Aegisub has a built-in spelling checker, but it gets tripped up by Japanese names and phrases, and of course by the romanji in songs, if included.

A different approach is to use the spelling and grammar checker in Microsoft Word.

  • Export the script as a plain text file.
  • Edit the text file to remove any songs and signs.
  • Join any sentences that are split across multiple lines into a single line.
  • Replace all line breaks (\N) with space, and then replace any double spaces with single space.
  • Save the edited file.
  • Load the edited text file into Word and press F7. 
Word's checker is far from perfect. In particular, it gets grumpy about incomplete expressions and messes up on some common clichés (for example, it doesn't like "It's all my fault.") All alleged spelling mistakes have to be looked at; when in doubt, check the word on Google. Nonetheless, Word will find subtle mistakes that often get missed by the eye, like repeated articles ("the the") and "its/it's" confusion.

Problems can arise with expressions that have multiple acceptable spellings, like "goodbye." Any of the accepted variants is fine, but they need to be used consistently. The same applies to "Um" vs "Umm," "Hm" vs "Hmm," and "Geez" vs "Jeez." Hyphenation can be tricky too. Some compound English words are now simply joined (like "heartbreak"); others are not. Again, when you have a concern, Google is your friend.

Finally, a non-US spell checker will flag spellings that vary between US and UK usage, like "honor/honour." Most fansub groups use US spelling and grammar.
  
Grammar and Punctuation

English grammar and punctuation are very complicated, and you need to know the rules of the road. My blog on editing describes some of the trickier rules, but I stumble over new ones all the time. For example, plurals of mnemonics are made by simply adding an "s", e.g. "The ABCs of Love" rather than "The ABC's of Love." The most common problems seem to be:

  • Singular/plural agreement. Impersonal sentences are particularly troublesome.
  • Commas after "Then or So" or before "too" or in interjections beginning with "Oh." Both including the comma and omitting it are acceptable; including it is more formal, omitting it more conversational. Whatever choices are made, they need to be used consistently.
  • Commas in compound sentences (and not in compound clauses). Compound sentences (two complete sentences joined by "and" or "or") must have a comma between them. Compound phrases (a sentence with one subject and two verbs, joined by "and" or "or") must not have a comma between the phrases. This rule is frequently violated in streaming scripts.
  • Subjunctive conjugation. The English subjunctive is a swamp and can result in some quite peculiar sounding phrases, e.g. "If he be…" I generally prefer to ignore subjunctive conjugations, but if one is used, it needs to be right.
  • Punctuation of quotations. US grammar and English grammar differ here. In the US, a concluding comma or period is placed inside the closing quotation mark, while an exclamation point or question mark is placed outside. In the UK, all punctuation marks are placed outside the closing quotation mark.
  • Overuse of ellipses. Don't get me started on this one.
Style 

Style issues are really nebulous, and it's all too easy for a QC to turn into a "back-seat editor" (which will really tick off the editor, by the way).  Still, there are style issues that the QC should look at and potentially flag:

  • Inconsistent use of contractions. Most anime dialog is conversational speech. In English, conversational speech uses contractions. Formal speech may be appropriate in some cases (for example, an elderly servant, a snooty ojou-sama), but the formal versus informal distinction needs to be consistent. Teenagers rarely speak formally, so their speech should use contractions.
  • "Will" versus "Shall." This is a particular instance of formal versus informal speech. The word "shall" rarely appears in US English conversation; its use is reserved to legal documents ("Congress shall make no law…"). The most common violation is "Shall we go?" In conversational speech, a person would say "Let's go, okay?" or "Should we go now?"
  • Impersonals. Japanese translations are often full of impersonal phrases: "It seems…" or "There are…" Overuse makes the dialog stilted.
  • Repeated words. If the same word appears in successive lines, it can be very jarring, unless the repetition is intended as reinforcement or is a quotation. "Just" gets thrown in way too often.
The list of potential style problems is endless; see my blog on editing for a more comprehensive discussion.

Typesetting Errors

Typesetting must be inspected visually. To do that correctly, all fonts used in the episode must be installed prior to running Aegisub. Common problems include:

  • Styling errors. If the script uses different styles for dialog versus thought, or present time versus flashbacks, each line must be checked for use of the correct style. Application of a "thought" style can be tricky if the character involved is not on-screen or is turned away from the viewer.
  • 3-liners. If a line is too long, it may occupy three lines instead of two.  Alternately, a 3-liner may be created if a two-line sub overlaps with another line. (Make sure you've installed the dialog font before flagging these kinds of errors.)
  • Italics errors in fonts without true italics. If a font lacks true italics, the subtitle renderer creates pseudo-italics by leaning the font to the right. This causes crowding between an italicized word and a subsequent non-italicized word. The typesetter must provide padding (e.g. {\i1}word{\i0\fscx130} {\fscx}word).
  • Crowding in fonts with true italics. Even with true italics, an italicized word that abuts an exclamation mark or question mark may look crowded. The typesetting must provide padding (e.g. {\i1}word{\i0\fscx30} {\fscx}!)
  • Sign/dialog overlap. Signs may occur in any part of the screen and can overlap the dialog. If the dialog is not assigned to a higher layer than the sign, the dialog will be "under" the sign. The dialog may need to be moved to the top of the screen in order not to conflict with the sign.
  • Incorrect start or end time. Every sign needs to be inspected for correct start and end time.
  • Missing signs. Sometimes, signs that seem germane may not be typeset. This may be a deliberate decision on the part of the translator or typesetter, or it may be inadvertent.
Encoding Errors

As part of SQC, the QC must actually watch the episode from end to end in order to check for mistakes in the video and audio. It's all too easy to skip from line to line, but in that case, errors between lines will be missed.

The SQC Report

The QC provides a written report of suggested changes back to the team. Comments can be sorted by translation, timing, editing, typesetting; if not sorted, then the comment needs to indicate who in the team needs to look at the issue:

TL:          line (with time references; simply cut and paste from the script)
               issue

For editing comments, where the QC has a suggestion to make, the comment can be:

Edit:       line
    suggested new line
    issue 
 
Now, if there are a lot of changes, generating a comprehensive report may be really tedious. One shortcut I use is to "fix" a script as I go, save it under a new name, and then generate a "differences" report using Linux diff or Windows WinMerge. This differences report includes the old and new lines, with time references. It's then very easy to annotate each change with a rationale or a description of the underlying issue.

Release QC (RQC)

RQC differences from SQC in two significant ways. First, it is done on a finished file, rather than by using Aegisub. Second, it flags only grievous errors, such as missing fonts, bad chapters, and so on. I've already described my release checking process in this blog entry, so I won't repeat the detailed checklist. For comprehensive checking, you will need the final script as well as the finished episode. Here are a few of the more critical steps in RQC:

  • Load the final script into Aegisub and use the "Font Collector" feature to compile a list of required fonts. Check for errors (missing fonts, missing glyphs in fonts). Note that lack of italics or a bold font variant is not a fatal problem; the subtitle renderer compensates.
  • Use Linux diff or Windows WinMerge to compare the initial and final scripts. Check that all changes were done correctly, e.g. with proper spelling.
  • Use "mkvmerge -i" to get a list of fonts attached to the file. Make sure that every font has the correct MIME type (x-truetype-font). Check that all fonts are included. Check that the chapter file is included (if the episode is chaptered).
  • Spot check the episode. Check that the correct script was muxed in. Check that tracks are properly labeled. If chapters are included, check that the chapter timing points are correct.
  • Play the episode from end to end. Pay particular attention to songs and signs, and look for any encoding problems. If there are multiple scripts (for example, honorifics and no honorifics), you will have to watch the episode twice (gag).
While it's possible to provide editing suggestions during RQC, you should not expect them to be followed. RQC is about real mistakes, not differences of style or opinion.

Life after QC

When I was a QC, I couldn't wait to "graduate" to a more creative position, editing in particular. Over time, I've added a limited ability to typeset and time to my skill set. However, I still do QC, particularly for other teams. I find that QC is a great way to avoid getting "boxed in" by my own habits.  I get to see how other editors and typesetters work, and I always learn from them. It also builds up goodwill, which I can draw on if I run into thorny issues in Orphan.

So whether you want to do QC forever or view it as an entry point into fansubbing, give it a try. The mistakes are all there, waiting to be found.

Saturday, January 2, 2016

Checking a Release

Orphan's a small group, and the task of assembling a release and readying it for distribution usually falls to me. Over time, my release flow has become more and more elaborate, but every step plays a part in assuring a decent (though hardly flawless) result.
  1. Create a backup copy of the script for later comparisons.
  2. Apply any remaining quality control (QC) reports.
  3. Create chapters. (I use the chapter editor in mkvmerge.)
  4. In Aegisub, check the signs, the OP, and the ED. These are areas where subtle mistakes may have occurred and been overlooked during QC. In particular, check that signs are timed correctly, and (in a multi-episode series) that the first and last lines of the OP and ED haven't been clipped off by a cut-and-paste error.
  5. In Aegisub, collect the fonts for muxing. Pay attention to errors about missing glyphs. While CCCP on Windows makes reasonable choices about substituting other fonts, VLC or non-Windows systems may not. You may have to substitute "invisible characters" for \h.
  6. Mux the release with mkvmerge, and save the mkvmerge settings in case you need to revisit the result. I tend to label tracks as well as language-code them (except the video), and I fill in the "global" segment field with the file name, because VLC displays it.
  7. Check the muxed file with "mkvmerge -i file.mkv". This will show whether all parts are present, including the chapter file, and whether all fonts have the right MIME type (x-truetype-font).
  8. Play the release and verify the track names. I use the Properties window of MPC-HC, which invokes Mediainfo.
  9. Verify the chapter navigation points.
  10. Watch the release from end to end. This is the only way to catch any missed lines, encoding glitches, and other faults that can be overlooked in Aegisub. Apply corrections as needed.
  11. Using Aegisub, export the revised subs, without tags, as a plain text file. Use a text editor to join lines that were split and remove \N, multiple spaces, signs, songs, etc.
  12. Open the exported, fixed subs in Word and run the grammar checker. This also acts as a final spelling check. Apply corrections to the script in Aegisub as needed. The Word grammar checker isn't perfect, but it will help find homonym errors (your/you're, there/their).
  13. Check the differences between the final script and the initial script with a graphical difference checker, like WinDiff. This is to make sure that all corrections were applied properly and not fat-fingered.
  14. Remux the release with the final script, using the saved settings.
  15. Spot check by verifying that key differences highlighted by the difference checker are in the final file.
  16. Calculate a CRC32 for the final file. (I use RapidSFV.)
  17. Rename the multiplexed file to [group] series - nn [CRC32].mkv (or your favorite convention).
  18. Create a patch file that will patch the raw to the final release. This allows team members with the raw to create the final release for seeding. (I use a tool called PatchCreator.)
  19. Create a torrent for the released file. (I use qBitTorrent.)
  20. Create a SFV (CRC32 checking file) for the released file. (I use RapidCRC again.)
  21. Upload the torrent to your favorite tracker.
  22. Announce the torrent on your favorite sites.
  23. Profit!
I know it seems like a lot of work - it is a lot of work, in fact - but I've added all these steps over time to address problems that got through simpler flows.
 
[Updated 07-Feb-2024]