Jump to content
hurda7

Is TSPlayer still in development?

Recommended Posts

hurda7

I've used it for rough-cutting recordings, and every time it is undercutting.

I.e. I set the start and end to 10:55 and 43:23 and the cut file contains footage from 10:20 to 44:10, or similar.

 

Is there a known issue or was this just not reported and investigated yet?

Share this post


Link to post
Tjod

TSPlayer was primarily developed as testing application for the recording engine. So there is no real development, only if new things are easy to test there it serves as test place

 

And cutting is only possible at certain points in a video. TSPlayer doesn't do any recalculation/re-encoding therefore it is only able to cut at points which have all necessary informations.

For video compression full images are only stored every few seconds. And for the rest of the time only the differences to the last or next image are stored (simplified).

 

So the problem is known, but will not change.

Share this post


Link to post
majstang
On 2016-09-29 at 6:16 PM, Tjod said:

TSPlayer was primarily developed as testing application for the recording engine. So there is no real development, only if new things are easy to test there it serves as test place

That is a shame, cuz the software is freaking brilliant and I prefer it any day of the week instead of the existing big overcomplicated file players. I only have one urgent wish regarding further development of the TSPlayer and it is support for Unicode file names (wont play at all). Today I have to change all .ts recordings with Unicode file name to short name (through script) before playing them in TSPlayer. With such a solution its unclear which recording is playing when it only says 201709~1.TS. I have been asking about this before and do not expect the answer to be any different from what I got then (NO of course). I will of course continue asking once in a while til it some day goes my way;) TSPlayer deserves a better fait since it so good. 

    

Share this post


Link to post
tim copperfield
On 10/9/2017 at 6:26 PM, majstang said:

support for Unicode file names

Maybe if someone bumps this thread enough times it gets done.

 

I was told if you run the app under non-unicode locale matching the filenames, it should work, i.e. using something like http://pooi.moe/Locale-Emulator/ to run it in Japanese or Chinese or etc locale.

 

of course I'm not gonna do that and would rather the software got recompiled as unicode app (it is 2017 after all), but asking them to do that is a bit of a tall order considering it was probably never written with unicode support in mind.

Share this post


Link to post
majstang
3 hours ago, hackbart said:

I wonder how other solutions deal with this, because it is surprisingly the only problem i found while playing with com skip.

I do use this function to deal with the lead time of previous show and trail time of the next show issue. It trims em off from the .vprj quite nicely prior to editor loading. Written in autohotkey as usual;) Works with vprj (old videoredo format) as input cause it needs the scenemarkers (not present in .edls). Function do output .edl format though.

