前言
由于自己有了台Pixel 1
,打算把自己喜欢的动漫和电影都通过其转移到Google Photos
上,然后使用Google Photos API
请求访问;但逆天Google Photos
除了其原始APP
的下载和Google Takeout
之外只能访问转码之后的视频,那些内嵌硬字幕/外挂字幕的就无法成功播放;
而如果全部都丢本地手动内嵌软字幕的话,电费和硬盘感觉很难撑住,幸好有Google Colab
!
字体安装
由于手动内嵌字幕是需要使用字体的,所以需要安装合适的字体包。acgrip
的字体文件并未包含最基本的部分,所以你需要将自己本地的所有字体上传至Google Drive
,这样才能使用Google Colab
安装并使用适合的字体。
Colab
安装字体代码:
import os
import shutil
def copy_fonts(root_folder, target_folder):
# 更改文件系统权限,使其可写
#!sudo mount -o remount,rw /
for root, dirs, files in os.walk(root_folder):
for file in files:
if file.lower().endswith(('.ttf', '.ttc', '.otf')):
font_path = os.path.join(root, file)
# 复制字体文件到目标文件夹
shutil.copy(font_path, target_folder)
# 显示安装进度
print(f"已安装字体: {file}")
# 恢复文件系统权限为只读
#!sudo mount -o remount,ro /
# 替换为实际的字体根目录
root_directory = '/content/drive/MyDrive/ownbackup/我的windows字体/Fonts'
target_directory = '/usr/share/fonts/truetype/'
# 复制字体文件
copy_fonts(root_directory, target_directory)
# 更新字体缓存
!fc-cache -vf
视频源下载
由于在colab
上使用原版的libtorrent
不知为何(可能是tracker
?)速度不佳,所以我选择aria2
。而网上的很多都无效了,所以我选择这个版本的脚本。
而在某些情况下,我需要手动选择下载内容,而该脚本使用的内网穿透为CF
的,国内网络连接性较差,而AriaNG
是实时操作反馈,这样在我选择/取消大量文件的时候会对网络有极高的要求,所以连接平台我选择了网页版。 tracker
我是通过AriaNG
进行添加的,勉强能用。
需要注意的是,在下载速度极快的情况下,Colab
的平台上可能会无法正常连接进对应的项目
字幕上传
看个人想法,我是喜欢把字幕上传至和视频同目录的文件夹,所以之后的代码都是以此为基础设置。找的话随便找,网上字幕组多的很,个人推荐几个特效字幕组:拨雪寻春,酷漫404/coolcomic404
Colab
压制
在按上述方式上传并在Colab
上安装好字体,将视频和字幕上传至合适的位置之后,就可以开始进行压制了。由于免费版只有T4
才有GPU
,所以只能选他。
挂载Google Drive
from google.colab import drive
drive.mount('/content/drive')
修改并运行ffmpeg
命令
import os
import subprocess
# 输入文件夹和输出文件夹
input_folder = "/content/drive/MyDrive/ownbackup/1/"
output_folder = "/content/drive/MyDrive/ownbackup/1/output/"
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for filename in os.listdir(input_folder):
if filename.endswith(".mkv"):
# .ass为默认后缀,.sc.ass或.tc.ass都是一个道理
subtitle_file = os.path.splitext(filename)[0] + ".sc.ass"
subtitle_path = os.path.join(input_folder, subtitle_file)
if os.path.exists(subtitle_path):
print(f"Found subtitle file: {subtitle_file}")
output_filename = os.path.join(output_folder, f"{os.path.splitext(filename)[0]}_with_subtitles.mkv")
# 参数可自改
cmd = f'ffmpeg -hwaccel nvdec -y -i "{os.path.join(input_folder, filename)}" -c:v hevc_nvenc -preset fast -vf "ass=\'{subtitle_path}\'" -c:a copy "{output_filename}"'
#os.system(cmd)
# 使用subprocess.run捕获输出
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
# 实时输出ffmpeg的运行情况
for line in process.stdout:
print(line.strip())
else:
print(f"Not Found subtitle file: {subtitle_file}")
你也可以修改为输出在/content
本地目录之后再copy
到云端目录也行。
下载转码后的视频并检查
因为使用的是hevc_nvenc
编码,所以有些播放器可能播放不了,请自行安装支持。
注意事项
- 字体一定一定要全,否则会导致压制视频效果与预期不符。
Colab
的T4 GPU
有使用限制,请不要滥用。- 这是
Colab
压制脚本的下载链接