MENU

Kurzgesagt – In a Nutshell

January 14, 2018 • Read: 918 • Video

大自然的搬运工

 

引入

以前在“开眼”上看到过这个画风超可爱的科普视频。当时非常的喜欢,但是开眼上的视频数较少,于是跑到Youtube去翻了翻。发现居然全部都有非机翻的中文字幕,看了很多之后决定直接搬点过来。简单记录下实现步骤。

 

Youtube

第一次考虑到的是在Youtube上直接将视频下载下来,在转码一下放到B站就好了。后来发现一些在线网站下载的视频码率都特别的低。

在线转码下载

onlinevideoconverter: https://www.onlinevideoconverter.com/zh

(第一期就是在那下的,码率略低)

后来几番研究了下,发现还是脚本好用。

视频下载:

YouTube Links: https://greasyfork.org/zh-CN/scripts/5566-youtube-links

这个油猴脚本可以提供Youtube的视频下载,重点是可以下载码率特别高的60帧的1080p视频。唯一一个缺点就是由于Youtube的音频轨、视频轨和字幕都是分离的,这个脚本只能下载无声音的视频。还需要其他的操作。

1.png/

 

音频下载

Youtube Best Video Downloader 2: https://greasyfork.org/zh-CN/scripts/19592-youtube-best-video-downloader-2

这个脚本不仅仅能够下载视频,还是单独下载视频中的音轨、字幕甚至是封面等。但是下载的视频质量并没有上个脚本高,MP3的音频还是蛮不错的,所以我只用它来下载音轨。

2.png/

 

字幕下载

虽然上述脚本是能够下载字幕的,但是我还是更加喜欢使用这个脚本。它下载下来的字幕命名要规范的多,在后期使用起来也更加的方便。

Youtube Auto Subtitle Downloader v15: https://greasyfork.org/zh-CN/scripts/5367-youtube-auto-subtitle-downloader-v15

3.png/

 

略调字幕

不知道什么原因,下载的字幕与1080p的视频有点参差不齐的感觉。漂移的非常大,只好使用PR略微修改下,顺便把音频、视频与字幕都渲染在一起。

4.png/

5.png/

 

对于码率这方面的设置,VBR和CBR是起初弄了很长时间都没弄懂的东西。不过大概知道一点原理就差不多了。

https://www.zhihu.com/question/67212374

6.png/

7.png/

还在某乎上看到了非常易理解的解释(原谅我的愚拙,太高深的看不懂):

作者:孙浩焜

链接:https://www.zhihu.com/question/67212374/answer/254040724

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

如果题主用x264压过一次片的话,想必就会明白三者的区别了。

首先比特率(码率)是什么?我们可以从它的单位Kbps理解,就是每秒钟有多少位(bit)。我们可以直接从比特率和时长算出视频的大小(KB)=比特率(Kbps)*时长(s)/8。

比特率从某种意义上限制了视频的质量,因为视频的大小限制了整个视频的信息量,只有包含更多信息才能使视频显示出来更接近压缩前的视频。于是就有了不同的码率控制模式,通过改进码率分配使得相同大小的视频更加清晰。

一开始用固定比特率(CBR)编码,它用相同的大小来记录相同视频的画面。但后来发现,不同帧所需要的数据并不相同。比如一张单色的画面只需要很少的数据,而一幅真实的影像则需要用高出很多的数据量记录,否则会失真。于是开始用可变比特率(VBR)编码,在需要的地方高码率而不需要的地方用低码率。

再后来,发现编码的过程中很难知道究竟应该怎样正确分配码率,因为给出一个平均码率以后不知道后面画面的复杂程度究竟是怎么样的。于是为了记录整个视频的信息,采用两次编码(2pass、VBR 2次)进行编码,第一次稍快速的编码采集数据,第二次才是真正的编码。

那么,在使用pr时,究竟哪一种比较合适的。我觉得如果码率给的很高的话,使用1次就可以;而在码率不够的情况下,则使用2次更为合适。至于CBR,不在我的考虑范围内。而对于上传b站的视频,1800Kbps的码率通常是不够用的,所以我更推荐VBR 2次。

事实上在x264中,有一种更为优秀的码率控制模式:固定质量模式(CQ、CRF),限制画面在相同质量而进行的编码。但由于pr不支持,我在这里也就不详谈了。

 

既然要发B站的话,就顺便在压一下吧。由于前期码率调整的太高,最后渲染的文件也太大。

8.png/

 

