B站下载的学习视频,用python+sh合并处理,自己mark一下

手机bilibili下载了视频,想要搞到电脑上看,结果发现下载下来的都是文件夹里的一堆片段,仔细一看还是 .blv,脑那样啊! 在虚拟机里边用win的客户端试着下载了一个视频,发现是 .flv,看着好像,结果就是。

blv修改成flv就可以了,它就是flv格式的。遇到的主要为问题就是文件名最好不要有空格,linux下空格文件名处理容易出问题。还有os.chdir()是否一定需要绝对路径没有研究,刚开始写的是相对路径,结果有问题

为了排除问题修改为绝对路径,但是相对路径好像也可以,当然绝对路径可定不会出问题。

#!/usr/bin/env python
# coding=utf-8 import os
import sys
import json
import os.path def get_video_name(d):
''' b站下载的视频都分割成小片段放在文件夹里,第一层文件夹中有entry.json文件,记录了视频名称 '''
if os.path.exists('entry.json'):
with open('entry.json', 'r') as f:
data = json.load(f)
return data['page_data']['part'] def merge_flv(d, video_name, output_path):
try:
os.chdir(list(os.walk(d))[1][0])
os.system("bash ~/Desktop/temp/merge.sh %s %s" % (video_name.replace(' ', '_'), output_path))
os.chdir(os.pardir)
except Exception as e:
print("%s Bash脚本执行失败!\n" % (base_path + '/' + d), e) def get_all_videos(base_path, output_path):
dirs = os.listdir(base_path)
for d in dirs:
try:
os.chdir(base_path + '/' + d)
video_name = get_video_name(d)
merge_flv(base_path + '/' + d, video_name, output_path)
except Exception as e:
print("%s不是文件夹或者无权限进入!\n" % (base_path + '/' + d), e) if __name__ == "__main__":
''' 如果没有在脚本中指定路径,可以在脚本参加中指定,参数1:根目录,参数2:输入路径 '''
base_path = ""
output_path = ""
if not base_path: base_path = sys.argv[1]
if not output_path: output_path = sys.argv[2]
get_all_videos(base_path, output_path)

合并处理用的是linux下的ffmpeg工具,参考的(照抄这里的:http://www.songyawei.cn/content/4015)

#!/bin/bash

# 设定脚本需要传入两个参数,第一个是合并的视频名,第二个是合并的视频存放路径
# 修改后缀blv为flv
rename .blv .flv *.blv &&\ # bash获取当前目录下的所有flv文件
for f in *.flv; do echo "file $f" >> mylist.txt; done # 合并flv文件
ffmpeg -f concat -i mylist.txt -c copy "$1.flv" &&\ # 经合并生成的文件移动到指定的文件夹
mv "$1.flv" $2

最新文章

  1. MySQL数据库自带备份与恢复工具:MySQLdump.exe与mysql.exe
  2. Java Java Java
  3. Html5的DeviceOrientation特性
  4. SqlSever基础 select cast 将一个int类型数据转换为char
  5. PHP 魔术方法 __sleep __wakeup(四)
  6. JS 原型链图形详解
  7. PAT-乙级-1025. 反转链表 (25)
  8. Java线程池ThreadPoolExector的源码分析
  9. nginx重写rewrite的[emerg] unknown directive
  10. luogu4643 [国家集训队]阿狸和桃子的游戏
  11. 20155339 Exp9 Web安全基础
  12. 复杂HTML解析
  13. Python中对象的引用与复制
  14. STEAM 自动安装时提示C++ 安装不了等问题
  15. for,for-each,for-in,for-of,map的比较
  16. STA分析(四) lib model
  17. python生成验证码,文字转换为图片-乾颐堂
  18. 【Vijos】lxhgww的奇思妙想
  19. Cesium随笔(2)加载天地图地图服务【转】
  20. Linux启动与关闭WIndows服务记录

热门文章

  1. Cesium计算三角形面积(十)
  2. KMP字符串 AcWing 831
  3. SVN信息泄露漏洞
  4. 三天吃透Java虚拟机面试八股文
  5. LeetCode-156 上下翻转二叉树
  6. 【C++复习】运算符重载中的特殊运算符
  7. 【python学习】PyQt基础学习以及一个信息论与编码课设实例
  8. 【FPGA学习】MATLAB与FPGA实现FIR滤波器
  9. Tensorflow1.0版本与以前函数不同之处
  10. vscode代码片段