Giter VIP home page Giter VIP logo

subtitle.js's Introduction

subtitle

Build Status Code Climate Coverage Status downloads npm

Stream-based library for parsing and manipulating subtitle files.

"Thanks for this rad package!" John-David Dalton, creator of Lodash

✅ Stream API
✅ Written in TypeScript
✅ SRT support
✅ Partial support for WebVTT (full support comming soon)
✅ 100% code coverage
✅ Actively maintained since 2015

Installation

npm

npm install subtitle

yarn

yarn add subtitle

Usage

This library provides some stream-based functions to work with subtitles. The following example parses a SRT file, resyncs it and outputs a VTT file:

import fs from 'fs'
import { parse, resync, stringify } from 'subtitle'

fs.createReadStream('./my-subtitles.srt')
  .pipe(parse())
  .pipe(resync(-100))
  .pipe(stringify({ format: 'WebVTT' }))
  .pipe(fs.createWriteStream('./my-subtitles.vtt'))

It also provides functions like map and filter:

import { parse, map, filter, stringify } from 'subtitle'

inputStream
  .pipe(parse())
  .pipe(
    filter(
      // strips all cues that contains "𝅘𝅥𝅮"
      node => !(node.type === 'cue' && node.data.text.includes('𝅘𝅥𝅮'))
    )
  )
  .pipe(
    map(node => {
      if (node.type === 'cue') {
        // convert all cues to uppercase
        node.data.text = node.data.text.toUpperCase()
      }

      return node
    })
  )
  .pipe(stringify({ format: 'WebVTT' }))
  .pipe(outputStream)

Besides the stream functions, this module also provides synchronous functions like parseSync and stringifySync. However, you should avoid them and use the stream-based functions for better performance:

import { parseSync, stringifySync } from 'subtitle'

const nodes = parseSync(srtContent)

// do something with your subtitles
// ...

const output = stringify(nodes, { format: 'WebVTT' })

API

The module exports the following functions:

parse

  • parse(): DuplexStream

It returns a Duplex stream for parsing subtitle contents (SRT or WebVTT).

import { parse } from 'subtitle'

inputStream
  .pipe(parse())
  .on('data', node => {
    console.log('parsed node:', node)
  })
  .on('error', console.error)
  .on('finish', () => console.log('parser has finished'))

Check out the Examples section for more use cases.

parseSync

  • parseSync(input: string): Node[]

NOTE: For better perfomance, consider using the stream-based parse function

It receives a string containing a SRT or VTT content and returns an array of nodes:

import { parseSync } from 'subtitle'
import fs from 'fs'

const input = fs.readFileSync('awesome-movie.srt', 'utf8')

parseSync(input)

// returns an array like this:
[
  {
    type: 'cue',
    data: {
      start: 20000, // milliseconds
      end: 24400,
      text: 'Bla Bla Bla Bla'
    }
  },
  {
    type: 'cue',
    data: {
      start: 24600,
      end: 27800,
      text: 'Bla Bla Bla Bla',
      settings: 'align:middle line:90%'
    }
  },
  // ...
]

stringify

  • stringify({ format: 'SRT' | 'vtt' }): DuplexStream

It returns a Duplex that receives parsed nodes and transmits the node formatted in SRT or WebVTT:

import { parse, stringify } from 'subtitle'

inputStream.pipe(parse()).pipe(stringify({ format: 'WebVTT' }))

Check out the Examples section for more use cases.

