main
parent c0bf530251
commit 0910c8df70

@ -34,6 +34,22 @@ function humanbytes(B)
end end
end end
function humanbitrate(s)
"""
The function "humanbitrate" takes a string representing a bitrate in the format "a/b" and returns
the bitrate as a float with one decimal place.
:param s: The parameter "s" is a string that represents a fraction in the format "a/b", where "a"
and "b" are numbers
:return: the bitrate as a string.
"""
items = split(s, "/")
a = parse(Float64, items[1])
b = parse(Float64, items[2])
bitrate = @sprintf("%8.1f", (a / b))
return strip(bitrate)
end
function new_name(name) function new_name(name)
matches = Dict( matches = Dict(
"Сек" => r"(.+) Сек.*", "Сек" => r"(.+) Сек.*",
@ -58,7 +74,7 @@ function new_name(name)
end end
function valid_file(filename) function valid_file(filename)
valids = [".mp4", ".webm", ".mpeg"] valids = [".avi", ".mkv", ".mp4", ".webm", ".mpeg"]
_, ext = splitext(filename) _, ext = splitext(filename)
return ext in valids return ext in valids
end end
@ -74,62 +90,57 @@ function file_info(filename)
"hsize" => humanbytes(info.size), "hsize" => humanbytes(info.size),
"mtime" => info.mtime, "mtime" => info.mtime,
"ctime" => info.ctime, "ctime" => info.ctime,
"htime" => Dates.format(Dates.unix2datetime(info.ctime), "dd.mm.yyyy"), "hmtime" => Dates.format(Dates.unix2datetime(info.mtime), "dd.mm.yyyy"),
"hctime" => Dates.format(Dates.unix2datetime(info.ctime), "dd.mm.yyyy"),
"ext" => ext, "ext" => ext,
"crc"=> Int(crc), "crc"=> Int(crc),
) )
return m return m
end end
# возвращает индекс видео-потока
function get_video_stream(stream)
for i in eachindex(stream)
if stream[i]["codec_type"] == "video"
return i
end
end
return -1
end
# Потоки могут быть перепутаны, поэтму нужно сначала
# определить индекс видео-потока
function file_meta(filename) function file_meta(filename)
cmd = `ffprobe -v quiet -print_format json -show_format -show_streams "$filename"` cmd = `ffprobe -v quiet -print_format json -show_format -show_streams "$filename"`
out = read(cmd, String) out = read(cmd, String)
data = JSON.parse(out) data = JSON.parse(out)
# println(data["format"]["duration"]) n = get_video_stream(data["streams"])
dur = parse(Float64, data["format"]["duration"])
hdur = Dates.unix2datetime(dur)
res = Dict( res = Dict(
"duration" => data["format"]["duration"], "duration" => hdur,
"hduration" => Dates.format((hdur), "HH:MM:SS"),
"width" => data["streams"][n]["width"],
"height" => data["streams"][n]["height"],
"bit_rate" => humanbitrate(data["streams"][n]["avg_frame_rate"]),
"codec" => data["streams"][n]["codec_name"],
# "aspect_ratio" => data["streams"][n]["display_aspect_ratio"],
) )
return res return res
end end
function check_file(filename) function check_file(filename)
# println(filename) # println(filename)
v1 = file_info(filename)
v2 = file_meta(filename) v2 = file_meta(filename)
v1 = file_info(filename)
result = merge!(v1, v2) result = merge!(v1, v2)
# println(info) # println(info)
return result return result
end end
function parallel_execution()
nthreads = Threads.nthreads() # Получаем количество доступных потоков
println("Running parallel execution: $(nthreads)")
results = Vector{Int}(undef, nthreads) # Создаем массив для хранения результатов
# Создаем и запускаем потоки
v = 0
@sync begin
for i in 1:24
Threads.@spawn begin
# Код, который нужно выполнить параллельно
# return i * 2
v += 1
println("Hello from ", Threads.threadid())
end
end
end
println("loop finished: ", v)
# Получаем результаты из потоков
# for i in 1:nthreads
# # v = results[i]
# println("Результат из потока $i: $v")
# end
end
function main() function main()
dir = "d:\\vids\\ero" dir = "d:\\torrent"
@info "Обработка каталога: $dir" @info "Обработка каталога: $dir"
files = readdir(dir, join=true) files = readdir(dir, join=true)
@ -163,6 +174,7 @@ function openDB()
println(s.ext,' ', s.newurl) println(s.ext,' ', s.newurl)
end end
end end
# -------- основная программа -------------- # -------- основная программа --------------
# parallel_execution() # parallel_execution()
# openDB() # openDB()

Loading…
Cancel
Save