最后,由于Kurzgesagt的官方中文字幕只有繁体中文(貌似后面几集有简体)。为了照顾一下对繁体敏感的小伙伴们,所以就顺手把繁体给在线转成简体了。与由英文翻译到中文不同,繁体到简体是非常直接的,每个字几乎都有所对应的。

http://www.aies.cn/

9.png/

 

结尾

(已经养成了啥事都要记的习惯了)

因为自己特别喜欢Kurzgesagt的科普视频,所以也想搬过来传播一下。之前在B站也看到过类似搬运的,但是貌似都不是很全面,也就是后面更新的也没有搬运过来了。既然自己特别喜欢,就顺便也水下了。也有过想做字幕的想法,但是无奈水平不够。只能目前先搬运一些原先就有官方字幕的视频。

后期会持续更新,将所有Kurzgesagt的视频都搬运过来的。

 

1/14更新

睡了一觉后发现上述办法太慢,效率太低,走了太多的弯路。使用PR混流大材小用。

于是当晚又发现了更好、效率更高的办法。

首先是下载了所有必须的文件之后,我们会有视频、音频与字幕三个文件。

10.png/

在寻找了很久之后,发现ffmpeg。使用ffmpeg将视频与音频流合并,是最基础也是最有用的的办法。

合并音频和视频,复制音频(不需要重新编码)

如果输出容器可以处理(几乎)任何编解码器(如MKV),那么可以简单地复制音频和视频流:

ffmpeg -i video.mp4 -i audio.wav -c copy output.mkv

来自<https://vimsky.com/article/3687.html>

 

更多可参考: https://vimsky.com/article/3687.html

直接合并音频与视频流是最快最有效率的操作。不需要重新编码,也是最简单的操作。

 

当视频与音频合并之后,可以直接使用小丸工具箱压制,顺便把字幕也一起给压制上。从下载到最后上传的时间缩小了一大半。

11.png/

 

除此之外,不喜欢使用ffmpeg命令行的。我还找到一个图形化的国产免费软件:格式工厂。

12.png/

界面也是挺简洁的,起码没有任何的广告之类的。作为一款免费的软件已经很好了。安装时需要注意一下而已。

但对于目前的我来说,还是更加喜欢使用ffmpeg的方法。因为直接复制音频流是不需要重新编码的,几乎就是瞬间就可以完成的。

 

1/15更新

修了一夜仙之后发现上述效率还是太低,怎么能手动混流视频呢?

于是

echo off&setlocal EnableDelayedExpansion

cd %~dp0

::dir

::ffmpeg -version

::echo

::for /f "delims=" %%a in ('dir *.mp3 /b') do (

::    set "yinpin=%%a"

::)

::echo %yinpin%>1.txt

::for /f "delims=" %%b in ('dir *.mp4 /b') do (

::    set "shipin=%%b"

::)

::echo %shipin%>>1.txt

::for /f  "tokens=1-4" %%i in (1.txt) do echo %%i %%j %%k %%d

::set zimu=dir *.srt /B

::set yinpin=dir *.mp3 /B

::set shipin=dir *.mp4 /B

 

::上述为起初失败的尝试

::批量将所有.srt后缀的文件依次改名为zimu01.srt zimu02.srt

set a=1

for /f "delims=" %%i in ('dir /b *.srt') do (

if not "%%~ni"=="%~n0" (

if !a! LSS 10 (ren "%%i" "zimu0!a!.srt") else ren "%%i" "zimu!a!.srt"

set/a a+=1

)

)

::上述批量改名有点小问题,zimu01后会有个小空格,再次修改一下

for /f "delims=" %%x in ('dir /b "zimu01 .srt"') do (

ren "%%x" "zimu01.srt"

)

::修改所有.mp3文件为yinpin.mp3

for /f "delims=" %%o in ('dir /b *.mp3') do (

ren "%%o" "yinpin.mp3"

)

::修改所有.mp4文件为shipin.mp4

for /f "delims=" %%p in ('dir /b *.mp4') do (

ren "%%p" "shipin.mp4"

)

::所有文件名都统一之后批量使用ffmpeg混流

::音频与视频混流

ffmpeg -i yinpin.mp3 -i shipin.mp4 -c copy output.mp4

::将srt外挂字幕转换为ass字幕

ffmpeg -i zimu01.srt zimu01.ass

ffmpeg -i zimu02.srt zimu02.ass

::字幕与视频混流

ffmpeg -i output.mp4 -vf ass=zimu01.ass output01.mp4