stringifySync

  • stringify(nodes: Node[], options: { format: 'SRT' | 'vtt }): string

NOTE: For better perfomance, consider using the stream-based stringify function

It receives an array of captions and returns a string in SRT (default), but it also supports VTT format through the options.

import { stringifySync } from 'subtitle'

stringifySync(nodes, { format: 'SRT' })
// returns a string in SRT format

stringifySync(nodes, { format: 'WebVTT' })
// returns a string in VTT format

map

  • map(callback: function): DuplexStream

A useful Duplex for manipulating parsed nodes. It works similar to the Array.map function, but for streams:

import { parse, map, stringify } from 'subtitle'

inputStream
  .pipe(parse())
  .pipe(
    map((node, index) => {
      if (node.type === 'cue') {
        node.data.text = node.data.text.toUpperCase()
      }

      return node
    })
  )
  .pipe(stringify({ format: 'SRT' }))
  .pipe(outputStream)

filter

  • filter(callback: function): DuplexStream

A useful Duplex for filtering parsed nodes. It works similar to the Array.filter function, but for streams:

import { parse, filter, stringify } from 'subtitle'

inputStream
  .pipe(parse())
  .pipe(
    filter((node, index) => {
      return !(node.type === 'cue' && node.data.text.includes('𝅘𝅥𝅮'))
    })
  )
  .pipe(stringify({ format: 'SRT' }))
  .pipe(outputStream)

resync

  • resync(time: number): DuplexStream

Resync all cues from the stream:

import { parse, resync, stringify } from 'subtitle'

// Advance subtitles by 1s
readableStream
  .pipe(parse())
  .pipe(resync(1000))
  .pipe(outputStream)

// Delay 250ms
stream.pipe(resync(captions, -250))

parseTimestamp

  • parseTimestamp(timestamp: string): number

Receives a timestamp (SRT or VTT) and returns its value in milliseconds:

import { parseTimestamp } from 'subtitle'

parseTimestamp('00:00:24,400')
// => 24400

parseTimestamp('00:24.400')
// => 24400

parseTimestamps

  • parseTimestamps(timestamps: string): Timestamp

It receives a timestamps string, like 00:01:00,500 --> 00:01:10,800. It also supports VTT formats like 12:34:56,789 --> 98:76:54,321 align:middle line:90%.

import { parseTimestamps } from 'subtitle'

parseTimestamps('00:01:00,500 --> 00:01:10,800')
// => { start: 60500, end: 70800 }

parseTimestamps('12:34:56,789 --> 98:76:54,321 align:middle line:90%')
// => { start: 45296789, end: 357414321, settings: 'align:middle line:90%' }

formatTimestamp

  • formatTimestamp(timestamp: number, options?: { format: 'SRT' | 'vtt' }): string

It receives a timestamp in milliseconds and returns it formatted as SRT or VTT:

import { formatTimestamp } from 'subtitle'

formatTimestamp(142542)
// => '00:02:22,542'

formatTimestamp(142542, { format: 'WebVTT' })
// => '00:02:22.542'

Examples

Nodes

This is what a list of nodes looks like:

[
  {
    type: 'header',
    data: 'WEBVTT - Header content'
  },
  {
    type: 'cue',
    data: {
      start: 150066, // timestamp in milliseconds,
      end: 158952,
      text: 'With great power comes great responsibility'
    }
  },
  ...
]

For now, it only supports two types of node: header and cue. Soon, it will support more types like comment.

Convert SRT file to WebVTT

import fs from 'fs'
import { parse, stringify } from 'subtitle'

fs.createReadStream('./source.srt')
  .pipe(parse())
  .pipe(stringify({ format: 'WebVTT' }))
  .pipe(fs.createWriteStream('./dest.vtt'))

Extract subtitles from a video

The following example uses the rip-subtitles for extracting subtitles from a mkv video and save it as WebVTT.

import extract from 'rip-subtitles'
import { parse, stringify } from 'subtitle'

extract('video.mkv')
  .pipe(parse())
  .pipe(stringify({ format: 'WebVTT' }))
  .pipe(fs.createWriteStream('./video.vtt'))

Create subtitles

import { stringifySync } from 'subtitle'

const list = []

list.push({
  type: 'cue',
  data: {
    start: 1200,
    end: 1300,
    text: 'Something'
  }
})

stringifySync(list)

License

MIT

subtitle.js's People

Contributors

dependabot[bot] avatar doppioandante avatar fingerpich avatar gsantiago avatar jdalton avatar marcusstenbeck avatar marnusw avatar matheuscl avatar nbarnett avatar overlookmotel avatar ramiel avatar robertboes avatar tzpr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

subtitle.js's Issues

parse vtt or srt fails with 1-digit hour

First of all, thank you for this library it really saved me lot of time. However, I had an issue with the parse module and I believe it's a bug.
So I tried to parse a vtt content using the parse function and it failed because of this line even though it's a valid WebVTT format :
1:04:09.717 --> 1:04:12.886

I did an investigation and I found out that the regular expression used to parse the time expects 2 digits for Hours. I think this could be fixed in the library by adjusting the regular expression to accept Hours with 1 or 2 digits.

I would be happy to help and create a pull request for this bug.

Typescript support

Hi,

Is there any plan to support Typescript by providing declaration file? I have check "@types/subtitle" is not exist yet in NPM yet

support lrc file

hello
pease add support lrc file.
thank you
(sry for my bad english)

Support for setting an initial index on `stringify()` and `stringifySynch()`

The implementation of both methods include an instance of Formatted , which in turn is instantiated with a default index=1.
This prevents appending to existing file. In order words, stringify() always generates an output starting from 1.
In my use-case, I translate one SRT “A” onto another SRT “B”. Suppose A has 300 entries.
The automatic translation takes a long-time, so I do it in batches, lets say 8 nodes at a time; and sometimes the process fails. Suppose it fails at the 150th node - when the program restarts, I can detect the last index in the output file and continue from there. However stringify() will generate nodes starting from 1, so the output will have nodes 1..,148,149,150,1,2,…

Adding an overload that accepts a starting index would possibly be a solution.

My work-around at the moment: re-write the entire output file after each batch is processed. It’s not a huge performance hit but makes the process more convoluted.

New line with whitespace at the end of the text is valid input

Author of the subtitles might use new line with white the space at the end of the line to push the subtitle line upwards in the view port. Despite of awkwardness of the solution this should be valid input and parser should handle it and include the new line in the text of specific block of subtitles.

Add support for identifers

Currently, this module has not support for identifiers. It would be interesting to add support to identifiers like the examples below:

webvtt

WEBVTT

1 - Some ID here
00:00:22.230 --> 00:00:24.606
This is the first subtitle.

The caption above would be parsed to this:

{
    id: '1 - Some ID here',
    start: 20000,
    end: 24400,
    text: 'This is the first subtitle'
  },

The stringify should support this feature too.

Remove Underscore from dependencies

Subtitle.js only uses a few methods from underscore. It would be nice to remove underscore from dependencies and create a new file (utils.js, maybe) to have the functions that subtitle.js needs.

Browser Build 1.0.1 returns an empty object

Hello, when I try to load the browser versions of the library, all I get is an empty Subtitle object. Looking at the built code in 5e79d02 it looks like between 1.0.0 and 1.0.1 the body of the module was lost. Could you update the built browser files? Thanks!

Error in parsing some srt files

It works for lots of srt files but it shows this error /subtitle/dist/subtitle.bundle.js:256:37 Cannot read property '1' of null with some subtitles like below

1
00:01:46,208 --> 00:01:50,292
Fo Shan's citizens were well off and practiced kung fu as a hobby.

2
00:01:50,417 --> 00:01:55,542
Martial clubs became popular,
turning Fo Shan into a province renowned for martial arts.

3
00:01:57,208 --> 00:02:00,625
Martial Arts Street in Fo Shan, 1935

4
00:02:20,500 --> 00:02:22,250
Another competitor

5
00:02:22,500 --> 00:02:23,417
Okay, let's start practicing

6
00:02:23,667 --> 00:02:25,292
Come on, ready...

7
00:02:26,000 --> 00:02:27,167
One...

8
00:02:27,333 --> 00:02:28,375
Two...

9
00:02:28,542 --> 00:02:30,958
One... two...

10
00:03:04,083 --> 00:03:06,583
Sir, a Master Liu is looking for you

11
00:03:18,417 --> 00:03:19,500
May l know who you are?

12
00:03:19,792 --> 00:03:21,375
I'm the patriarch of the Liu Fist Sect

13
00:03:21,833 --> 00:03:23,625
l just started a martial club in Fo Shan

14
00:03:23,792 --> 00:03:24,917
Congratulations

15
00:03:25,375 --> 00:03:28,958
l hear that Master Ip is a Wing Chun expert
16
00:03:29,042 --> 00:03:31,750
l'd love to practice with you today

16
00:03:32,667 --> 00:03:34,042
Can we do it some other day?

17
00:03:34,208 --> 00:03:35,542
It's not convenient right now

18
00:03:35,792 --> 00:03:37,375
Since I'm already here,

19
00:03:37,458 --> 00:03:40,000
let's just play around for a bit

20
00:03:40,833 --> 00:03:44,417
It's all private. No one else shall know who wins

21
00:03:44,708 --> 00:03:47,417
It's not a matter of winning. I'm having dinner

22
00:03:47,667 --> 00:03:50,375
In that case... I'll wait for you

23
00:04:00,000 --> 00:04:01,375
Master Liu

24
00:04:02,083 --> 00:04:03,250
Have you eaten yet?

25
00:04:04,375 --> 00:04:06,000
Please join me

26
00:04:42,500 --> 00:04:43,750
You want one?

27
00:04:44,708 --> 00:04:46,417
No, thanks

28
00:04:54,000 --> 00:04:55,542
ls the food all right tonight?

29
00:04:56,708 --> 00:04:58,292
Very good indeed

30
00:04:58,708 --> 00:05:00,000
That's good

31
00:05:05,250 --> 00:05:06,250
Very quick

32
00:05:15,083 --> 00:05:18,583
Leave it, Uncle
34
00:05:38,917 --> 00:05:39,875
Master Liu

33
00:05:59,458 --> 00:06:00,375
Please!

34
00:06:01,333 --> 00:06:02,167
Please!

35
00:06:30,208 --> 00:06:31,000
Are you okay?

36
00:06:31,083 --> 00:06:32,333
I'm fine...

37
00:06:33,000 --> 00:06:34,000
Let's start again!

38
00:06:35,000 --> 00:06:36,208
Okay, here l come

39
00:06:40,417 --> 00:06:41,375
Touch
42
00:06:41,542 --> 00:06:43,292
Touch
43
00:06:43,792 --> 00:06:44,958
All touch
44
00:07:00,958 --> 00:07:02,500
Thanks for being lenient, Master Liu

40
00:07:17,333 --> 00:07:18,958
Thanks for teaching me. I've learnt a lot

41
00:07:19,083 --> 00:07:20,500
The pleasure was all mine

42
00:07:21,958 --> 00:07:23,625
Regarding this private duel, Master lp...

43
00:07:23,708 --> 00:07:26,333
l won't tell anyone. Don't worry

44
00:07:26,750 --> 00:07:28,625
Thanks so much. I'm totally grateful

45
00:07:28,750 --> 00:07:29,750
Goodbye

46
00:07:31,375 --> 00:07:32,375
Farewell

47
00:07:33,458 --> 00:07:34,750
So long

48
00:07:39,375 --> 00:07:41,625

49
00:07:41,792 --> 00:07:43,125
lp pushed Master Liu's whole body away

50
00:07:43,250 --> 00:07:45,167
Isn't "Move 1000 Catties with 4 Taels" Tai Chi?

51
00:07:45,375 --> 00:07:47,250
l thought Master Ip practiced
57
00:07:47,875 --> 00:07:49,458
Anyway, he pushed him away with one hand

52
00:07:49,708 --> 00:07:51,042
Liu refused to admit de
59
00:07:51,250 --> 00:07:53,792
lp kept chasing after him fiercely!

53
00:07:54,292 --> 00:07:57,167
But Liu remained indignant after being hit

54
00:07:57,458 --> 00:07:59,500
He jumped at Ip like a hungry dog

55
00:08:03,500 --> 00:08:05,792
These tea leaves are pretty good and cheap

56
00:08:06,000 --> 00:08:06,875
Thank you

57
00:08:07,125 --> 00:08:08,500
Got to go Farewell

58
00:08:08,708 --> 00:08:10,750
Goodbye Goodbye, see you next time

59
00:08:13,792 --> 00:08:16,500
Who put these here, Uncle Ping?

60
00:08:16,708 --> 00:08:18,083
Your brother

61
00:08:18,625 --> 00:08:21,042
l thought Liu was good but he's so bad at defense
69
00:08:21,292 --> 00:08:23,417
and was beaten up like a pighead

62
00:08:24,458 --> 00:08:27,958
He co-owns his dad's restaurant. He's always idle

63
00:08:28,250 --> 00:08:30,042
Ask that kid to serve the customers
72
00:08:30,292 --> 00:08:31,000
Good morning

64
00:08:31,167 --> 00:08:31,917
Brother lp!

65
00:08:32,208 --> 00:08:33,000
Morning, Master lp

66
00:08:33,083 --> 00:08:33,833
ls Quan here yet?

67
00:08:34,000 --> 00:08:35,417
He's waiting for you upstairs

68
00:08:38,500 --> 00:08:40,125
Been here long, Quan?

69
00:08:40,667 --> 00:08:42,042
You're always late

70
00:08:42,917 --> 00:08:44,042
I'm busy

71
00:08:45,333 --> 00:08:46,417
Busy with what?

72
00:08:47,458 --> 00:08:50,500
Drinking tea, eating, practicing

73
00:08:51,625 --> 00:08:52,750
What else?

74
00:08:55,875 --> 00:08:57,292
This tea smells nice

75
00:08:58,583 --> 00:09:00,292
I'm talking about you

76
00:09:01,000 --> 00:09:02,333
Have you ordered yet?

77
00:09:02,833 --> 00:09:04,375
l got something to discuss with you

78
00:09:04,667 --> 00:09:05,917
Let's eat first and then we'll talk

79
00:09:06,167 --> 00:09:08,208
This just came out of the oven! Try it...

80
00:09:09,917 --> 00:09:11,792
Heard that you had a duel with Master Liu

81
00:09:12,042 --> 00:09:14,542
and had beaten him quickly. ls that true?

82
00:09:15,000 --> 00:09:16,583
Who told you that, Lin?

83
00:09:17,208 --> 00:09:18,542
My brother

84
00:09:18,792 --> 00:09:22,125
Should've told me earlier. I'm his disciple now!

85
00:09:23,000 --> 00:09:24,708
But you've been a disciple of every master

86
00:09:25,250 --> 00:09:28,125
Was the duel private, Brother lp?

87
00:09:29,125 --> 00:09:31,500
We have things to discuss. Leave us for now

88
00:09:31,875 --> 00:09:33,875
Then l won't disturb your private conversation

89
00:09:50,042 --> 00:09:51,125
Good!

90
00:09:51,375 --> 00:09:52,750
Morning, Master! Morning

91
00:09:53,917 --> 00:09:54,500
Morning

92
00:09:54,583 --> 00:09:55,250
Master

93
00:09:55,667 --> 00:09:57,458
Heard that you were beaten by Ip Man

94
00:09:57,792 --> 00:09:58,875
Everyone in Fo Shan knows about it now

95
00:09:58,958 --> 00:10:00,292
Nonsense!

96
00:10:00,375 --> 00:10:02,042
Yuan at the restaurant

97
00:10:05,000 --> 00:10:06,667
Everything is costly in Fo Shan these days

98
00:10:06,958 --> 00:10:07,833
So what?

99
00:10:10,167 --> 00:10:12,417
That means the economy is good in Fo Shan

100
00:10:13,458 --> 00:10:14,750
Everybody can afford to spend money
110
00:10:15,833 --> 00:10:16,625
ls that so?

101
00:10:17,042 --> 00:10:20,167
Clothing is the most important in our daily lives

102
00:10:22,458 --> 00:10:25,708
There will be lots of demand forfuture clothing

103
00:10:26,583 --> 00:10:29,833
I'll open a cotton mill to provide cotton for them

104
00:10:33,708 --> 00:10:35,000
l want you to be my partner

105
00:10:36,375 --> 00:10:37,667
l don't know anything about business

106
00:10:38,333 --> 00:10:39,417
But l do

107
00:10:39,542 --> 00:10:40,958
I'm not in need of money

108
00:10:42,833 --> 00:10:44,583
Who's Yuan? Show yourself!

109
00:10:44,833 --> 00:10:46,000
l am

110
00:10:50,667 --> 00:10:52,875
You rascal. You ruined my reputation

111
00:10:53,167 --> 00:10:54,750
l must teach you a lesson!

112
00:10:55,000 --> 00:10:56,292
Master...

113
00:10:56,583 --> 00:10:58,667
He's my brother. Let's talk

114
00:10:58,917 --> 00:11:00,333
Calm down. Okay, Master?

115
00:11:00,875 --> 00:11:03,667
Your brother? He ruined my reputation

116
00:11:04,583 --> 00:11:06,042
He said l was beaten by Ip Man

117
00:11:06,292 --> 00:11:08,167
What's gonna happen to my martial club?

118
00:11:08,292 --> 00:11:10,042
Who will want to be my disciples?

119
00:11:10,417 --> 00:11:11,292
Apologize!

120
00:11:11,667 --> 00:11:13,417
l didn't do anything wrong. l told the truth!

121
00:11:13,667 --> 00:11:16,375
You're bullshitting again! You... Master...

122
00:11:17,292 --> 00:11:19,458
Master Ip is upstairs. Seek him out if you have guts!

123
00:11:20,417 --> 00:11:22,125
What? Go!

124
00:11:23,208 --> 00:11:25,333
Take it easy, Master...

125
00:11:27,500 --> 00:11:28,708
Master...

126
00:11:28,958 --> 00:11:30,625
Don't be angry, Master

127
00:11:33,125 --> 00:11:34,708
I've been wronged, Master lp

128
00:11:35,042 --> 00:11:36,167
Master...

129
00:11:36,292 --> 00:11:37,000
Please tell everybody

130
00:11:37,083 --> 00:11:39,417
you've defeated Master Liu in a duel

131
00:11:47,292 --> 00:11:48,708
Master lp...

132
00:11:48,875 --> 00:11:50,542
You got to clear my name

133
00:11:53,583 --> 00:11:55,333
You liar, why're you bothering Brother lp?

134
00:11:56,708 --> 00:11:57,792
I'm no liar

135
00:11:58,208 --> 00:12:00,167
l sawthe duel when l was picking up my kite

136
00:12:01,208 --> 00:12:04,417
Your kite was cut and fell into Brother Ip's house

137
00:12:04,667 --> 00:12:08,667
You saw the whole duel between the two masters

138
00:12:08,792 --> 00:12:10,583
lsn't that too much of a coincidence?

139
00:12:10,708 --> 00:12:11,875
That's exactly what happened

140
00:12:12,125 --> 00:12:14,167
Even if it's true, you shouldn't have told everyone

141
00:12:14,250 --> 00:12:15,500
You're not supposed to admit to certain things

142
00:12:15,625 --> 00:12:16,708
What's wrong with admitting to the truth?

143
00:12:16,833 --> 00:12:18,042
That might cause embarrassment for others

144
00:12:18,167 --> 00:12:20,042
What embarrassment? I don't know so much

145
00:12:23,125 --> 00:12:24,583
This is embarrassment!

146
00:12:27,875 --> 00:12:30,042
You don't need to do that, Lin

147
00:12:30,292 --> 00:12:32,292
Why're you laughing? You think I'm invisible?

148
00:12:33,958 --> 00:12:35,333
Captain... it's no big deal

149
00:12:35,458 --> 00:12:36,167
What no big deal?

150
00:12:36,292 --> 00:12:38,250
Leave! Don't you leave!

151
00:12:38,583 --> 00:12:39,417
Captain, it's no big deal

152
00:12:39,708 --> 00:12:41,958
l saw everything. I'm warning you...

153
00:12:42,792 --> 00:12:45,875
I'll nab whoever that causes trouble on my turf

154
00:12:47,208 --> 00:12:48,208
l didn't cause any trouble

155
00:12:48,583 --> 00:12:51,542
Someone ruined my name. I'm here to claim justice

156
00:12:51,708 --> 00:12:53,833
What justice? I am justice

157
00:12:55,208 --> 00:12:58,125
You hooligans are fighting all the time

158
00:12:58,583 --> 00:12:59,833
What age are we in now.

159
00:13:00,417 --> 00:13:01,375
Still talking about martial arts?

160
00:13:02,292 --> 00:13:04,500
We're talking about arms and guns!

161
00:13:04,750 --> 00:13:06,750
Guns. Got it?

162
00:13:30,375 --> 00:13:31,542
You know, Captain Li...

163
00:13:32,250 --> 00:13:34,792
We martial artists are energetic

164
00:13:35,667 --> 00:13:37,250
Sometimes we might be a bit too loud

165
00:13:37,958 --> 00:13:40,042
But that doesn't mean we're not civilized

166
00:13:41,375 --> 00:13:45,042
We're civilized folks. Please don't pull the gun

167
00:13:45,792 --> 00:13:46,792
Cut me some slack

168
00:13:47,833 --> 00:13:50,500
Lin, set a table for Captain Li. It's on me

169
00:13:50,625 --> 00:13:52,958
Yes... Captain Li, this way please

170
00:13:53,292 --> 00:13:55,042
What you looking at? Get lost

171
00:13:55,125 --> 00:13:56,667
Don't look Don't look... Get out of the way

172
00:13:57,125 --> 00:13:57,833
Please

173
00:14:01,958 --> 00:14:02,792
Master Liu

174
00:14:04,417 --> 00:14:05,083
As you please

175
00:14:10,042 --> 00:14:11,417
Why so secretive?

176
00:14:14,042 --> 00:14:15,583
I'm really not good at business

177
00:14:18,750 --> 00:14:22,583
Take this to set up the mill.
Pay me back if you make a profit

178
00:14:24,958 --> 00:14:26,833
lt'll be a while before l can repay you

179
00:14:27,542 --> 00:14:28,708
Take your time

180
00:14:30,167 --> 00:14:32,958
Another request: take my son as your disciple

181
00:14:34,042 --> 00:14:37,167
There're so many martial club masters. Ask them

182
00:14:37,917 --> 00:14:40,167
None of them is better than you

183
00:14:40,333 --> 00:14:41,667
We're similar

184
00:14:42,833 --> 00:14:43,375
Brother lp

185
00:14:43,542 --> 00:14:44,583
Lin

186
00:14:45,250 --> 00:14:46,125
Brother Quan

187
00:14:46,500 --> 00:14:50,125
l learnt some new moves. Practice with me

188
00:14:50,792 --> 00:14:52,875
You got so much time. You found your brother?

189
00:14:53,250 --> 00:14:54,167
Let him be

190
00:14:54,417 --> 00:14:56,292
He'll come back once he spent all his money

191
00:14:56,875 --> 00:14:57,875
Let's try

192
00:14:59,667 --> 00:15:01,542
Dad, did Uncle Ip agree?

193
00:15:02,750 --> 00:15:03,917
Let's go watch over there

194
00:15:08,958 --> 00:15:11,208
You draw very well, Zhun

195
00:15:11,458 --> 00:15:13,083
What new moves have you learnt? Let's see

196
00:15:14,458 --> 00:15:16,167
Brother lp, my master says

197
00:15:16,292 --> 00:15:18,083
this move is offense and defense all in one

198
00:15:18,208 --> 00:15:19,667
Attack while defending. Defend while attacking

199
00:15:21,042 --> 00:15:22,292
Aren't they the same?

200
00:15:22,500 --> 00:15:24,500
Go away, ignorant kid

201
00:15:25,875 --> 00:15:26,833
Here l come

202
00:15:37,833 --> 00:15:40,333
This move attacks the midrib

203
00:15:40,542 --> 00:15:43,125
Stop reciting mantra. Hit your target

204
00:15:43,625 --> 00:15:45,250
Mom, I'm done with my drawing

205
00:15:46,458 --> 00:15:48,958
So beautiful. Show it to Dad

206
00:15:49,750 --> 00:15:52,042
Hit to disperse. Disperse while hitting

207
00:15:52,583 --> 00:15:53,708
My last move was "disperse while hitting"...

208
00:15:53,792 --> 00:15:54,792
Dad, look

209
00:15:54,875 --> 00:15:56,125
Wait. I'm not free at the moment

210
00:15:56,542 --> 00:15:57,625
You don't get it? No

211
00:15:57,708 --> 00:15:58,792
Come again if you don't get it

212
00:15:58,875 --> 00:15:59,917
Try again

213
00:16:02,042 --> 00:16:04,500
Dad doesn't want to see it

214
00:16:10,083 --> 00:16:11,417
There you go What?

215
00:16:13,333 --> 00:16:15,000
That was "disperse while hitting" Once more, Master lp

216
00:16:15,125 --> 00:16:16,333
l couldn't see clearly

217
00:16:16,458 --> 00:16:17,917
See?

218
00:16:18,125 --> 00:16:20,542
You guys fight every day. Aren't you tired?

219
00:16:25,625 --> 00:16:26,583
You okay, Brother lp?

220
00:16:33,042 --> 00:16:34,625
Sorry, Mrs lp

221
00:16:38,292 --> 00:16:39,750
Goodbye, Mrs lp

222
00:16:40,375 --> 00:16:41,625
l wasn't talking about you

223
00:16:41,750 --> 00:16:43,708
No, there're things to take care of at the mill

224
00:16:47,375 --> 00:16:48,167
Yao

225
00:16:51,250 --> 00:16:52,583
l gotta go, Uncle lp

226
00:16:52,667 --> 00:16:54,417
Okay, see you next time

227
00:16:57,458 --> 00:16:58,667
Bye, lp

228
00:17:03,667 --> 00:17:06,042
Talk to me if you're not happy

229
00:17:06,750 --> 00:17:08,208
No need to throw a tantrum

230
00:17:09,375 --> 00:17:11,958
Okay, please take a look at your son's drawing

231
00:17:12,750 --> 00:17:15,917
Spend more time with him instead of your pals

232
00:17:18,542 --> 00:17:19,792
Let's go inside, okay?

233
00:17:21,667 --> 00:17:22,500
Go

234
00:17:48,500 --> 00:17:49,500
Brother

235
00:17:49,750 --> 00:17:50,875
Where's the martial club street?

236
00:17:51,958 --> 00:17:52,792
Martial club!

237
00:17:53,667 --> 00:17:54,667
Go straight ahead

238
00:18:20,375 --> 00:18:28,167
One, two...
249
00:18:32,000 --> 00:18:34,333
Which martial club should be challenge first, Bro?

239
00:18:34,542 --> 00:18:36,750
One... two!
251
00:18:37,000 --> 00:18:38,083
One...

240
00:18:38,250 --> 00:18:39,208
Back!

241
00:18:39,333 --> 00:18:41,250
You teach martial arts here?

242
00:18:41,958 --> 00:18:43,250
Come in if you wanna learn

243
00:18:44,042 --> 00:18:45,083
Who's the patriarch?

244
00:18:47,000 --> 00:18:48,667
l am

245
00:18:49,375 --> 00:18:50,375
My name is Jin

246
00:18:50,542 --> 00:18:53,333
l come here as Fo Shan is famous for martial arts

247
00:18:53,458 --> 00:18:56,750
l'd like to practice with Fo Shan's martial artists

248
00:18:58,750 --> 00:19:00,125
Practice?

249
00:19:00,375 --> 00:19:01,333
Yes!

250
00:19:02,583 --> 00:19:03,708
Provocation rather?

251
00:19:04,792 --> 00:19:06,000
I'm obliged

252
00:19:06,292 --> 00:19:07,500
Okay!

253
00:19:07,875 --> 00:19:09,083
Stand aside

254
00:19:09,208 --> 00:19:11,167
See how I'll beat these out-of-towners!

255
00:19:11,917 --> 00:19:13,417
Not here. Stand over there

256
00:19:17,250 --> 00:19:18,417
What about it?

257
00:19:19,458 --> 00:19:20,583
Wait and see!

258
00:20:06,667 --> 00:20:08,417
Very good!

259
00:20:20,042 --> 00:20:21,167
Where's your master?

260
00:20:21,542 --> 00:20:23,000
Here!

261
00:21:13,833 --> 00:21:15,333
You wanna hack me to death?

262
00:21:20,458 --> 00:21:21,375
Our master is not here

263
00:21:51,375 --> 00:21:55,167
Weather is so treacherous in Fo Shan these days

264
00:21:58,375 --> 00:21:59,375
Let me

265
00:22:06,708 --> 00:22:07,875
What are you drawing, Zhun?

266
00:22:12,250 --> 00:22:15,792
He's ignoring you. Spend more time with him

267
00:22:17,500 --> 00:22:18,667
Okay

268
00:22:29,500 --> 00:22:31,042
So early, Lin?

269
00:22:31,333 --> 00:22:32,250
Yes

270
00:22:32,333 --> 00:22:35,042
I'm not here to fight. Just a few words

271
00:22:45,250 --> 00:22:46,167
What's the matter?

272
00:22:47,042 --> 00:22:49,125
Some out-of-towners are provoking all the clubs

273
00:22:50,208 --> 00:22:52,875
Their kung fu is too good for all the masters

274
00:22:53,125 --> 00:22:54,583
Can you look into that if you can?

275
00:22:56,042 --> 00:22:57,000
That good?

276
00:22:57,167 --> 00:22:58,167
Yes

277
00:23:02,667 --> 00:23:04,375
l gotta go, Mrs lp

278
00:23:52,417 --> 00:23:53,292
Hang in there, Master Liu!

279
00:23:53,375 --> 00:23:54,542
We depend on you, Master Liu!

280
00:24:20,375 --> 00:24:21,583
Damn it

281
00:24:22,583 --> 00:24:24,333
No one in Fo Shan knows martial arts at all

282
00:24:28,000 --> 00:24:30,208
l thought everyone was

283
00:24:30,500 --> 00:24:31,667
lt turns out you are just bums

284
00:24:32,125 --> 00:24:33,833
You can't even fight, let alone defend yourselves

285
00:24:34,500 --> 00:24:36,583
Brothers, our efforts have not been wasted

286
00:24:37,083 --> 00:24:38,792
Nobody in Fo Shan knows martial arts

287
00:24:38,875 --> 00:24:40,583
We'll be rich this time

288
00:24:42,000 --> 00:24:44,292
Brothers, let's keep it up

289
00:24:44,500 --> 00:24:47,875
We open a club here to showthem our might

290
00:24:48,958 --> 00:24:50,500
We will be No.1 in Fo Shan!

291
00:24:51,667 --> 00:24:54,750
You think you're good by beating a few nitwits

292
00:24:54,833 --> 00:24:56,500
Wait till you beat the best

293
00:24:59,167 --> 00:25:00,417
Who's the best in Fo Shan?

294
00:25:00,542 --> 00:25:01,958
lp Man, of course!

295
00:25:09,792 --> 00:25:10,583
Go!

296
00:25:10,917 --> 00:25:12,042
Come with us!

297
00:25:12,500 --> 00:25:14,333
See how we shall defeat Ip Man

298
00:25:38,583 --> 00:25:40,792
Dad, there're lots of people outside

299
00:25:42,458 --> 00:25:43,875
What can I help you?

300
00:25:48,500 --> 00:25:49,500
Sir...they...

301
00:25:49,625 --> 00:25:50,833
Are you Ip Man?

302
00:25:52,500 --> 00:25:55,000
I'm Jin. Heard that Fo Shan's famous for kung fu

303
00:25:55,083 --> 00:25:56,875
l understand, Master Jin. I understand

304
00:25:57,083 --> 00:25:59,917
You bring a crowd here to challenge me to a duel?

305
00:26:00,167 --> 00:26:01,125
Of course

306
00:26:01,333 --> 00:26:04,792
We're opening a club here to show our might

307
00:26:05,208 --> 00:26:06,167
To open a martial club...

308
00:26:06,333 --> 00:26:09,542
you need a good site. No need to fight with me

309
00:26:09,750 --> 00:26:11,417
Please leave!

310
00:26:15,250 --> 00:26:17,958
Uncle

311
00:26:18,583 --> 00:26:19,417
lp Man!

312
00:26:20,875 --> 00:26:24,292
Don't dillydally. Are you scared?

313
00:26:27,417 --> 00:26:29,375
You think our house is a martial club?

314
00:26:29,500 --> 00:26:31,375
Who's going to fight with you? Get lost!

315
00:26:31,583 --> 00:26:33,792
You heard that. l won't fight with you

316
00:26:34,250 --> 00:26:35,542
Please leave immediately

317
00:26:36,417 --> 00:26:38,958
l heard Wing Chun was invented by a woman

318
00:26:39,417 --> 00:26:41,000
That suits you just right

319
00:26:41,458 --> 00:26:43,958
Are you afraid of your wife, lp?

320
00:26:45,333 --> 00:26:47,167
No men are afraid of their wives

321
00:26:47,667 --> 00:26:49,583
There're only men who respect their wives

322
00:26:51,208 --> 00:26:54,500
Don't worry, Mrs lp. l won't beat him to death

323
00:26:57,542 --> 00:26:59,917
If you fear he'll lose, I'll use only one hand

324
00:27:01,250 --> 00:27:03,292
lf that's not enough, l can use no hands at all

325
00:27:04,250 --> 00:27:06,875
Fight with him, Master lp! Beat him up!

326
00:27:07,042 --> 00:27:09,792
I'm too disappointed by Fo Shan. Damn it!

327
00:27:09,875 --> 00:27:10,917
So many martial artists but none of them good

328
00:27:11,000 --> 00:27:11,667
Shut up!

329
00:27:14,750 --> 00:27:16,708
Don't break my things

330
00:27:24,583 --> 00:27:26,875
Get out of my way!

331
00:27:34,292 --> 00:27:35,458
You rascals

332
00:27:35,542 --> 00:27:36,625
You come at the right time

333
00:27:36,708 --> 00:27:39,875
This place is small. Please get outside

334
00:27:40,000 --> 00:27:41,250
and close the door on your way out

335
00:27:46,625 --> 00:27:48,000
You have to redeem our honor

336
00:27:50,875 --> 00:27:52,583
Ask them to leave. Hurry up!

337
00:27:55,958 --> 00:27:57,667
Can l just watch?

338
00:27:57,750 --> 00:27:58,583
Get out

339
00:28:01,542 --> 00:28:02,958
Hurry up! Get out!

340
00:28:03,625 --> 00:28:05,125
Get out! Get out!

341
00:28:14,875 --> 00:28:17,083
Wing Chun, Ip Man

342
00:28:18,125 --> 00:28:19,458
l really wanna see...

343
00:28:20,792 --> 00:28:24,500
how a man can fight like a woman

344
00:28:26,375 --> 00:28:30,833
Good kung fu does not depend on age or sex

345
00:28:30,958 --> 00:28:33,000
but on how well you fight. You will know later

346
00:29:12,292 --> 00:29:13,083
I'll pay!

347
00:29:14,792 --> 00:29:15,458
Good!

348
00:29:33,417 --> 00:29:34,292
I'll pay!

349
00:29:41,292 --> 00:29:43,708
Dad, Mom said if you don't start fighting

350
00:29:43,792 --> 00:29:45,833
everything in the house will be broken

351
00:29:46,333 --> 00:29:47,208
Okay

352
00:29:50,875 --> 00:29:52,000
Little rogue

353
00:29:52,500 --> 00:29:53,917
Mind you language

354
00:30:31,708 --> 00:30:32,625
Bro...

355
00:30:32,708 --> 00:30:33,958
Bro...

356
00:30:39,417 --> 00:30:41,667
You all right, Master

357
00:30:42,417 --> 00:30:43,417
I'm fine!

358
00:32:11,542 --> 00:32:12,542
How about that, Master

359
00:32:12,792 --> 00:32:14,542
My kung fu isn't too bad, eh?

360
00:32:14,708 --> 00:32:15,708
That's enough

361
00:32:17,167 --> 00:32:20,500
My northern boxing has lost to your southern one

362

00:32:22,208 --> 00:32:24,750
No, it's not a matter of northern or southern style

363
00:32:25,375 --> 00:32:26,500
The problem is you

364
00:32:34,417 --> 00:32:35,583
So who won?

365
00:32:36,500 --> 00:32:39,833
Look how depressed he is. He must have lost

366
00:32:40,875 --> 00:32:43,542
Get lost! Go back to your hometown!

367
00:32:44,417 --> 00:32:45,708
Get lost, you out-of-towners!

368
00:32:49,042 --> 00:32:50,958
Master! You fought very well, lp!

369
00:32:51,042 --> 00:32:54,125
You've redeemed the honor of our martial clubs

370
00:32:54,292 --> 00:32:55,458
l was just lucky...

371
00:32:55,583 --> 00:32:58,167
Don't be modest. You are Canton's treasure!

372
00:33:03,000 --> 00:33:03,792
Thank you

373
00:33:03,958 --> 00:33:05,750
Take a look. It's imported

374
00:33:05,875 --> 00:33:07,375
Master lp, flowers for your wife Thanks

375
00:33:07,625 --> 00:33:08,875
How much, boss?

376
00:33:09,000 --> 00:33:10,125
On the house, Master lp

377
00:33:10,208 --> 00:33:12,083
l can't let you pay. You saved our honor

378
00:33:12,250 --> 00:33:13,542
How can that be?

379
00:33:13,917 --> 00:33:14,833
You're running a business

380
00:33:15,125 --> 00:33:16,000
Don't stand on ceremonies. Next time

381
00:33:16,375 --> 00:33:17,292
Okay, next time

382
00:33:17,833 --> 00:33:18,792
Fruits, Master lp

383
00:33:18,917 --> 00:33:20,833
You're too kind. l can't For the kid

384
00:33:21,167 --> 00:33:23,167
Thank you Please come again. Goodbye

385
00:33:23,875 --> 00:33:24,667
Buddy

386
00:33:25,042 --> 00:33:26,375
Say thank you Take this

387
00:33:26,458 --> 00:33:28,500
Thank you You're welcome... Farewell

388
00:33:29,083 --> 00:33:30,042
How are you, Master lp?

389
00:33:30,125 --> 00:33:31,000
How are you?

390
00:33:31,083 --> 00:33:32,000
How are you, Master lp?

391
00:33:32,417 --> 00:33:33,333
That isn't bad at all

392
00:33:33,625 --> 00:33:35,833
Yes, this is the best in our shop

393
00:33:36,125 --> 00:33:36,875
Really?

394
00:33:37,583 --> 00:33:40,333
It's our honor if it can be placed in your house

395
00:33:40,417 --> 00:33:41,458
Thank you

396
00:33:43,333 --> 00:33:44,417
What's the occasion?

397
00:33:45,083 --> 00:33:46,333
Uncle Man. Auntie

398
00:33:46,667 --> 00:33:48,958
You plan on opening a martial club...

399
00:33:49,333 --> 00:33:50,958
why didn't you inform me first?

400
00:33:51,208 --> 00:33:53,000
When did I say that?

401
00:33:53,333 --> 00:33:54,917
Everybody in Fo Shan knows about it

402
00:33:55,083 --> 00:33:57,292
Everybody in Fo Shan but me

403
00:33:58,500 --> 00:34:00,167
Let me help you, Uncle Man

404
00:34:01,750 --> 00:34:06,542
Please accept me as your disciple, Master lp

405
00:34:07,000 --> 00:34:08,583
Master. Madam

406
00:34:09,042 --> 00:34:09,625
Bro

407
00:34:09,708 --> 00:34:11,417
You must be the one spreading the rumor

408
00:34:11,708 --> 00:34:13,292
Keep order for me

409
00:34:14,583 --> 00:34:16,542
Come. Go yourself

410
00:34:18,500 --> 00:34:21,500
l don't care. Yao has to be your first disciple

411
00:34:21,708 --> 00:34:24,167
Come on. You've known me long enough

412
00:34:24,417 --> 00:34:25,750
l don't like having disciples

413
00:34:25,875 --> 00:34:27,500
Be quiet

414
00:34:27,792 --> 00:34:29,042
Stay in order

415
00:34:30,042 --> 00:34:33,750
Stay in order and hail: Master lp! Master lp...

416
00:34:33,917 --> 00:34:49,583
Master lp! Master lp...

417
00:34:57,375 --> 00:35:00,542
On July 7, 1937, the Marco Polo Incident broke out.
Japan invaded China

418
00:35:00,792 --> 00:35:04,500
robbing its people of their livelihood and causing
rampant starvation all over the country.

419
00:35:57,458 --> 00:35:59,958
In October, 193
Fo Shan was occupied by the Japanese army

420
00:36:00,042 --> 00:36:02,625
...who destroyed factories, infrastructures and
buildings.

421
00:36:02,833 --> 00:36:07,333
The population of Fo Shan shrunk
from more than 300,000 to just over 70,000.

422
00:36:07,458 --> 00:36:12,250
Only a dozen factories in the whole city
remained in operation still.

423
00:36:20,208 --> 00:36:25,583
Ip's residence was also confiscated and
turned into the headquarters the Japanese army.

424
00:36:25,667 --> 00:36:29,500
Ip's family was rendered homeless,
living an abject existence.

425
00:37:29,958 --> 00:37:31,750
Cheng, I'll step out for a sec. Will be right back

426
00:37:32,833 --> 00:37:34,125
Wait

427
00:37:47,875 --> 00:37:49,792
It's cold outside. Wear a jacket

428
00:37:51,375 --> 00:37:53,958
Hurry up. Me this side, you that side

429
00:38:02,000 --> 00:38:04,792
Be careful, Zhun. Don't hurt others

430
00:38:31,125 --> 00:38:33,125
I'll give you more, Master lp

431
00:38:33,375 --> 00:38:34,583
Thank you

432
00:38:35,208 --> 00:38:37,417
Don't push! One by one

433
00:38:38,417 --> 00:38:39,542
Don't push

434
00:38:40,042 --> 00:38:41,458
One by one

435
00:38:45,417 --> 00:38:46,625
You get out of the way!

436
00:39:03,667 --> 00:39:07,000
The mill may be old but it's still productive

437
00:39:12,875 --> 00:39:14,167
Fo Shan is very chaotic these days

438
00:39:14,917 --> 00:39:16,875
You left already. Why did you come back?

439
00:39:17,708 --> 00:39:19,792
Who's going to feed the workers otherwise?

440
00:39:20,250 --> 00:39:22,625
All my money is invested in this mill

441
00:39:24,042 --> 00:39:25,375
l can't pay you back for now

442
00:39:26,625 --> 00:39:29,708
Don't worry. l almost forgot

443
00:39:30,125 --> 00:39:32,500
No, I'll consider you a shareholder then

444
00:39:32,750 --> 00:39:33,708
Let me calculate...

445
00:39:35,375 --> 00:39:36,917
you should have ten percent shares

446
00:39:37,250 --> 00:39:38,333
It's really unnecessary

447
00:39:38,583 --> 00:39:41,708
Stay and help out, now that you own it too

448
00:39:43,917 --> 00:39:44,958
Uncle lp

449
00:39:45,500 --> 00:39:46,125
Yao

450
00:39:46,333 --> 00:39:47,958
You'll be helping out? That's great!

451
00:39:48,042 --> 00:39:49,958
Everyone will be lively under your leadership

452
00:39:50,792 --> 00:39:52,250
And l can watch you practice

453
00:39:52,750 --> 00:39:55,583
lp, stay for lunch. It's lunchtime for the workers

454
00:39:56,500 --> 00:39:57,750
Yes, let's have lunch together

455
00:39:58,542 --> 00:39:59,417
No, thanks

456
00:40:00,250 --> 00:40:02,958
I'm not free. Next time

457
00:40:03,292 --> 00:40:04,292
Goodbye

458
00:40:15,208 --> 00:40:17,375
Dad, why didn't you ask Uncle Ip to stay?

459
00:40:18,917 --> 00:40:20,333
He doesn't like to owe people favors

460
00:40:28,333 --> 00:40:31,208
Dad, you used to practice martial arts, right?

461
00:40:31,292 --> 00:40:33,208
Why did you stop?

462
00:40:34,417 --> 00:40:35,917
l get hungry when l exercise

463
00:40:36,250 --> 00:40:38,042
So l need to exercise less, okay?

464
00:40:38,583 --> 00:40:42,125
Got it. l won't play outside from now on

465
00:40:43,583 --> 00:40:46,167
You'll only stop playing today. Go eat

466
00:40:46,250 --> 00:40:47,167
Hurry up and eat

467
00:40:56,750 --> 00:40:58,333
This congee is a bit too thick

468
00:41:00,083 --> 00:41:01,375
But you need to eat some

469
00:41:08,458 --> 00:41:09,458
Be careful it's hot

470
00:41:17,583 --> 00:41:19,042
How much rice is left at home?

471
00:41:20,292 --> 00:41:21,333
Don't worry

472
00:41:27,958 --> 00:41:31,375
I've pawned everything worth pawning

473
00:41:32,792 --> 00:41:36,417
l am strong. l can look for a job

474
00:41:36,792 --> 00:41:37,750
It's not the end of the world

475
00:41:39,500 --> 00:41:40,833
You look for a job?

476
00:41:41,833 --> 00:41:45,417
l didn't need to work. But it's different now

477
00:41:45,917 --> 00:41:47,750
There's always a first time

478
00:41:51,833 --> 00:41:53,583
We have enough people here

479
00:41:54,375 --> 00:41:56,292
We don't need to hire more. Sorry

480
00:41:59,250 --> 00:42:01,167
Boss, are you hiring?

481
00:42:01,375 --> 00:42:02,500
No

482
00:42:02,792 --> 00:42:03,750
Thank you

483
00:42:05,667 --> 00:42:09,792
You want to hire me, Boss...

484
00:42:09,917 --> 00:42:11,125
Boss...

485
00:42:11,583 --> 00:42:13,917
You, you, you... Come up here...

486
00:42:14,083 --> 00:42:15,167
You want to hire me, Boss...

487
00:42:15,417 --> 00:42:16,667
Here

488
00:42:20,250 --> 00:42:22,167
You're looking for a job, Master lp?

489
00:42:22,292 --> 00:42:23,375
Come, come up...

490
00:42:23,625 --> 00:42:25,125
Thank you

491
00:42:53,250 --> 00:42:54,167
Brother lp!

492
00:43:02,042 --> 00:43:04,750
You can't dress like that to work

493
00:43:05,458 --> 00:43:07,292
l didn't expect to pour coals here

494
00:43:08,375 --> 00:43:09,625
How are you, Master lp?

495
00:43:10,917 --> 00:43:11,958
How are you?

496
00:43:13,583 --> 00:43:14,792
How are you, Master lp?

497
00:43:18,542 --> 00:43:20,000
So many martial club masters here?

498
00:43:20,750 --> 00:43:23,500
The boss here used to practice martial arts too

499
00:43:23,667 --> 00:43:27,083
That's why he likes to employ martial artists

500
00:43:27,667 --> 00:43:29,792
By the way, are you still practicing?

501
00:43:31,417 --> 00:43:34,000
l'd rather used my time to scrape a living

502
00:43:52,667 --> 00:43:55,333
l can't finish it all. Help me, okay?

503
00:43:56,333 --> 00:43:57,625
Eat some

504
00:44:03,250 --> 00:44:06,083
How're your wife and son?

505
00:44:07,042 --> 00:44:08,333
They're fine. Thank you

506
00:44:11,417 --> 00:44:13,250
Did you find your brother?

507
00:44:13,458 --> 00:44:15,625
l couldn't locate him since he left

508
00:44:15,917 --> 00:44:17,000
Don't know if he's still alive

509
00:44:18,958 --> 00:44:20,583
l don't even have the chance to say sorry

510
00:44:28,542 --> 00:44:29,625
What have you lost?

511
00:44:29,875 --> 00:44:31,625
l lost an iron box

512
00:44:31,917 --> 00:44:32,875
What iron box?

513
00:44:33,958 --> 00:44:34,958
Japanese solders are coming!

514
00:44:55,167 --> 00:44:56,250
Dear workers

515
00:44:57,708 --> 00:44:58,875
This is Colonel Sato

516
00:44:59,917 --> 00:45:02,125
He appreciates Chinese martial arts

517
00:45:02,625 --> 00:45:04,667
He knows Fo Shan is famous for martial arts

518
00:45:05,500 --> 00:45:09,208
He wants to find Chinese martial artists
to fight with the Japanese

519
00:45:10,583 --> 00:45:11,667
Would anyone want to go?

520
00:45:12,542 --> 00:45:13,458
Would anyone want to go?

521
00:45:17,917 --> 00:45:19,000
Would anyone want to go?

522
00:45:26,042 --> 00:45:26,792
Master?

523
00:45:31,750 --> 00:45:33,792
You want us to be sandbags?

524
00:45:33,958 --> 00:45:36,042
There's no door, l tell you!

525
00:45:37,833 --> 00:45:38,875
Airhead

526
00:45:40,042 --> 00:45:41,542
Whoever that wins will get one sack of rice

527
00:45:44,583 --> 00:45:48,083
Whoever that wins will get one sack of rice

528
00:45:48,250 --> 00:45:49,458
I'll go!

529
00:45:50,250 --> 00:45:51,417
Lin...

530
00:45:52,042 --> 00:45:53,083
Don't get into trouble

531
00:45:53,333 --> 00:45:55,417
I'm going too! Me too!

532
00:45:56,500 --> 00:45:59,208
They took all our rice. Now l can get them back

533
00:45:59,292 --> 00:46:00,917
The world is fair

534
00:46:05,208 --> 00:46:06,167
Forget it

535
00:46:07,083 --> 00:46:08,125
Help me find the iron box

536
00:46:12,667 --> 00:46:14,500
Let's go. It's okay. Come

537
00:46:15,625 --> 00:46:16,458
Be careful

538
00:46:16,625 --> 00:46:17,917
Come, let's line up

539
00:46:18,125 --> 00:46:19,167
Come, come, come...

540
00:46:20,125 --> 00:46:21,667
Anything else?

541
00:46:22,875 --> 00:46:25,042
No, let's go Yes!

542

00:46:54,083 --> 00:46:55,167
Master?

543
00:46:57,583 --> 00:46:58,458
General

544
00:47:30,792 --> 00:47:32,208
Thank you, General!

545
00:47:41,958 --> 00:47:43,292
Got to beat them all

546
00:47:48,292 --> 00:47:50,833
Let me join in the fun

547
00:47:52,958 --> 00:47:56,042
They're not good enough for General Miura

548
00:47:57,208 --> 00:47:59,833
I'll show the Chinese what Japanese kung fu's like

549
00:48:01,583 --> 00:48:04,667
Find three men to fight with me

550
00:48:05,625 --> 00:48:08,583
Give them rice even if they lose

551
00:48:09,792 --> 00:48:10,542
Yes, sir!

552
00:48:13,542 --> 00:48:15,292
I've done you a favor again

553
00:48:15,667 --> 00:48:18,792
General Miura will fight with three of you

554
00:48:19,792 --> 00:48:23,000
You can get rice whether you win or not

555
00:48:23,167 --> 00:48:25,625
The rice is not important. l just wanna beat them

556
00:48:26,583 --> 00:48:27,417
Who will be going?

557
00:48:27,625 --> 00:48:29,042
l will...

558
00:48:29,250 --> 00:48:31,167
Let go of me... Stop shouting!

559
00:48:32,375 --> 00:48:34,000
Lin, you and you... The three of you

560
00:48:34,250 --> 00:48:34,958
Okay!

561
00:49:34,083 --> 00:49:36,042
You've spit blood. Stop fighting

562
00:49:37,875 --> 00:49:38,708
We've lost

563
00:49:38,833 --> 00:49:42,458
General, they admitted defeat

564
00:50:07,833 --> 00:50:10,042
Your really wanna die?

565
00:50:14,958 --> 00:50:16,875
You asshole!

566
00:50:32,333 --> 00:50:34,625
Lin, how are you? Lin...

567
00:50:34,750 --> 00:50:37,583
Lin...

568
00:50:51,250 --> 00:50:52,292
Were you tired today?

569
00:50:53,875 --> 00:50:55,417
Pouring coal is not tiring at all

570
00:51:01,875 --> 00:51:03,125
l saw Lin today

571
00:51:03,375 --> 00:51:05,333
Really? How is he?

572
00:51:05,833 --> 00:51:06,667
Not bad

573
00:51:08,458 --> 00:51:09,917
l didn't expect to see him again

574
00:51:35,250 --> 00:51:36,458
Master Li, Master Hong

575
00:51:36,917 --> 00:51:37,500
Master lp

576
00:51:37,583 --> 00:51:39,083
Did you see Lin?

577
00:51:39,250 --> 00:51:41,167
Lin? No

578
00:51:41,583 --> 00:51:42,667
No, l didn't

579
00:51:43,167 --> 00:51:44,292
Let's eat first

580
00:52:02,333 --> 00:52:03,667
Lots of us received rice yesterday

581
00:52:04,708 --> 00:52:07,500
General Miura was very satisfied.
Anybody wants to go today?

582
00:52:10,542 --> 00:52:11,542
Anybody? Li...

583
00:52:12,000 --> 00:52:13,250
Li...

584
00:52:13,750 --> 00:52:14,792
Where's Lin?

585
00:52:17,167 --> 00:52:18,250
Anybody wants to go?

586
00:52:18,375 --> 00:52:20,250
I'm asking you.
599
00:52:21,292 --> 00:52:22,083
l don't know

587
00:52:22,875 --> 00:52:25,333
Of course you do. You took him away

588
00:52:26,583 --> 00:52:27,458
Anybody wants to go?

589
00:52:28,333 --> 00:52:29,458
You'll get rice if you win

590
00:52:29,625 --> 00:52:30,417
Me!

591
00:52:31,042 --> 00:52:32,333
lf Master Ip is going, I'll go too!

592
00:52:32,458 --> 00:52:33,667
Me too!

593
00:52:33,917 --> 00:52:35,792
l wanna have a good fight with the Japanese

594
00:52:38,958 --> 00:52:40,458
Anything else l can do?

595
00:52:40,542 --> 00:52:42,042
No, you can go

596
00:53:11,417 --> 00:53:12,292
Thanks

597
00:53:14,500 --> 00:53:16,958
Can l fight three more people?

598
00:53:20,042 --> 00:53:22,583
He said he wanted to fight three more people

599
00:54:35,000 --> 00:54:37,875
That's it for me...

600
00:54:58,500 --> 00:54:59,708
Why did you open fire?

601
00:55:02,875 --> 00:55:05,125
Li! Why did you open fire?

602
00:55:06,542 --> 00:55:09,083
Li! Why did you open fire?

603
00:55:09,292 --> 00:55:11,542
Who let you open fire?

604
00:55:12,667 --> 00:55:18,708
He took the rice even though he's lost

605
00:55:18,875 --> 00:55:21,625
so... l wanted to teach him a lesson

606
00:55:26,208 --> 00:55:28,625
This place is for tournaments only

607
00:55:38,042 --> 00:55:41,708
Never open fire here anymore

608
00:55:43,458 --> 00:55:44,750
Got it!

609
00:55:50,417 --> 00:55:53,667
Please calm down, General Miura

610
00:55:54,583 --> 00:55:56,833
I'll arrange the next tournament for you

611
00:56:00,083 --> 00:56:01,167
Continue!

612
00:56:16,125 --> 00:56:17,250
Who else wants to fight?

613
00:56:17,500 --> 00:56:18,292
Me!

614
00:56:19,125 --> 00:56:21,208
Li! Open the gate!

615
00:56:25,667 --> 00:56:27,417
Master... Open the gate!

616
00:56:29,250 --> 00:56:32,875
Tell me, was Lin beaten to death?

617
00:56:37,208 --> 00:56:38,500
Open the gate

618
00:56:38,833 --> 00:56:39,625
Master...

619
00:56:39,708 --> 00:56:40,500
Open the gate!

620
00:56:42,667 --> 00:56:44,208
Please open the gate

621
00:56:59,417 --> 00:57:01,000
l wanna fight ten people!

622
00:57:01,875 --> 00:57:03,167
You crazy? Please don't

623
00:57:03,292 --> 00:57:04,625
l wanna fight ten people!

624
00:57:11,792 --> 00:57:14,958
He said he wanted to fight ten people

625
00:57:22,958 --> 00:57:23,750
Ten?

626
00:57:26,250 --> 00:57:27,250
Yes

627
00:57:28,917 --> 00:57:30,333
Let's see how good he is

628
00:57:35,208 --> 00:57:36,042
Unit 5!

629
00:57:37,083 --> 00:57:39,583
Unit 1, Unit 3, Unit 5

630
00:57:40,333 --> 00:57:41,500
Start!

631
00:57:45,458 --> 00:57:46,417
Be careful

632
01:00:22,250 --> 01:00:23,208
Stay back!

633
01:00:44,500 --> 01:00:45,375
Come back again

634
01:00:46,667 --> 01:00:47,500
He wants you to come back again

635
01:00:49,500 --> 01:00:51,042
I'm not here for the rice

636
01:00:53,375 --> 01:00:55,875
He said... he would come back

637
01:01:01,667 --> 01:01:02,875
What's your name?

638
01:01:03,458 --> 01:01:04,417
He wants to know your name

639
01:01:11,458 --> 01:01:13,625
I'm just a Chinese

640
01:01:16,708 --> 01:01:19,000
His name is Ip Man

641
01:01:51,833 --> 01:01:52,958
Be careful in the future

642
01:01:54,250 --> 01:01:55,833
l don't know what Miura might do

643
01:02:00,917 --> 01:02:01,708
Lackey!

644
01:02:03,417 --> 01:02:04,542
Why am I a lackey?

645
01:02:05,667 --> 01:02:09,125
Their deaths got nothing to do with me.
I'm just an interpreter

646
01:02:09,833 --> 01:02:11,750
l need to scrape a living too!

647
01:02:12,458 --> 01:02:13,292
Scrape a living?

648
01:02:14,708 --> 01:02:17,333
You watch your countrymen get beaten to death.

649
01:02:21,875 --> 01:02:22,708
l don't have any

650
01:02:23,375 --> 01:02:24,458
You do. You have lots of it

651
01:02:25,417 --> 01:02:27,125
lf you have the guts, go beat them up!

652
01:02:27,333 --> 01:02:29,292
Beat as many as you can!

653
01:02:30,042 --> 01:02:32,667
I'm an interpreter, not a lackey...

654
01:02:33,417 --> 01:02:35,625
I'm a Chinese!

655
01:03:32,208 --> 01:03:33,250
I'm back

656
01:03:33,500 --> 01:03:34,458
Daddy

657
01:03:34,542 --> 01:03:35,500
You're back?

658
01:03:37,333 --> 01:03:38,333
Have you been good?

659
01:03:38,583 --> 01:03:39,125
Yes

660
01:03:40,083 --> 01:03:40,667
Good boy

661
01:03:44,333 --> 01:03:45,333
Are you tired today?

662
01:04:07,250 --> 01:04:08,375
Go wash your face first

663
01:05:09,708 --> 01:05:11,000
You're so good

664
01:05:20,167 --> 01:05:22,375
l realize today I'm useless

665
01:05:28,083 --> 01:05:29,500
l can't do anything

666
01:05:34,708 --> 01:05:36,125
l practiced marital arts before

667
01:05:39,083 --> 01:05:39,958
But so what?

668
01:05:46,833 --> 01:05:47,833
This world...

669
01:05:53,375 --> 01:05:54,750
is minuscule

670
01:05:58,417 --> 01:05:59,708
I'm so useless

671
01:06:02,417 --> 01:06:04,042
l don't care what the world is like

672
01:06:05,292 --> 01:06:08,375
l only know I'm very happy now

673
01:06:11,125 --> 01:06:14,708
As long as you, me, and Zhun...

674
01:06:15,625 --> 01:06:19,083
can stay together, everything will be okay

675
01:06:23,125 --> 01:06:24,917
It's essential for a family to stay together

676
01:06:55,875 --> 01:06:58,208
Get off! Get off!

677
01:06:58,917 --> 01:07:00,458
Get off...

678
01:07:00,833 --> 01:07:02,500
Stand over there! On the side!

679
01:07:02,625 --> 01:07:03,667
Stand over there...

680
01:07:28,042 --> 01:07:30,083
Who's the boss? Come out!

681
01:07:34,792 --> 01:07:35,750
l am

682
01:07:45,875 --> 01:07:49,125
l just took your goods. You can buy them back

683
01:07:49,250 --> 01:07:50,500
ls that okay?

684
01:07:51,750 --> 01:07:52,667
l don't have money

685
01:07:54,708 --> 01:07:56,083
Don't beat my dad anymore!

686
01:07:58,625 --> 01:07:59,583
Wing Chun?

687
01:08:04,833 --> 01:08:05,917
Damn it! Wing Chun?

688
01:08:06,042 --> 01:08:07,417
Don't beat him!

689
01:08:11,208 --> 01:08:11,958
Do you have money?

690
01:08:12,792 --> 01:08:13,375
l don't

691
01:08:13,417 --> 01:08:14,125
Do you?

692
01:08:15,500 --> 01:08:16,042
No...

693
01:08:16,167 --> 01:08:17,292
I'll keep beating you till you have!

694
01:08:25,167 --> 01:08:26,042
The goods haven't been sold...

695
01:08:27,417 --> 01:08:28,792
l don't have money

696
01:08:33,583 --> 01:08:35,375
Uncle lp! Uncle lp...

697
01:08:35,958 --> 01:08:38,458
Please save my dad. He's almost beaten to death

698
01:08:39,042 --> 01:08:39,917
What's the matter, Yao?

699
01:08:40,042 --> 01:08:40,583
Auntie

700
01:08:40,667 --> 01:08:42,375
Let me go see what happens. It's okay

701
01:08:52,375 --> 01:08:55,625
I'm very reasonable

702
01:08:56,375 --> 01:08:57,875
It's fine if you don't have money now

703
01:08:58,500 --> 01:09:00,292
I'll give you some time to raise it

704
01:09:00,792 --> 01:09:02,167
As for the goods, I'll keep them for now

705
01:09:20,750 --> 01:09:21,792
Master lp

706
01:09:25,042 --> 01:09:26,208
Dad, are you okay?

707
01:09:26,750 --> 01:09:28,958
I'm fine. Go help Uncle Fu

708
01:09:48,083 --> 01:09:49,208
How can l help?

709
01:09:51,042 --> 01:09:53,958
l thought your martial arts were impractical

710
01:09:54,583 --> 01:09:56,000
Now l know it's very useful

711
01:09:57,542 --> 01:10:00,167
l should've learnt some martial arts from you

712
01:10:00,542 --> 01:10:01,875
At least l can de

713
01:10:03,292 --> 01:10:06,125
Uncle lp, please stay and teach us martial arts

714
01:10:06,667 --> 01:10:09,208
so thatwe can defend myself

715
01:10:10,833 --> 01:10:11,750
Master lp

716
01:10:13,042 --> 01:10:16,000
You're such an expert. Please teach us

717
01:10:16,333 --> 01:10:20,208
Yes, Master lp. Please teach us

718
01:10:24,375 --> 01:10:25,542
I'm a businessman

719
01:10:27,333 --> 01:10:28,750
l know nothing other than running a business

720
01:10:29,667 --> 01:10:32,250
l can't protect them, but you can

721
01:10:34,458 --> 01:10:36,875
In peaceful days, it's okay if you refused to teach

722
01:10:37,917 --> 01:10:41,708
But in bad times now, shouldn't you do something?

723
01:10:45,125 --> 01:10:46,625
Teaching martial arts is very costly

724
01:10:47,750 --> 01:10:50,917
Are you paying their fees? You owe me again?

725
01:10:57,417 --> 01:10:59,917
Uncle lp, I'll be your first disciple

726
01:12:15,750 --> 01:12:17,333
Dad, l wanna be taller

727
01:12:17,792 --> 01:12:19,000
Taller?

728
01:12:32,500 --> 01:12:34,333
Why hasn't Ip Man come back?

729
01:12:36,750 --> 01:12:40,750
l... l don't know...

730
01:12:42,000 --> 01:12:43,083
Find him

731
01:12:45,333 --> 01:12:50,333
l don't know where he is

732
01:12:50,542 --> 01:12:51,833
l don't know how to find him

733
01:12:52,000 --> 01:12:53,417
How big is Fo Shan?

734
01:12:54,500 --> 01:12:55,833
How difficult can it be to find him?

735
01:12:58,208 --> 01:13:01,208
Fo Shan is indeed very big

736
01:13:07,083 --> 01:13:07,917
No...

737
01:13:09,292 --> 01:13:10,208
Please don't...

738
01:13:14,458 --> 01:13:16,333
l really don't know where he is...

739
01:13:20,000 --> 01:13:21,625
Useless thing! Enough!

740
01:13:28,625 --> 01:13:29,417
Asshole!

741
01:13:29,917 --> 01:13:31,375
Paper, stone, scissors!

742
01:13:32,208 --> 01:13:34,000
You lost You colluded?

743
01:13:36,167 --> 01:13:37,333
Hide well

744
01:13:39,042 --> 01:13:41,208
10, 9, 8, 7...

745
01:13:41,458 --> 01:13:42,250
Zhun

746
01:13:43,292 --> 01:13:43,750
That way

747
01:13:43,833 --> 01:13:45,750
3, 2, 1

748
01:13:46,458 --> 01:13:48,875
I'm coming. I'll find you guys

749
01:13:52,667 --> 01:13:53,292
Master

750
01:13:53,750 --> 01:13:54,417
What're you here for?

751
01:13:57,000 --> 01:13:58,292
Miura wants you to go back and fight him

752
01:14:01,875 --> 01:14:02,542
Go away

753
01:14:04,750 --> 01:14:05,458
l can't

754
01:14:21,292 --> 01:14:22,042
Why not?

755
01:14:22,833 --> 01:14:24,458
Why not? What do you want?

756
01:14:26,208 --> 01:14:27,417
What do you want?

757
01:14:33,042 --> 01:14:34,208
How pretty!

758
01:14:55,000 --> 01:14:55,875
Shit

759
01:14:58,042 --> 01:15:00,417
Let's go. It's not safe here

760
01:15:20,000 --> 01:15:21,542
Let's go, Cheng

761
01:15:29,250 --> 01:15:30,083
Li

762
01:15:49,042 --> 01:15:52,208
You're a piece of shit!

763
01:15:52,375 --> 01:15:54,875
How could you let Ip run away?

764
01:15:54,958 --> 01:15:56,583
I'm sorry...

765
01:15:58,167 --> 01:16:01,708
Even Colonel Sato could not stop him...

766
01:16:02,125 --> 01:16:09,125
I've tried my best already...

767
01:16:10,500 --> 01:16:11,417
Sorry

768
01:16:11,500 --> 01:16:12,542
Shut up!

769
01:16:12,750 --> 01:16:15,583
Utterly useless!

770
01:16:17,292 --> 01:16:18,417
Tell them...

771
01:16:22,542 --> 01:16:23,958
to dig Ip out! This is an order

772
01:16:25,208 --> 01:16:25,792
Yes, sir

773
01:16:40,625 --> 01:16:41,375
Little Sis

774
01:16:46,375 --> 01:16:47,917
Brother, eat something

775
01:16:56,958 --> 01:16:57,708
How's the master?

776
01:16:58,208 --> 01:16:59,792
Okay. They are all fine

777
01:17:06,583 --> 01:17:07,458
Master

778
01:17:08,083 --> 01:17:08,792
Coming

779
01:17:12,708 --> 01:17:13,708
Madam

780
01:17:15,500 --> 01:17:16,625
See if it fits?

781
01:17:18,208 --> 01:17:20,375
So are you well adapted here?

782
01:17:21,417 --> 01:17:22,125
Yes

783
01:17:22,625 --> 01:17:23,792
That's good

784
01:17:24,042 --> 01:17:25,333
I'll let you know when the meal is ready

785
01:17:26,375 --> 01:17:27,167
Li...

786
01:17:31,292 --> 01:17:32,125
I'm fine

787
01:17:34,500 --> 01:17:35,625
l really don't know what to say

788
01:17:37,833 --> 01:17:38,542
Thank you

789
01:17:40,333 --> 01:17:40,958
It's okay

790
01:18:04,542 --> 01:18:06,167
We better leave Fo Shan as soon as possible

791
01:18:08,375 --> 01:18:09,958
Quan is trying to find a solution for us

792
01:18:10,375 --> 01:18:11,292
Where shall we go?

793
01:18:12,000 --> 01:18:12,750
Hong Kong

794
01:18:13,750 --> 01:18:15,792
In fact, it doesn't matter where

795
01:18:20,875 --> 01:18:22,583
l still have some friends in Hong Fong

796
01:18:24,792 --> 01:18:26,042
lf something happens to me...

797
01:18:27,000 --> 01:18:28,083
What can happen to you?

798
01:18:29,500 --> 01:18:30,792
Nothing will happen to you

799
01:18:35,542 --> 01:18:37,292
They are here again! Let's scram!

800
01:18:52,250 --> 01:18:54,458
They are here! They are here!

801
01:19:03,292 --> 01:19:05,333
ls the money ready?

802
01:19:05,708 --> 01:19:07,167
We won't give you money!

803
01:19:09,208 --> 01:19:10,250
What did you say?

804
01:19:12,542 --> 01:19:14,875
I'm not afraid of you! You can't bully us!

805
01:19:16,500 --> 01:19:18,333
You want me to beat you up?

806
01:19:24,292 --> 01:19:26,542
Damn it!

807
01:19:27,208 --> 01:19:28,083
just beat him up!

808
01:20:16,250 --> 01:20:17,542
Stop it!

809
01:20:31,083 --> 01:20:32,417
No wonder they dare to resist

810
01:20:33,500 --> 01:20:34,875
They've found a bodyguard

811
01:20:35,750 --> 01:20:38,458
You spurned me for opening a club in Fo Shan

812
01:20:40,208 --> 01:20:42,208
And today, you wanna mess with me again?

813
01:20:43,167 --> 01:20:45,500
You wanna chase me away?

814
01:20:46,125 --> 01:20:47,125
No one wanna chase you away

815
01:20:47,500 --> 01:20:51,375
lp, have you ever been hungry every day?

816
01:20:53,417 --> 01:20:55,417
Everybody is hungry nowadays

817
01:20:57,125 --> 01:20:59,833
The first day l came to Fo Shan, l told myself...

818
01:21:01,250 --> 01:21:02,583
l would never be hungry again

819
01:21:03,750 --> 01:21:05,125
l will never be hungry again!

820
01:21:05,667 --> 01:21:06,542
Feep beating!

821
01:21:14,833 --> 01:21:15,625
Beat them!

822
01:22:18,333 --> 01:22:20,458
Yuan, why you still idling here? Go!

823
01:22:25,292 --> 01:22:26,208
Fill them!

824
01:22:28,833 --> 01:22:29,833
Fill them!

825
01:22:41,917 --> 01:22:42,792
Go

826
01:22:43,083 --> 01:22:44,792
How can we get near him?

827
01:23:38,875 --> 01:23:39,958
Let's go!

828
01:23:43,583 --> 01:23:45,125
Master, you were so good!

829
01:23:54,875 --> 01:23:55,917
Yuan

830
01:23:59,333 --> 01:24:00,125
Stop there!

831
01:24:08,875 --> 01:24:10,125
You know what you're doing?

832
01:24:10,375 --> 01:24:12,083
l know. I'm a robber

833
01:24:13,083 --> 01:24:14,375
You're robbing the Chinese

834
01:24:14,708 --> 01:24:16,833
l'd rather be the bully than the bullied

835
01:24:17,000 --> 01:24:18,083
l want everyone to be scared of me!

836
01:24:21,917 --> 01:24:24,000
Your brother asked me to give this...
Don't talk about him!

837
01:24:29,083 --> 01:24:30,292
You know your brother is dead?

838
01:24:31,333 --> 01:24:32,667
He's beaten to death by the Japanese

839
01:24:40,375 --> 01:24:44,083
He looked for you everywhere but couldn't find you

840
01:24:47,208 --> 01:24:51,042
Everyone needs to choose his own path

841
01:26:02,125 --> 01:26:02,958
Master

842
01:26:04,458 --> 01:26:07,125
That guy told Miura you're at the cotton mill

843
01:26:07,208 --> 01:26:08,667
Don't go back, ok?

844
01:26:09,667 --> 01:26:12,000
l gotta go. Remember, don't go back

845
01:26:39,375 --> 01:26:49,500
Scram! Hurry up!

846
01:26:51,250 --> 01:26:52,458

847
01:26:54,250 --> 01:26:56,042

848
01:26:57,750 --> 01:26:59,333
Don't say a word

849
01:27:02,167 --> 01:27:03,708
You, come here

850
01:27:06,417 --> 01:27:07,875
Where's Ip Man?

851
01:27:08,667 --> 01:27:10,583
Tell me!

852
01:27:11,667 --> 01:27:13,167
I'm asking you!

853
01:27:13,458 --> 01:27:14,917
Hang in there. I'll figure out something

854
01:27:16,292 --> 01:27:16,958
Speak!

855
01:27:17,125 --> 01:27:19,042
Speak! Speak up...

856
01:27:19,125 --> 01:27:22,125
I'm here! I'm Ip Man...

857
01:27:22,792 --> 01:27:24,333
I'm here... Li!

858
01:27:25,833 --> 01:27:27,208
Wait! Wait!

859
01:27:27,333 --> 01:27:29,083
Please wait!

860
01:27:29,208 --> 01:27:32,458
Li, tell Miura the workers are innocent

861
01:27:33,083 --> 01:27:34,750
Ask Miura to release them

862
01:27:34,875 --> 01:27:36,333
l told you not to come back.
876
01:27:36,417 --> 01:27:37,333
Tell him!

863
01:27:37,583 --> 01:27:38,833
Shit!

864
01:27:43,083 --> 01:27:44,000
Sato!

865
01:27:47,750 --> 01:27:51,417
He dares to hit me... Can't we put him to death?

866
01:27:51,500 --> 01:27:52,792
l know what I'm doing

867
01:27:53,583 --> 01:27:54,708
Li Yes

868
01:27:56,458 --> 01:28:00,875
Since the day you resisted the Japanese army

869
01:28:01,042 --> 01:28:04,208
you've already been a dead man

870
01:28:05,167 --> 01:28:10,125
But you're talented, you can be useful to us

871
01:28:10,625 --> 01:28:20,000
So I'll give you one chance to be loyal
to the Japanese Emperor

872
01:28:20,333 --> 01:28:24,167
Teach our army Chinese kung fu

873
01:28:25,208 --> 01:28:28,667
That way, we might still spare your life

874
01:28:30,833 --> 01:28:34,083
He wanted you to teach the Japanese kung fu

875
01:28:36,333 --> 01:28:37,917
l won't teach the Japanese

876
01:28:38,917 --> 01:28:42,750
You wanna see me fight? I'll fight with you

877
01:28:50,667 --> 01:28:54,083
He said he would think about it

878
01:28:54,250 --> 01:28:59,958
He wants to have a duel with General Miura

879
01:29:02,250 --> 01:29:03,417
Take him away!

880
01:29:04,833 --> 01:29:05,708
Take him away!

881
01:29:12,333 --> 01:29:14,875
Quan, take my wife and kid away from Fo Shan

882
01:29:16,708 --> 01:29:20,750
Master lp...

883
01:29:25,708 --> 01:29:28,708
General, you really wanna fight with lp?

884
01:29:29,167 --> 01:29:30,208
Of course

885
01:29:30,875 --> 01:29:32,917
He's an expert

886
01:29:33,458 --> 01:29:34,958
But he doesn't look like...

887
01:29:35,542 --> 01:29:38,333
he wants to teach the Imperial Army

888
01:29:38,792 --> 01:29:42,167
He must have other motives trying to fight with you

889
01:29:42,708 --> 01:29:46,333
General, don't fight with him

890
01:29:47,042 --> 01:29:49,792
Let me simply shoot him dead

891
01:29:54,250 --> 01:30:00,500
He challenges me to a fight

892
01:30:02,333 --> 01:30:04,083
because he thinks he's better than me

893
01:30:06,708 --> 01:30:08,500
lf l refuse to accept the challenge

894
01:30:14,875 --> 01:30:15,708
but shoot him instead...

895
01:30:21,417 --> 01:30:24,083
isn't that the same as admitting defeat?

896
01:30:24,833 --> 01:30:27,333
Fighting with a Chinese

897
01:30:28,167 --> 01:30:31,208
is not just a matter of personal honor for you

898
01:30:31,625 --> 01:30:35,458
lt has to do with the national honor of our Empire

899
01:30:35,542 --> 01:30:37,708
Are you saying l will lose?

900
01:30:38,333 --> 01:30:41,458
l only fear for the worst

901
01:30:41,708 --> 01:30:43,333
l will win for sure

902
01:30:44,250 --> 01:30:46,500
I'll let the whole China know I've won

903
01:30:47,458 --> 01:30:50,083
Yes! l understand!

904
01:31:26,708 --> 01:31:32,667
l want you to teach us instead of killing you

905
01:31:34,000 --> 01:31:35,792
because l appreciate your talent

906
01:31:35,917 --> 01:31:42,333
But l don't think Chinese kung fu
is better than Japanese

907
01:31:45,375 --> 01:31:48,375
We will fight in front of everybody

908
01:31:49,000 --> 01:31:51,417
That's why we need a fair tournament

909
01:31:53,250 --> 01:31:57,667
You invaded our country and killed our people

910
01:32:01,875 --> 01:32:03,542
Stop being hypocritical

911
01:32:07,458 --> 01:32:08,500
Excuse me

912
01:32:25,500 --> 01:32:27,458
Let go of me! Let me go back! Let go of my mom...

913
01:32:27,583 --> 01:32:30,750
l promised Ip nothing would happen to you

914
01:32:31,333 --> 01:32:32,542
It's too dangerous to go back

915
01:32:39,792 --> 01:32:41,417
I heard the Japanese are fighting the Chinese

916
01:32:41,500 --> 01:32:42,792
Who's fighting? Lp Man

917
01:32:42,875 --> 01:32:44,500
Look, the whole place is sealed up now

918
01:32:51,917 --> 01:32:52,833
In the past...

919
01:32:54,375 --> 01:32:56,375
l wished he could be with me every day

920
01:32:58,375 --> 01:33:00,667
So l always complained about his practice

921
01:33:03,292 --> 01:33:05,417
Every time he had a duel with someone...

922
01:33:06,708 --> 01:33:08,083
l would throw a tantrum

923
01:33:11,250 --> 01:33:14,583
l never truly supported him

924
01:33:15,000 --> 01:33:17,000
doing what he liked

925
01:33:18,458 --> 01:33:19,333
Now...

926
01:33:20,333 --> 01:33:23,417
This could be his last duel

927
01:33:26,583 --> 01:33:29,292
I fear there won't be another chance

928
01:33:30,250 --> 01:33:32,958
Why don't you give me this chance?

929
01:33:33,708 --> 01:33:35,125
Why?

930
01:33:43,542 --> 01:33:44,542
General Miura says...

931
01:33:46,167 --> 01:33:47,958
For the sake of Sino-Japanese cultural exchange

932
01:33:48,667 --> 01:33:51,375
he is having a fair tournament with Master Ip today

933
01:33:52,250 --> 01:33:55,375
to share their knowledge in a friendly manner,

934
01:33:56,250 --> 01:33:57,750
and to bring true peace between the two countries

935
01:33:58,583 --> 01:34:00,792
Fair tournament? ls it possible?

936
01:34:02,875 --> 01:34:05,583
That traitor will surely be killed by the Japanese

937
01:34:05,708 --> 01:34:07,042
That's right

938
01:34:08,208 --> 01:34:09,417
Shut up!

939
01:34:15,542 --> 01:34:16,500
Here comes Master lp!

940
01:34:27,917 --> 01:34:31,833
General Miura talked about a tournament

941
01:34:32,292 --> 01:34:33,958
But l don't give a damn!

942
01:34:34,458 --> 01:34:35,625
Listen up

943
01:34:36,000 --> 01:34:40,083
lf you win

944
01:34:40,708 --> 01:34:43,583
l will kill you

945
01:34:43,708 --> 01:34:44,583
Remember this!

946
01:34:44,667 --> 01:34:45,375
Yes!

947
01:34:48,333 --> 01:34:50,000
You better let Miura win later

948
01:34:50,792 --> 01:34:52,250
Or he won't let you live

949
01:34:54,875 --> 01:34:56,333
It's more important to stay alive

950
01:34:59,833 --> 01:35:01,792
Although martial arts involves armed forces

951
01:35:02,583 --> 01:35:05,542
Chinese martial arts is Confucian in spirit

952
01:35:06,208 --> 01:35:08,833
The virtue of martial arts is benevolence

953
01:35:09,583 --> 01:35:12,792
You Japanese will never understand the principle
of treating other people as you would yourselves

954
01:35:13,792 --> 01:35:15,250
Because you abuse military power

955
01:35:15,375 --> 01:35:17,292
You turned it into violence to oppress others

956
01:35:18,500 --> 01:35:20,542
You don't deserve to learn Chinese martial arts

957
01:38:51,333 --> 01:39:14,292
lp Man! Ip Man!

958
01:41:37,458 --> 01:41:41,792
lp Man refused to be subjugated by the Japanese army...

959
01:41:42,042 --> 01:41:47,375
...and used his fists to call forth
the unity ofthe Chinese people.

960
01:41:51,375 --> 01:41:54,667
Assisted by his good friend Zhou Qingquan,

961
01:41:54,917 --> 01:42:00,250
the wounded Ip Man successfully
fled Fo Shan with his wife and son.

962
01:42:06,125 --> 01:42:09,292
On August 15, 1945

963
01:42:09,875 --> 01:42:13,583
Emperor Hirohito of Japan announced
that Japan would surrender unconditionally.

964
01:42:13,667 --> 01:42:19,292
The Chinese finally won and
ended a war that lasted eight long years.

965
01:42:22,583 --> 01:42:25,917
In 1949, the Grandmaster Ip Man settled in Hong Kong.

966
01:42:26,417 --> 01:42:31,750
He started his first Wing Chun class at
Kowloon Hotel's Staff Association Headquarters

967
01:42:31,917 --> 01:42:35,375
turning a new leaf in his life.

968
01:42:35,833 --> 01:42:38,917
In 1967, Grandmaster Ip Man started
the Wing Chun Athletic Association to foster...

969
01:42:39,167 --> 01:42:41,625
...the spirit of Wing Chun
with a group of like-minded enthusiasts,

970
01:42:41,750 --> 01:42:46,292
fulfilling the most cherished dream of his later years.

971
01:42:48,417 --> 01:42:53,417
Until now,
renowned branch of Chinese martial arts.

972
01:42:53,833 --> 01:42:59,833
The lineage of Grandmaster Ip Man's disciples has
exceeded 2 million people.

973
01:43:00,583 --> 01:43:06,708
There are lots of talented people among his disciples,

974
01:43:07,542 --> 01:43:17,750
including the most illustrious action star of all,
Bruce Lee.

timestamp parse error

Hi, using this to parse a subtitle file i've uploaded. Here's the error i'm seeing:
Error: expected timestamp at row 2, but received: "00:00:01,249.0999999999999 --> 00:00:01,251.79999999999995"

This seems like a valid timestamp to me. Any help would be appreciated ?

Lookup by timecode?

Perhaps a silly question, perhaps not. Let's find out 😄

This library works exactly as it says, for which my thanks. Right now I'm trying to not only read the file, but also pick out a specific subtitle based on a timecode. Is there anything provided by this library for that? Or will I have to build something myself/find a different library for that part?

I'm building my own player, but it's not based on video so I can't really use those solutions. I'm parsing the subtitle files for "playing" myself, but need a good way to find the proper subtitles at a given timestamp.

In any case, thank you for this library.

Not transpiled `module` entry in `package.json` overrides `main`

Hi, we just hit an issue that might be relevant for everyone

edf0581

The change introduces a new field in package.json which unfortunately overrides the older main entrypoint. The result is that webpack (that is not configured to transpile node_modules) includes code from lib (not transpiled), instead of dist/subtitle.bundle.js

Add parseSettings

A function that should parse VTT settings as an object:

import { parseSettings } from 'subtitle'

parseSettings('line:0 position:20% size:60% align:start')

// should return an object like this:
{
  line: '0',
  position: '20%',
  align: 'start'
}

TypeError: Cannot read property 'match' of undefined

when I tried to rung

var Subtitle = require('subtitle');
 
var captions = new Subtitle();
 
captions.parse('1.srt');
 
console.log(captions.getSubtitles());

i got

TypeError: Cannot read property 'match' of undefined
    at Function.Subtitle.toMS (/Users/harryfeng/Downloads/english subtitles/node_modules/subtitle/subtitle.js:153:19)
    at /Users/harryfeng/Downloads/english subtitles/node_modules/subtitle/subtitle.js:81:28
    at Array.forEach (native)
    at Subtitle.parse (/Users/harryfeng/Downloads/english subtitles/node_modules/subtitle/subtitle.js:53:7)
    at Object.<anonymous> (/Users/harryfeng/Downloads/english subtitles/subtitle.js:5:10)
    at Module._compile (module.js:556:32)
    at Object.Module._extensions..js (module.js:565:10)
    at Module.load (module.js:473:32)
    at tryModuleLoad (module.js:432:12)
    at Function.Module._load (module.js:424:3)

crashes on trailing newlines

The module crashes on parsing if the SRT data contains trailing newlines.

/tmp/node_modules/subtitle/subtitle.js:155
  var match = time.match(/^(\d{2}):(\d{2}):(\d{2}),(\d{3})$/);
                   ^
TypeError: Cannot call method 'match' of null
    at Function.Subtitle.toMS (/tmp/node_modules/subtitle/subtitle.js:155:20)
    at /tmp/node_modules/subtitle/subtitle.js:79:28
    at Array.forEach (native)
    at Subtitle.parse (/tmp/node_modules/subtitle/subtitle.js:50:7)
    at Object.<anonymous> (/tmp/sync.js:11:5)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

Easily reproducible with e.g.

1
00:00:04,338 --> 00:00:06,672
WOMBAT: <i> Previously on</i> npm...


[TypeError: Cannot read property 'match' of null] on SRT's with multi-line captions

Running this code the following throws the type error on this file

srt = fs.readFileSync(join(__dirname, subtitlePath), 'utf8');
            try {
                _subtitle = new Subtitle(srt);
            }
            catch (e) {
                console.log(e);
            }

I suspect the issue starts after subtitle 373 of the given srt, where the captions take up multiple lines and whitespace. I tried parse everything before that, and it works fine.

Support single digit timestamps

Following on from #31, I'd like to also support having single digits for minutes, seconds, and milliseconds values rather than only supporting hours. Although the WebVTT spec requires timestamps to include leading and trailing zeroes (e.g. 00:00:00.000), I've seen some tools that do VTT export (most notably Microsoft Teams) not adhere to this (e.g. 0:0:0.0) which unfortunately causes parsing to fail entirely.

It would be nice to be able to gracefully handle files like this rather than failing to parse.

I would be happy to submit a PR to make this change.

.

.

Add support to ES6 modules

I am trying to do:

import { parse } from 'subtitle';

but it doesn't work.

Update: I am doing this inside a project created with "creare-react-app", so I am using webpack and all the whistles.

parseSync doesn't load in browser when built with vite and ESM

Environment:

  • vite 4.3.9
  • Svelte (without SvelteKit) 3.58.0
  • @sveltejs/vite-plugin-svelte 2.4.1

Reproduction:
1.

import { parseSync } from 'subtitle';
const nodes = parseSync(fileContents);
  1. Run app in browser

Actual result:

  • App doesn't load at all
  • Errors on browser error console (see below)

Error logs and stacks:

Uncaught (in promise) ReferenceError: process is not defined
    js _stream_writable.js:57
    __require2 chunk-TFWDKVI3.js:18
    js readable-browser.js:4
    __require2 chunk-TFWDKVI3.js:18
    js index.js:3
    __require2 chunk-TFWDKVI3.js:18
    js index.js:5
    __require2 chunk-TFWDKVI3.js:18
    <anonymous> subtitle.js:15
Uncaught (in promise) ReferenceError: global is not defined
    at node_modules/readable-stream/lib/_stream_readable.js (_stream_readable.js:56:21)
    at __require2 (chunk-TFWDKVI3.js?v=950aa587:18:50)
    at node_modules/readable-stream/readable-browser.js (readable-browser.js:1:28)
    at __require2 (chunk-TFWDKVI3.js?v=950aa587:18:50)
    at node_modules/duplexer2/index.js (index.js:3:14)
    at __require2 (chunk-TFWDKVI3.js?v=950aa587:18:50)
    at node_modules/multipipe/index.js (index.js:5:18)
    at __require2 (chunk-TFWDKVI3.js?v=950aa587:18:50)
    at index.js:15:1

Offending lines:

var asyncWrite = !process.browser && ["v0.10", "v0.9."].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
var import_multipipe = __toESM(require_multipipe());

Add formatSettings

A function that formats a settings object:

import { formatSettings } from 'subtitle'

formatSettings({
  line: '0',
  position: '20%',
  align: 'start'
})

// should return a string like this:
'line:0 position:20% size:60% align:start'

How to make this work?

Can't seem to make it work constantly getting the error "has no method 'replace'"
Any examples would be nice!

[Feature request] Add support for sentences

Hey,

In the context of translation, I'd like to be able to merge my subtitles into complete sentences, then re-split them into individual subtitles after translation.

Thanks !

Parsing WebVTT cue-identifiers fails

I'm dealing with the output of WebVTT files from 3rd party services, who attempt to provide speaker diarization via cue identifiers.

This means we have a WebVTT file that looks like:

Speaker 1
00:02:00.000 --> 00:03:00.000
Hey there

Speaker 2
00:04:00.000 --> 00:05:00.000
Hi

Currently, this fails because we expect to parse a timestamp (instead of a cue id)
https://github.com/gsantiago/subtitle.js/blob/master/src/Parser.ts#L125-L127

How hard do you think adding support for this work be / do you have any pointers to help me get started?

Support WebVTT files

I need to process either SRT or VTT files depending on what is available. If I work on adding support for VTT files (which is superset of SRT) would that be something you would consider merging?

I think just stripping the web VTT header and styling when parsing will be a good start. Then VTT input will be supported with SRT output. A further step might be to keep the additional info in the captions array as well, from where it could then be added back in stringify.

I'll open a PR once I've made some progress over the coming days.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.