TrimStartEndOfRecording(ByRef VPrj, TrimStart, TrimEnd, ByRef FilePath, OutputEDL := False, edl_skip_field := False) {
   ; -------------------------------------------------------------------------------------------------------------------
   ; VPrj      -  Content of the project file.
   ; TrimStart -  Time in seconds to trim the start.
   ; TrimEnd   -  Time in seconds to trim the end.
   ; FilePath  -  'ByRef' variable to return the file path.
   ; OutputEDL -  If True, return EDL file format; otherwise, project file format (default).
   ; -------------------------------------------------------------------------------------------------------------------
   PrjCut := ""          ; variable to return
   PrjPath := ""         ; variable to store the file path
   SM := []              ; array to store the SceneMarkers
   CS := []              ; array to store the Cut markers
   TrimStart *= 10000000 ; Prj time format
   TrimEnd *= 10000000   ; Prj time format
   StartCutEnd := ""     ; End time of <Cut> tag for the start
   EndCutStart := ""     ; Start time of <Cut> tag for the end
   ; Split the project file into lines ---------------------------------------------------------------------------------
   Lines := StrSplit(VPrj, "`n", "`r")
   ; Collect the cut and scene markers ---------------------------------------------------------------------------------
   For Each, Line In Lines {
      If (SubStr(Line, 1, 10) = "<Filename>")            ; filename
         PrjPath := SubStr(Line, InStr(Line, ">") + 1)   ; filepath 
      Else If (SubStr(Line, 1, 13) = "<SceneMarker ")    ; scene marker
         SM.Insert(SubStr(Line, InStr(Line, ">") + 1))   ; insert the time part into the array
      Else If (SubStr(Line, 1, 5) = "<Cut>") {           ; cut marker
         Split := InStr(Line, ":")                       ; find the position of ':'
         CS.Insert({Start: SubStr(Line, 6, Split - 6), End: SubStr(Line, Split + 1)})  ; insert start & end parts into the array
      }
   }
   SMC := SM.MaxIndex() ; SceneMarkers count, SM.MaxIndex() will return "" if the array is empty!
   CSC := CS.MaxIndex() ; Cut count
   If (SMC = "") { ; did not find a scene marker, something is wrong !!!
      MsgBox, 16, Wrong file format!, % VPrj
      Return ""
   }
   ; Trim the start --------------------------------------------------------------------------- may need some adjustment
   Loop, % SMC ; start with the first scene marker
      If (SM[A_Index] > TrimStart) ; search for the first scene marker > StartCutEnd
         StartCutEnd := SM[A_Index = 1 ? 1 : A_Index - 1] ; if it's the first marker, put the time into StartCutEnd,
		 ; otherwise use the time of the previous marker.
         ; Note: You might leave StartCutEnd unchanged as well, if A_Index is 1
   Until (StartCutEnd != "") ; if StartCutEnd is set, break the loop
   ; Trim the end ----------------------------------------------------------------------------- may need some adjustment
   TrimEnd := SM[SMC] - TrimEnd ; adjust TrimEnd according to the end of the last scene
   Loop, % (SMC - 1) ; start with the next-to-last scene marker
      If (SM[SMC - A_Index] < TrimEnd) ; search decrementally for the first scene marker < EndCutStart
         EndCutStart := SM[SMC - A_Index + 1] ; put the time of the subsequent scene marker into EndCutStart
   Until (EndCutStart <> "") ; if EndCutStart is set, break the loop
   ; Adjust existing cuts --------------------------------------------------------------------- may need some adjustment
   For Index, Cut In CS {
      ; MsgBox, 0, Cut %Index%, % Start . " - " . End . " - " . Cut.Start . " - " . Cut.End
      If (Cut.End < StartCutEnd) || (Cut.Start > EndCutStart)  ; the tag is completley within the start or end cutting time
         CS[Index] := "SKIP" ; mark the cut to skip further processing
      Else If (Cut.Start < StartCutEnd) && (Cut.End > StartCutEnd) {  ; the tag starts before and ends after the end of start cutting
         StartCutEnd := Cut.End ; set StartCutEnd to the tag's end time ????
         CS[Index] := "SKIP" ; mark the cut to skip further processing
      }
      ELse If (Cut.Start < EndCutStart) && (Cut.End > EndCutStart) { ; ; the tag starts before and ends after start of end cutting
         EndCutStart := Cut.Start ; set EndCutStart to the tag's start time ?????
         CS[Index] := "SKIP" ; mark the cut to skip further processing
      }
      ; MsgBox, 0, Cut %Index%, % IsObject(CS[Index]) ? CS[Index].Start . ":" . CS[Index].End : CS[Index]
   }
   ; Project out -------------------------------------------------------------------------------------------------------
   FilePath := PrjPath  ; return the file path
   If (OutputEDL) { ; the caller wants to get an EDL file format 
      FormatFloat := A_FormatFloat ; save the current float format
      SetFormat, Float, 0.2 ; set the float format to retrieve two decimals; we don't need to set 'FloatFast', because maximum performance isn't important
      ; Output the start cut
      If (StartCutEnd <> "") { ; shouldn't be needed actually
         StartCutEnd /= 10000000.0 ; adjust the time format
         PrjCut .= "0.00 " . StartCutEnd . " " . edl_skip_field . "`r`n" ; the start is always 0.00, user sets edl_skip_field in configuration section >>>>>>>>>>>>>>>>
		 }
      ; Output existing cut tags
      For Each, Cut In CS {
         If (Cut <> "SKIP") { ; SKIP = do not process this tag
            Cut.Start /= 10000000.0 ; ; adjust the time format of the start
            Cut.End /= 10000000.0 ; adjust the time format of the end
            PrjCut .= Cut.Start . " " . Cut.End . " " . edl_skip_field . "`r`n" ; user sets edl_skip_field in configuration section >>>>>>>>>>>>>>>>>>>>>>>>>>>
         }
      }
      ; Output the end Cut
      If (EndCutStart <> "") { ; shouldn't be needed actually
         EndCutStart /= 10000000.0  ; adjust the time format
         EndCutEnd := SM[SMC] / 10000000.0 ; generate the end
         PrjCut .= EndCutStart . " " . EndCutEnd . " " . edl_skip_field . "`r`n" ; user sets edl_skip_field in configuration section >>>>>>>>>>>>>>>>>>>>>>>>>>>
      }
      ; Done!
      SetFormat, Float, % FormatFloat ; restore the float format
      Return PrjCut
   }
   ; VPrj format output   
   CutInserted := False ; <Cut> tags aren't inserted as yet
   For Each, Line In Lines {
      ; If a scene marker is found and <Cut> tags are not inserted yet, insert them
      If !(CutInserted) && (SubStr(Line, 1, 13) = "<SceneMarker ") {
         PrjCut .= StartCutEnd <> "" ? "<Cut>0:" . StartCutEnd . "`r`n" : "" ; cut for the start !!! start is always 0 ("<Cut>0:")
         For Each, Cut In CS
            If (Cut <> "SKIP") ; SKIP = do not process this tag
               PrjCut .= "<Cut>" . Cut.Start . ":" . Cut.End . "`r`n" ; remaining <Cut> tags
         PrjCut .= EndCutStart <> "" ? "<Cut>" . EndCutStart . ":" . SM[SMC] . "`r`n" : "" ; cut for the end !!! end is always the value of the last scene marker (SM[SMC])
         CutInserted := True ; mark cut insertion as done
         CutInserted := True ; mark cut insertion as done
      }
      If (SubStr(Line, 1, 5) <> "<Cut>") ; skip existing <Cut> tags
         PrjCut .= Line . "`r`n"
   }
   Return PrjCut
}
Quote

TrimStart := 110  ;Seconds to trim at start. Trims VPrj from preroll and commercial before actual show. 210 seconds just sets the search range. Both trim commands must be enabled to work. 
TrimEnd   := 180  ;Seconds to trim at end. Trims VPrj from postroll and commercial after actual show. 210 seconds just sets the search range. Won't work if only one trim command is enabled. 

These values works nicely if having DMS timer leadtime set to 1 minute and follow-up time set to 2 minutes.

 

Christian, just a tip if using comskip v.82_00+ with logo detection, see to it you change shrink_logo to 0 (previous default was 5 seconds) in your comskip.ini. Previous default with latest comskip versions lead to a cut mark set 5 seconds before logo disappered...in other words 5 seconds of actual show was removed prior to commercial block.

Quote

shrink_logo=0             ; 2017-10-05 removed 5 ,,,Reduce the duration of the logo with this amount of seconds

  

Will see tomorrow if i have any info stored in the brain regarding your other questions:)

Edited by majstang

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...