ffmpeg -i output.mp4 -vf ass=zimu02.ass output02.mp4

pause

没错,经过了解了几个小时的bat脚本,我捯饬出了一个批量混流的脚本。

前半部分的注释主要是最早的时候我想凭借自己的能力写个for循环,将所有文件名读取为变量,并将变量赋值给ffmpeg。但是他怎么都不认识我的变量。其中还考虑过安装个ubunt子系统写个bash脚本运行。后来因为懒,在百度上找到了一篇批量改名的for循环脚本

http://blog.csdn.net/txz317/article/details/52326041

于是我想到了,既然赋值变量不行,我就直接批量更改为统一的文件名,随后交给ffmpeg处理。

 

2/16更新

没错,在大年初一我发现了更好的东西。之前一直的ffmpeg一直使用cpu进行编码,速度比较慢不说,风扇声音还奇大,温度有所上升。之前因为懒,一直没有在意,忘记了我还有可爱的1060在一旁闲着。于是今天查了查文档资料之类的。发现ffmpeg是支持的NVDIA的NVENC。也就是使用GPU进行编码等操作,实现也非常简单,添加一个参数即可。

-c:v h264_nvenc

此外,ffmpeg是支持cuvid的

-c:v h264_cuvid

使用了GPU的效果就非常不一样了,不但温度低了,速度是成倍的上涨。以后再也不要继续听这cpu的呼啸了。

13.png/ffmpeg的参数与功能还有很多,也很强大。后面会继续尝试学习一些知识。也要尝试做点别的了。

 

其他笔记

简介:

The History and Future of Everything -- Time

Kurzgesagt – In a Nutshell。

简而言之,一款画风清奇的科普人文的短片。

官方字幕

https://www.youtube.com/user/Kurzgesagt/videos?flow=grid&sort=da&view=0

 

压制中英两个字幕:  

ffmpeg -i .\shipin.mp4 -vf ass=zimu01.ass test.mp4

ffmpeg -i test.mp4 -vf ass=zimu02.ass test2.mp4

 

1/15再次更新

捯饬了一上午之后,发现bat脚本不可靠。(其实是我不会写)并且想要加入中英两个字幕的话,就必须要修改ass字幕文件的显示位置。第一时间想到的是使用sed命令去实现。但是又不想装Ubuntu子系统。突然发现桌面上一个拯救我时间的快捷方式。

Git Bash

是的,一直忘了自己安装的了git bash。还要捣腾什么子系统。于是现在又有了个shell版本的脚本。

ls > name

yzimu="grep ^(English name"

zzimu="grep ^(Chinese name"

yinpin="grep mp3$ name"

shipin="grep mp4$ name"

#更换名

mv "$($yzimu)" yzimu.srt

mv "$($zzimu)" zzimu.srt

mv "$($yinpin)" yinpin.mp3

mv "$($shipin)" shipin.mp4

#转换字幕格式

ffmpeg -i yzimu.srt yzimu.ass

ffmpeg -i zzimu.srt zzimu.ass

#为中文字幕调整位置,将中文字幕放英文字幕上方

cp -a zzimu.ass zzimut.ass

cat zzimut.ass | sed 's/10,10,10/30,30,30/g' > zzimu.ass

rm -rf zzimut.ass

#音频与视频混流

ffmpeg -i yinpin.mp3 -i shipin.mp4 -c copy output01.mp4

#先加英文字幕

ffmpeg -i output01.mp4 -vf ass=yzimu.ass youtput.mp4

#再混流中英字幕

ffmpeg -i youtput.mp4 -vf ass=zzimu.ass output.mp4

echo -e "\033[36m 转换完成ヽ(✿゚▽゚)ノ \033[0m"

rm -rf name

mv output01.mp4 生肉.mp4

mv output.mp4 中英字幕.mp4

mv youtput.mp4 英文字幕.mp4

全程都是我一个人写的,重点是比bat批处理简单多了。还实现了挂上两个字幕。而且我还能放到我的树莓派上去运行。大大的减少了所需时间。

 

顺便记点在写脚本是发现的好玩的东西,以后可能会用的上:

echo显示带颜色,需要使用参数-e

格式如下:

echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"

例如:

echo -e "\033[41;37m TonyZhang \033[0m"

其中41的位置代表底色, 37的位置是代表字的颜色

 
 注:

1、字背景颜色和文字颜色之间是英文的“""”

2、文字颜色后面有个m

