Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
K_O_Carnivist
B站缓存视频提取
提交
80911eaa
B
B站缓存视频提取
项目概览
K_O_Carnivist
/
B站缓存视频提取
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
B站缓存视频提取
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
80911eaa
编写于
9月 22, 2020
作者:
K_O_Carnivist
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Init version
上级
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
65 addition
and
0 deletion
+65
-0
bilimerge.py
bilimerge.py
+65
-0
未找到文件。
bilimerge.py
0 → 100644
浏览文件 @
80911eaa
import
os
import
json
import
re
## 运行前设置ffmpeg的path环境变量
## Define
INPUT_PATH
=
'D:/Videos/danmaku3'
OUTPUT_PATH
=
'D:/Videos/danmaku_out'
## blv改成flv
for
path
,
dir_list
,
file_list
in
os
.
walk
(
INPUT_PATH
):
for
file_name
in
file_list
:
if
os
.
path
.
splitext
(
file_name
)[
-
1
][
1
:]
==
'blv'
:
os
.
rename
(
os
.
path
.
join
(
path
,
file_name
),
os
.
path
.
join
(
path
,
file_name
)[:
-
3
]
+
'flv'
)
## 输出
for
video_path
in
[
f
for
f
in
os
.
scandir
(
INPUT_PATH
)
if
f
.
is_dir
()]:
for
page_path
in
[
f
for
f
in
os
.
scandir
(
video_path
.
path
)
if
f
.
is_dir
()]:
with
open
(
page_path
.
path
+
'/entry.json'
,
'rb'
)
as
f_entry
:
page_entry
=
json
.
load
(
f_entry
)
output_video_path
=
OUTPUT_PATH
+
'/'
+
page_entry
[
'title'
]
os
.
makedirs
(
output_video_path
,
exist_ok
=
True
)
raw_input_path
=
[
f
.
path
for
f
in
os
.
scandir
(
page_path
.
path
)
if
f
.
is_dir
()][
0
]
part_name
=
page_entry
[
'page_data'
][
'part'
]
# 弹幕
with
open
(
page_path
.
path
+
'/danmaku.xml'
,
'rb'
)
as
f_i
,
open
(
output_video_path
+
'/'
+
part_name
+
'.xml'
,
'wb'
)
as
f_o
:
f_o
.
write
(
f_i
.
read
())
# m4s
if
os
.
path
.
exists
(
raw_input_path
+
'/video.m4s'
)
and
os
.
path
.
exists
(
raw_input_path
+
'/audio.m4s'
):
ffmpeg_cmd
=
'ffmpeg '
+
\
'-i
\"
'
+
raw_input_path
+
'/video.m4s
\"
'
+
\
'-i
\"
'
+
raw_input_path
+
'/audio.m4s
\"
'
+
\
'-c:v copy -c:a copy -strict experimental '
+
\
'
\"
'
+
output_video_path
+
'/'
+
part_name
+
'.mp4
\"
'
print
(
ffmpeg_cmd
)
os
.
system
(
ffmpeg_cmd
)
# flv
elif
os
.
path
.
exists
(
raw_input_path
+
'/0.flv'
):
clip_list
=
[
f
.
path
for
f
in
os
.
scandir
(
raw_input_path
)
if
'.flv'
in
f
.
name
]
clip_list
.
sort
(
key
=
lambda
var
:[
int
(
x
)
if
x
.
isdigit
()
else
x
for
x
in
re
.
findall
(
r
'[^0-9]|[0-9]+'
,
var
)])
temp_filename
=
raw_input_path
+
'/tmp_%s.txt'
%
os
.
getpid
()
temp_file
=
open
(
temp_filename
,
'w'
,
encoding
=
'utf-8'
)
for
clip_filename
in
clip_list
:
temp_file
.
write
(
'file
\'
%s
\'\n
'
%
os
.
path
.
split
(
clip_filename
)[
1
])
temp_file
.
close
()
ffmpeg_cmd
=
'ffmpeg '
+
\
'-f concat -safe 0 '
+
\
'-i
\"
'
+
temp_filename
+
'
\"
'
+
\
'-c copy '
+
\
'
\"
'
+
output_video_path
+
'/'
+
part_name
+
'.mp4
\"
'
print
(
ffmpeg_cmd
)
os
.
system
(
ffmpeg_cmd
)
os
.
remove
(
temp_filename
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录