我正在使用此SO答案https://stackoverflow.com/a/54818581/80353
中的最后一条命令cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "$1";sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",$1}NR%8==3'|tee cap)
此命令按说明工作。
在终端中,我将一次运行以上命令,然后运行cap $youtube_url
我想修改原始的cap()
函数,以使原始行为保留一个额外的部分
最初,我将原始命令称为
cap $youtube_url
现在我喜欢这样做
cap $youtube_url $relative_or_absolute_path_of_text_or_markdown_file
如何修改原始的cap命令以实现所需的结果?
答案 0 :(得分:1)
考虑到您想在屏幕上看到输出,也想将输出保存到输出文件中,如果是这种情况,请尝试以下操作。
cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "$1";sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",$1}NR%8==3'|tee -a "$2")
以一种非衬里形式使用OR:
cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "$1";\
sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",$1}NR%8==3'\
|tee -a "$2")
请确保在变量中提供了完整的路径,例如-> relative_or_absolute_path_of_text_or_markdown_file="/full/path/output_file.txt"
等,仅作为示例。我无法测试它,因为我的盒子中没有用于vtt文件的机制。
如果您不想在屏幕上打印信息,而只是想将输出保存到输出文件中,那么正如我上面显示的,@ oguz ismail的注释仅使用tee "$2"
而不是tee -a "$2"
。
答案 1 :(得分:0)
谢谢 @KimStacks @ RavinderSingh13 @ Oguz-Ismail ,以便将这些解决方案发布在上方的post和
中我设法通过youtube-dl --skip-download --write-auto-sub $youtube_url
但是,输出格式对于我的目的而言并不理想。我必须逐行删除才能删除时间以及 / n 新行。因此,我想自定义代码语法以符合我的要求。
注意::不确定是否是新查询,所以我现在将其发布在这里:
我已经尝试了之前的post和此处建议的所有步骤,但我仍然无法理解:
如何在下面的代码中插入“ $ youtube_url”?
cap()(cd /tmp;rm -f *.vtt;youtube-dl --skip-download --write-auto-sub "$1";\
sed '1,/^$/d' *.vtt|sed 's/<[^>]*>//g'|awk -F. 'NR%8==1{printf"%s ",$1}NR%8==3'\
|tee -a "$2")
我尝试在'NR%8==1{printf"%s ",$1}NR%8==3'
的两端编辑从0到3到-1的数字,但是没有成功在.vtt文件中获取正确的格式。因此,是否可能具有:
以字幕形式连续打印的字幕文本,而不是以字幕形式打印的每个字幕?
要删除开始时间的打印输出吗?
答案 2 :(得分:0)
对于那些想要用相对路径保存subs文件的人来说,这是一个详细的bash脚本。
结果保存为纯文本,从而节省了时间,换行和其他标记。
#!/bin/bash
# video-cap.sh videoUrl sub.txt
# Download captions only and save in a .vtt file
youtube-dl --skip-download --write-auto-sub "$1";
# Find .vtt files in current directory created within last 3 seconds, limit to 1
vtt=$(find . -cmin -0.05 -name "*.vtt" | head -1)
# Extract the subs and save as plaintext, removing time, new lines and other markup
sed '1,/^$/d' "$vtt" \
| sed 's/<[^>]*>//g' \
| awk -F. 'NR%8==1{$1}NR%8==3' \
| tr '\n' ' ' > "$2"
# Remove the original .vtt subs file
rm -f "$vtt"