我有一個用戶定義的函式 ( return_times),它接受 json 檔案并回傳兩個類似日期時間的字串。
time_1, time_2= return_times("file.json")
print(time_1, time_2) # outputs: 00:00:11.352 00:01:51.936
通過類似日期時間的字串,我的意思00:00:11.352是適合'%H:%M:%S.%f'格式化的字串。但是,當我嘗試將它們轉換為毫秒時,我得到了負值。
from datetime import datetime
dt_obj_1 = datetime.strptime(time_1, '%H:%M:%S.%f')
start_ms = dt_obj_1.timestamp() * 1000
dt_obj_2 = datetime.strptime(time_2, '%H:%M:%S.%f')
end_ms = dt_obj_2.timestamp() * 1000
print(start_ms, end_ms ) # outputs: -2209019260648.0 -2209019160064.0
如果我成功了,我想使用以下命令修剪視頻:
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
ffmpeg_extract_subclip("long_video.mp4", start_ms, end_ms, targetname="video_trimmed.mp4"), so just delete ` * 1000` part.
請注意,ffmpeg_extract_subclip它t1和t2引數要求以秒為單位,而不是我最初認為的以毫秒為單位。
由于這些負整數,我無法成功運行修剪程序。我在網上搜索了主要討論年、月和日的幾種格式,而不是'%H:%M:%S.%f'.
我可能會忽略什么?
uj5u.com熱心網友回復:
我可能會忽略什么?
time.strptime 檔案
當無法推斷出更準確的值時,用于填充任何缺失資料的默認值為
(1900, 1, 1, 0, 0, 0, 0, 1, -1)。
而紀元的開始是 1970 年。您可能會通過計算您決議的內容和默認 strptime 之間的增量來獲得您想要的內容,如下所示:
import datetime
time1 = "00:00:11.352"
delta = datetime.datetime.strptime(time1, "%H:%M:%S.%f") - datetime.datetime.strptime("", "")
time_s = delta.total_seconds()
print(time_s)
輸出
11.352
uj5u.com熱心網友回復:
您需要將年日期(年、月、日)添加到datetime,否則這將默認為 1900 年 1 月 1 日。
你要做的是:
from datetime import datetime
s = "00:00:11.352"
f = '%H:%M:%S.%f'
datetime.strptime(s, f) # datetime.datetime(1900, 1, 1, 0, 0, 11, 352000)
一種方法是將日期字串附加到您從 return_times
uj5u.com熱心網友回復:
來自https://stackoverflow.com/a/59200108/2681662
1900 年在UNIX 紀元開始之前,即 1970 年,因此時間戳回傳的秒數必須為負數。
該怎么辦?
最好使用time物件而不是datetime物件。
from datetime import time
time_1 = "00:00:11.352"
hours, minutes, seconds = time_1.split(":")
print(time(hour=int(hours), minute=int(minutes), second=int(float(seconds)),
microsecond=int(float(seconds) % 1 * 1000000)))
uj5u.com熱心網友回復:
您可以將時間字串拆分為小時、分鐘、秒和毫秒,通過一些簡單的數學計算,您可以獲得以毫秒為單位的整個時間
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/338585.html
