怎样把B站下载的众多视频文件一次性转码成mp4
平板下载的B站视频文件快把sd卡撑爆了,想移出来存放,腾空再下载新视频。一找,好家伙,上百个目录,下面还有更多子目录,最新的.blv还好处理,老的.m4s文件不能直接播放,需要转码。按网上教程,用ffmpeg转码,这么多文件,挨个手工操作明显不可行。PowerShell是Windows自带的脚本工具,支持各类文件操作,写个自动脚本完成任务,说干就干。1.下载ffmpeg软件:这是个遵循GPL的共享软件,功能太强悍了,官网还有源码,也有编译好的版本。官网各类版本众多,试了几个,最终选择了静态编译的ffmpeg,好处是不用理会.dll啥的,一个文件都搞定。为方便大家,已上传到百度网盘。链接: https://pan.baidu.com/s/1-X28YHdqUYxP4TFVxxxCWA 提取码: c7iy
我的ffmpeg可执行文件是下载并解压到D:\Download\ffmpeg\bin\目录。
2. 共享平板中文件:要把百余G的文件拷贝出来再慢慢处理,想想都繁琐。幸好华为的M6支持Windows文件共享,可以直接把平板的sd卡共享出来,在Windows中映射到一个盘符,b站下载的文件存放在sd卡的\Android\data\tv.danmaku.bili\download\目录。其它品牌的平板或手机等可安装支持Windows smb共享的第三方软件。
3. 修改Windows代码页:PowerShell中文默认代码页是cp936(GBK),处理汉字不通用可能会有乱码,进Windows控制面板,区域设置里勾选utf8。
4. PowerShell脚本简单说明
寥寥几行就搞定了。使用方法:打开PowerShell蓝窗口,复制脚本并粘贴进去,回车运行。
纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
$bin = "D:\Download\ffmpeg\bin\ffmpeg.exe"
$dirs = "Z:\Android\data\tv.danmaku.bili\download"
ForEach($dir in Get-ChildItem $dirs -Recurse -Filter video.m4s | Split-Path ){
$parent = (get-item $dir).Parent.FullName
$json = $parent + "\entry.json"
$title = (Get-Content $json -Raw | ConvertFrom-Json).title
$mp4 = $parent + "\" + $title + ".mp4"
$video = $dir + "\video.m4s"
$audio = $dir + "\audio.m4s"
& $bin -i $video -i $audio -codec copy $mp4
}
$bin是ffmpeg可执行文件路径
$dirs是b站下载的视频文件目录
上面的两个路径改成自己真实的文件路径
$title是从json提取的视频文件标题,用于转码成功后mp4文件的命名。
5. 运行结果
结束后,搜索出Z:\Android\data\tv.danmaku.bili\download目录下的所有.mp4文件,有重名的改名,把.mp4文件剪切出来,删掉剩下的空目录。
页:
[1]