数据集介绍
HD_VG_130M是文生视频常用数据集,其视频来源于油管,可通过该谷歌云盘链接下载官方文件,如下所示,其中metafiles中包含20个json文件,请先将其全部下载到本地,假设保存地址为"E:/HD_VG_130M_Dataset/"
。
json文件格式如下所示,包含视频对应的网址和切片的时间段信息,以及对应切片的caption
数据集切片
注意:建议能够全局使用ffmpeg
命令,且有 VPN
官方给出的json链接中包含了视频的网址,但需要用户提前将所有视频下载到文件夹"E:/HD_VG_130M_Dataset/download_videos/"
中,可使用下yt-dlp
载油管视频。接着设置args.workdir等文件夹参数如下所示,运行"cut_videos_hdvg.py"
即可得到切片视频。
def parse_args():
parser = argparse.ArgumentParser(description='youtube video processing')
parser.add_argument('--workdir', default='E:/HD_VG_130M_Dataset/',type=str, help='Working Directory')
parser.add_argument('--metafile', default='hdvg_0.json', type=str, help='youtube video meta')
parser.add_argument('--resultfile', default='cut_part0.jsonl', type=str, help='processed videos')
parser.add_argument('--log', default='log_part0.log', type=str, help='log')
parser.add_argument('--rm_tmp_file', default=True, type=bool, help='Whether to remove tmp hdvila clips')
args = parser.parse_args()
return args
改进1:下一切一
为方便起见,我修改了"cut_videos_hdvg.py"
中的extract_all_clip
函数,使得能够下一个视频切一个视频,修改的部分如下所示
def extract_all_clip(self):
results = []
for video_id, meta in tqdm(self.metas.items()):
print(video_id)
# 这里使用yt-dlp下载youtube视频并保存为mp4格式,路径为'./workdir/download_videos/*.mp4'
video_temp_path = os.path.join(self.workdir, 'download_videos', video_id + '.mp4')
if not os.path.exists(video_temp_path):
video_temp_url = f'https://www.youtube.com/watch?v={video_id}'
cmd_str = f'yt-dlp --merge-output-format mp4 -o \"{video_temp_path}\" {video_temp_url}'
print(cmd_str)
subprocess.run(cmd_str, encoding="utf-8", shell=True)
# 这里读取刚下载的视频,若未下载则记录一下,然后跳过
if not os.path.exists(video_temp_path):
logger.info(f'Video missing: {video_id}')
else:
result = self.extract_clips(video_id, meta)
results.extend(result)
# 这里可以删除刚下载的视频,为方便后期调整纠错,不建议删除
# os.remove(video_temp_path)