Research
Recent Trends in Malicious Packages Targeting Discord
The Socket research team breaks down a sampling of malicious packages that download and execute files, among other suspicious behaviors, targeting the popular Discord platform.
Readme
Python Module for manipulating SMPTE timecode. Supports 23.976, 23.98, 24, 25, 29.97, 30, 50, 59.94, 60 frame rates and milliseconds (1000 fps).
This library is a fork of the original PyTimeCode python library. You should not use the two library together (PyTimeCode is not maintained and has known bugs).
The math behind the drop frame calculation is based on the
blog post of David Heidelberger
_ .
.. _blog post of David Heidelberger
: http://www.davidheidelberger.com/blog/?p=29
Simple math operations like, addition, subtraction, multiplication or division with an integer value or with a timecode is possible. Math operations between timecodes with different frame rates are supported. So::
from timecode import Timecode
tc1 = Timecode('29.97', '00:00:00:00')
tc2 = Timecode('24', '00:00:00:10')
tc3 = tc1 + tc2
assert tc3.framerate == '29.97'
assert tc3.frames == 12
assert tc3 == '00:00:00:11'
Creating a Timecode instance with a start timecode of '00:00:00:00' will result a timecode object where the total number of frames is 1. So::
tc4 = Timecode('24', '00:00:00:00')
assert tc4.frames == 1
Use the frame_number
attribute if you want to get a 0 based frame number::
assert tc4.frame_number == 0
Frame rates 29.97 and 59.94 are always drop frame, and all the others are non drop frame.
The timecode library supports rational frame rates passed as a either a string or tuple::
tc5 = Timecode('30000/1001', '00:00:00;00')
assert tc5.framerate == '29.97'
tc6 = Timecode((30000, 1001), '00:00:00;00')
assert tc6.framerate == '29.97'
You may also pass a big "Binary Coded Decimal" integer as start timecode::
tc7 = Timecode('24', 421729315)
assert repr(tc7) == '19:23:14:23'
This is useful for parsing timecodes stored in OpenEXR's and extracted through OpenImageIO for instance.
Timecode also supports passing start timecodes formatted like HH:MM:SS.sss where SS.sss is seconds and fractions of seconds::
tc8 = Timecode(25, '00:00:00.040')
assert tc8.frame_number == 1
You may set any timecode to be represented as fractions of seconds::
tc9 = Timecode(24, '19:23:14:23')
assert repr(tc9) == '19:23:14:23'
tc9.set_fractional(True)
assert repr(tc9) == '19:23:14.958'
Fraction of seconds is useful when working with tools like FFmpeg.
The SMPTE standard limits the timecode with 24 hours. Even though, Timecode instance will show the current timecode inline with the SMPTE standard, it will keep counting the total frames without clipping it.
Please report any bugs to the GitHub
_ page.
.. _GitHub
: https://github.com/eoyilmaz/timecode
Copyright 2014 Joshua Banton and PyTimeCode developers.
00:00:00:00
after 24 hours.Fix: Fixed a huge bug in 29.97 NDF and 59.97 NDF calculations introduced in v1.2.3.
Fix: Fixed Timecode.framerate
when it is given as 23.98
. The
framerate
attribute will not be forced to 24
and it will stay
23.98
.
Update: Timecode.tc_to_frames()
method now accepts Timecode instances
with possibly different frame rates then the instance itself.
Fix: Fixed Timecode.div_frames()
method.
Update: Test coverage has been increased to 100% (yay!)
Fix: Fixed an edge case when two Timecodes are subtracted the resultant Timecode will always have the correct amount of frames. But it is not possible to have a Timecode with negative or zero frames as this is changed in 1.2.3.
Fix: Fixed Timecode.float
property for drop frames.
Fraction
instances for the
framerate
argument.frames=0
will now raise a ValueError. This hopefully
will clarify the usage of the TimeCode as a duration. If there is no
duration, hence the frames=0
, meaning that the number of frames of the
duration that this TimeCode represents is 0, which is meaningless.frames
property
(oh yes it is a property now).CHANGELOG.rst
and setup.py
to be able to properly
package and upload to PyPI.Timecode.parse_timecode
for int inputs.Timecode
now accepts a fractional
bool argument that
forces the timecode to be fractional.Timecode
now accepts a ```force_non_drop_frame`` argument
that forces the timecode to be non-drop frame.NEW: Support for passing a tuple with numerator and denominator when passing rational framerate.
NEW: set_fractional method for setting whether or not to represent a timecode as fractional seconds.
Update: Updated README's with info on new features
FIX: Some merge issues.
Timecode(24, 421729315) -> 19:23:14:23
https://en.wikipedia.org/wiki/SMPTE_timecodestart_seconds
argument
will raise a ValueError now in Timecode.__init__
method.New: Added support for passing rational frame rate. 24000/1001 for 23.97 etc.
New: Added tests for new functionality. Fractional seconds and rational frame rates.
New: added ge and le methods for better comparison between two timecodes.
New: Added support for fractional seconds in the frame field as used in ffmpeg's duration for instance.
Important: When passing fractional second style timecode, the Timecode.frs will return a float representing the fraction of a second. This is a major change for people expecting int values
New: Frame delimiter is now set to ":" for Non Drop Frame, ";" for Drop
Frame and "." for millisecond based time codes.
If Timecode.__init__()
start_timecode is passed a string with the wrong
delimiter it will be converted automatically.
Update: All tests involving Drop Frame and millisecond time codes are now set to use the new delimiter.
New: Timecode.tc_to_string()
method added to present the correctly
formatted time code.
New: Timecode.ms_frame
boolean attribute added.
New: Timecode.__init__()
now supports strings, ints and floats for
the framerate argument.
timecode
.New: Rewritten the whole library from scratch.
New: Most important change is the licencing. There was now license defined in the previous implementation. The library is now licensed under MIT license.
Update: Timecode.init() arguments has been changed, removed the
unnecessary drop_frame
, iter_returns
arguments.
Drop frame can be interpreted from the framerate
argument and
iter_returns
is unnecessary cause any iteration on the object will return
another Timecode
instance.
If you want to get a string representation use Timecode.__str__()
or
str(Timecode)
or Timecode.__repr__()
or \`Timecode\``` or
'%s' % Timecode`` any other thing that will convert it to a string.
If you want to get an integer use Timecode.frames
or
Timecode.frame_count
depending on what you want to get out of it.
So setting the iter_returns
to something and nailing the output was
unnecessary.
Update: Updated the drop frame calculation to a much better one, which is based on to the blog post of David Heidelberger at http://www.davidheidelberger.com/blog/?p=29
New: Added Timecode.__eq__()
so it is now possible to check the
equality of two timecode instances or a timecode and a string or a timecode
and an integer (which will check the total frame count).
Update: Timecode.tc_to_frames()
now needs a timecode as a string
and will return an integer value which is the number of frames in that
timecode.
Update: Timecode.frames_to_tc()
now needs an integer frame count
and returns 4 integers for hours, minutes, seconds and frames.
Update: Timecode.hrs
, Timecode.mins
, Timecode.secs
and
Timecode.frs
attributes are now properties. Because it was so rare to
check the individual hours, minutes, seconds or frame values, their values
are calculated with Timecode.frames_to_tc()
method. But in future they
can still be converted to attributes and their value will be updated each
time the Timecode.frames
attribute is changed (so add a _frames
attribute and make frames
a property with a getter and setter, and update
the hrs, mins, secs and frs in setter etc.).
Update: Removed Timecode.calc_drop_frame()
method. The drop frame
calculation is neatly done inside Timecode.frames_to_tc()
and
Timecode.tc_to_frames()
methods.
Update: Updated Timecode.parse_timecode()
method to a much simpler
algorithm.
Update: Removed Timecode.__return_item__()
method. It is not
necessary to return an item in that way anymore.
Update: Removed Timecode.make_timecode()
method. It was another
unnecessary method, so it is removed. Now using simple python string
templates for string representations.
New: Added timecode.__version__
string, and set the value to
"0.2.0".
Update: Removed Timecode.set_int_framerate()
method. Setting the
framerate will automatically set the Timecode.int_framerate
attribute.
FAQs
SMPTE Time Code Manipulation Library
We found that timecode demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
The Socket research team breaks down a sampling of malicious packages that download and execute files, among other suspicious behaviors, targeting the popular Discord platform.
Security News
Socket CEO Feross Aboukhadijeh joins a16z partners to discuss how modern, sophisticated supply chain attacks require AI-driven defenses and explore the challenges and solutions in leveraging AI for threat detection early in the development life cycle.
Security News
NIST's new AI Risk Management Framework aims to enhance the security and reliability of generative AI systems and address the unique challenges of malicious AI exploits.