3、字符串前后可以没有空格,如果有的话,输出也是同样有空格

 
下面看几个例子:

echo -e "\033[30m 黑色字 \033[0m"

echo -e "\033[31m 红色字 \033[0m"

echo -e "\033[32m 绿色字 \033[0m"

echo -e "\033[33m 黄色字 \033[0m"

echo -e "\033[34m 蓝色字 \033[0m"

echo -e "\033[35m 紫色字 \033[0m"

echo -e "\033[36m 天蓝字 \033[0m"

echo -e "\033[37m 白色字 \033[0m"

 

echo -e "\033[40;37m 黑底白字 \033[0m"

echo -e "\033[41;37m 红底白字 \033[0m"

echo -e "\033[42;37m 绿底白字 \033[0m"

echo -e "\033[43;37m 黄底白字 \033[0m"

echo -e "\033[44;37m 蓝底白字 \033[0m"

echo -e "\033[45;37m 紫底白字 \033[0m"

echo -e "\033[46;37m 天蓝底白字 \033[0m"

echo -e "\033[47;30m 白底黑字 \033[0m"



控制选项说明 :
 

\33[0m 关闭所有属性

\33[1m 设置高亮度

\33[4m 下划线

\33[5m 闪烁

\33[7m 反显

\33[8m 消隐

\33[30m -- \33[37m 设置前景色

\33[40m -- \33[47m 设置背景色

\33[nA 光标上移n行

\33[nB 光标下移n行

\33[nC 光标右移n行

\33[nD 光标左移n行

\33[y;xH设置光标位置

\33[2J 清屏

\33[K 清除从光标到行尾的内容

\33[s 保存光标位置

\33[u 恢复光标位置

\33[?25l 隐藏光标

\33[?25h 显示光标

http://blog.51cto.com/onlyzq/546459

 

是时候捞一波关注了: https://space.bilibili.com/22696088/#/  

 

2/16更新

没错,在大年初一我发现了更好的东西。之前一直的ffmpeg一直使用cpu进行编码,速度比较慢不说,风扇声音还奇大,温度有所上升。之前因为懒,一直没有在意,忘记了我还有可爱的1060在一旁闲着。于是今天查了查文档资料之类的。发现ffmpeg是支持的NVDIA的NVENC。也就是使用GPU进行编码等操作,实现也非常简单,添加一个参数即可。

-c:v h264_nvenc

此外,ffmpeg是支持cuvid的

-c:v h264_cuvid

使用了GPU的效果就非常不一样了,不但温度低了,速度是成倍的上涨。以后再也不要继续听这cpu的呼啸了。

14.png/ffmpeg的参数与功能还有很多,也很强大。后面会继续尝试学习一些知识。也要尝试做点别的了。

 

重头戏

前面只能算是一步步摸索的脚印。今天(2018/4/14)更新的才是历史性的重头戏。以前的脚本根本不够懒,根据一个月前我的某个读者给我留的言中的下载工具的建议(为什么一个月前留的现在才更新?因为我懒)。我发现了一个历史性的神器“youtube-dl”。本以为就是个图形化的三流软件,详细了解了之后发现实在是太鸡儿好用了。于是我把以前的脚本稍微重构了下,还缩短的将近20%。包含注释仅38行!

不想看那么多的同学们,只需要跳转到这即可。

必备组件:

FFmpeg https://www.ffmpeg.org/

Youtube-dl https://github.com/rg3/youtube-dl#output-template-examples

如下是废话不多的脚本

echo -e "\033[31m 
小肥羊懒人专用版搬运脚本✧(≖ ◡ ≖✿)
 \033[0m"
echo -n "输入那美妙的地址:"
read url
echo "搬运自Youtube:$url"! > url.txt
#下载中文字幕(繁体)并修改文件名
youtube-dl --proxy socks5://127.0.0.1:1080/ --write-thumbnail --write-sub --sub-lang zh-TW --skip-download $url
ls > name
zzimu="grep vtt$ name"
mv "$($zzimu)" zzimu.vtt
#转换字幕格式
ffmpeg -i zzimu.vtt zzimu.ass
rm -rf zzimu.vtt
rm -rf name
#在下载英文字幕以及视频
youtube-dl --proxy socks5://127.0.0.1:1080/ --write-sub --sub-lang en $url
ls > name
yzimu="grep vtt$ name"
shipin="grep mkv$ name"
mv "$($yzimu)" yzimu.vtt
mv "$($shipin)" output.mkv
#转换字幕格式
ffmpeg -i yzimu.vtt yzimu.ass
rm -rf yzimu.vtt
#为中文字幕调整位置,将中文字幕放英文字幕上方
cp -a zzimu.ass zzimut.ass
cat zzimut.ass | sed 's/10,10,10/40,40,40/g' > zzimu.ass
rm -rf zzimut.ass
#先加英文字幕
ffmpeg -i output.mkv -vf ass=yzimu.ass -c:v h264_nvenc youtput.mkv
#再混流中英字幕
ffmpeg -i youtput.mkv -vf ass=zzimu.ass -c:v h264_nvenc zoutput.mkv
rm -rf name
mv output.mkv 生肉.mkv
mv zoutput.mkv 中英字幕.mkv
mv youtput.mkv 英文字幕.mkv
echo -e "\033[36m 转换完成ヽ(✿゚▽゚)ノ \033[0m"

本文使用知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议许可
转载时请保留出处:《Kurzgesagt – In a Nutshell》https://www.defectink.com/defect/704.html,蟹蟹∠( ᐛ 」∠)_.

Tags: None
Archives QR Code Tip
QR Code for this page
Tipping QR Code
Leave a Comment

已有 7 条评论
  1. emmm@(狂汗)昨晚熬夜搞得有点激动,你的话我都没看清,抱歉啊,熬夜太久了,后面说的话语气好像有点冲。昨晚加班意识不太清楚,以为是要开撕逼了#(看不见)抱歉啊

    1. @Asar没事,倒是感谢提出意见了。
      不过,你硬生生的把我的SMTP干炸了#(喷血)

      “This message was created automatically by mail delivery software.
      A message that you sent could not be delivered to one or more of its recipients. This is a permanent error.”

  2. Asar Asar

    推荐你个网站:https://vcb-s.nmm-hd.org/和nmm-hd.org
    前面是vcb-s的教程,后是nmm-hd论坛,算是中文最专业的论坛了

  3. Asar Asar

    ”CPU 编码,有着好好的 GPU 不用怎么能用 CPU 呢“

    因为现在所有的GPU编码器都是渣渣(比如NVIDIA用的NVENC和Intel那个啥),都是质量不够码率来凑,同码率都是x264占优势。包括Adobe家软件和Vegas自带的编码器都不如X264,有一些插件可以让软件搭桥让X264来编码,质量更好。
    (X264的OpenCL加速基本没有作用)

    传B站,Youtube很多视频下载AVC编码的视频码率应该都不超过B站的限制,可以不2压的,做字幕推荐按照B站的码率限制用x264的2pas_s

  4. Asar Asar

    (小丸工具箱的自动化可以参考小碗工具箱压制生成的脚本,在TEMP目录下可以看到小碗工具箱生成的bat)
    没有大会员高码率权限的话,推荐按照B站给的参数2 pas……s后传B站。
    你这关键词过滤有毛病。。。

    1. @Asar其实这篇文章还是挺有纪念意义的#(害羞)。毕竟是我从使用Pr压制到后面的想一键完成操作的整个历程#(献花),其实最近该文有部分更新的,ffmpeg默认是使用CPU编码,有着好好的GPU不用怎么能用CPU呢。至于为什么没有发嘛……最近成谜于某不可能赢的游戏,几乎所有东西都停更了快一个月了#(中枪)。B站目前还是以搬运为主的,上次竭尽全力试着自己剪了一个同比以前质量超高的GMV,貌似并没有想像中的受欢迎,播放量不到100#(扇耳光)(简而言之的最高播放量到300多的说)。还是感谢提出更好的意见。
      此外,现在仙人这么多的么。如果有喜欢我自己做的视频的话,近期过完年了应该会有点小动作的吧。如果不成谜某2游戏的话#(中刀)

  5. Asar Asar

    推荐用Youtube-dl 下载,比脚本更可靠,而且支持断点续传,默认会遵循系统代理。脚本有的时候文件过大时间时间长了链接可能会失效。格式工厂是个没良心的软件,被FFmpeg钉上耻辱柱很长时间了。
    压制建议别用ffmpeg,现成的GUI小丸工具箱自带的参数蛮好的。ffmpeg压制最好加上-vcodec libx264
    编码器还是推荐小丸工具箱带的x264.小丸工具箱还可以很方便的加上AVS脚本。比如有些游戏视频码率降不下来的时候,可以试试加一个降噪滤镜来轻微降噪,过滤一小小部分视频中的高频信息,体积会更好控制。