更新
This commit is contained in:
parent
db293c8430
commit
ddd13510a8
@ -1,21 +1,66 @@
|
|||||||
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
import os
|
import os
|
||||||
|
import os.path as path
|
||||||
|
import sys
|
||||||
|
|
||||||
|
work_path = sys.path[0]
|
||||||
|
|
||||||
ffmpeg_path = "ffmpeg"
|
ffmpeg_path = "ffmpeg"
|
||||||
|
ffprobe_path = "ffprobe"
|
||||||
|
|
||||||
cmd = f"{ffmpeg_path} -y -loglevel error -f concat -safe 0 -i %s -c copy test.mp4"
|
record_dir = "record"
|
||||||
|
record_path = path.join(work_path, record_dir)
|
||||||
|
|
||||||
tmp_merge_file = "merge.tmp"
|
if not path.exists(record_path):
|
||||||
|
os.mkdir(record_path)
|
||||||
|
|
||||||
|
merge_file = path.join(work_path, "test.mp4")
|
||||||
|
cmd = f"{ffmpeg_path} -y -loglevel error -f concat -safe 0 -i %s -c copy {merge_file}"
|
||||||
|
|
||||||
|
|
||||||
|
def natural_sort_key(s):
|
||||||
|
"""
|
||||||
|
按文件名中的自然数排序
|
||||||
|
"""
|
||||||
|
# 将字符串按照数字和非数字部分分割,返回分割后的子串列表
|
||||||
|
sub_strings = re.split(r'(\d+)', s)
|
||||||
|
# 如果当前子串由数字组成,则将它转换为整数;否则将其替换成空字符串
|
||||||
|
sub_strings = [int(c) if c.isdigit() else '' for c in sub_strings]
|
||||||
|
# 返回子串列表
|
||||||
|
return sub_strings
|
||||||
|
|
||||||
|
file_list = []
|
||||||
|
for item in os.listdir(record_path):
|
||||||
|
p = path.join(record_path, item)
|
||||||
|
if not path.isfile(p) or (not p.endswith(".mp4") and not p.endswith(".rec")):
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
file_list.append(p)
|
||||||
|
|
||||||
|
sorted_file_list = sorted(file_list, key=natural_sort_key)
|
||||||
|
|
||||||
|
tmp_merge_file = path.join(work_path, "merge.tmp")
|
||||||
with open(tmp_merge_file, mode="w", encoding="utf8") as f:
|
with open(tmp_merge_file, mode="w", encoding="utf8") as f:
|
||||||
f.write("file './72439149X00E26C681B09_20240311000015_20240311000030.mp4'\n")
|
for record in sorted_file_list:
|
||||||
# f.write("file ./72439149X00E26C681B09_20240311001015_20240311001030.mp4")
|
f.write(f"file '{record}'\n")
|
||||||
|
|
||||||
proc = subprocess.Popen(
|
proc = subprocess.Popen(
|
||||||
cmd % tmp_merge_file,
|
cmd % tmp_merge_file,
|
||||||
stdin=subprocess.PIPE,
|
stdin=None,
|
||||||
stdout=None,
|
stdout=None,
|
||||||
shell=True
|
shell=True
|
||||||
)
|
)
|
||||||
|
|
||||||
proc.communicate()
|
proc.communicate()
|
||||||
os.remove(tmp_merge_file)
|
os.remove(tmp_merge_file)
|
||||||
|
|
||||||
|
meta_cmd = f"{ffprobe_path} -v error -i {merge_file} -print_format json -show_format -show_streams -pretty > {merge_file}.meta.json"
|
||||||
|
|
||||||
|
proc = subprocess.Popen(
|
||||||
|
meta_cmd,
|
||||||
|
stdin=None,
|
||||||
|
stdout=None,
|
||||||
|
shell=True
|
||||||
|
)
|
||||||
|
proc.communicate()
|
Loading…
Reference in New Issue
Block a user