讲俄语的开发人员总是有话要说:分享他们独特的经验和看法。 但是以视频博客的格式,由于录制的高度复杂性,现在只有少数这样做。
在猫之下,他谈到了使用免费软件,Ruby脚本和即兴工具录制和编辑视频的艰难道路。
理论
我首先研究了在英语YouTube视频上录制视频博客的理论。 从俄语语言资料看, 这门课程非常有用(尤其是视频博客模块和有关报告模块的第一个视频框架)。 我还流利地熟悉了专有视频编辑器的流行功能,以便更自觉地选择免费编辑器。
我不敢投资于光线:没有足够的时间来研究光线并寻找最佳选择,而对廉价选择的肤浅研究则谈到了潜在的潜在问题,例如闪烁和不良的色彩再现。 有了日光,我没有什么大的困难,仅用于短片就足够了。
影片编辑器
现有的免费视频编辑工具存在许多已知问题:从UI中不成功的解决方案和冻结(使编辑变成无限)的冻结,到仅在最终渲染之后才出现的内存泄漏,崩溃和意外的瑕疵。
问题很多,选择视频编辑器并研究其错误只是为了学习如何处理基本问题。 最终,他在Pitivi停留,仅仅是因为他花了很多时间进行搜索和实验。
Flatpak的声音
Pitivi支持的安装方法需要Flatpak。 有一段时间我绕过他,因为 我的系统中没有systemd和PulseAudio。
事实证明,很长一段时间以来都不需要 systemd。 好吧,PulseAudio- 我必须安装和配置它才能更轻松地修改Flatpak 。 但是放上PulseAudio会更正确,只是有些乏味,而且尚不清楚是否可以从中发现在现有硬件上录制声音的问题。
安装Pitivi,删除PulseAudio配置,运行:
$ sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo $ sudo flatpak install flathub org.pitivi.Pitivi $ sudo find {/var/lib,~/.local/share}/flatpak/runtime -type f -name '*pulseaudio*.conf' -delete $ flatpak run --device=alsa --branch=stable --arch=x86_64 --command=pitivi org.pitivi.Pitivi
没有声音。 让我们尝试运行一些更简单的示例,例如aplay
:
$ sudo find /var/lib/flatpak/app/org.pitivi.Pitivi/x86_64 -type d -path '*/files/bin' -exec cp `which aplay` {} \; $ flatpak run --device=alsa --branch=stable --arch=x86_64 --command=aplay org.pitivi.Pitivi /dev/urandom ALSA lib dlmisc.c:162:(snd_dlsym_verify) unable to verify version for symbol _snd_pcm_empty_open ALSA lib dlmisc.c:283:(snd1_dlobj_cache_get) symbol _snd_pcm_empty_open is not defined inside [builtin] aplay: main:828: audio open error: No such device or address
Flatpak中包含的alsa-lib
可能是使用--with-versioned
编译的。 一种快速修复是libasound.so
系统之一替换libasound.so
:
$ sudo find /var/lib/flatpak -type f -name libasound.so.2.0.0 -exec cp /usr/lib64/libasound.so.2.0.0 {} \; $ find ~/.local/share/flatpak -type f -name libasound.so.2.0.0 -exec cp /usr/lib64/libasound.so.2.0.0 {} \;
对我来说,这还不够:
$ flatpak run --device=alsa --branch=stable --arch=x86_64 --command=aplay org.pitivi.Pitivi /dev/urandom ALSA lib /var/tmp/portage/media-libs/alsa-lib-1.1.6-r1/work/alsa-lib-1.1.6/src/pcm/pcm_direct.c:1943:(snd1_pcm_direct_parse_open_conf) The field ipc_gid must be a valid group (create group audio) aplay: main:828: audio open error: Invalid argument
需要另一个ALSA配置:
$ sudo find /var/lib/flatpak -type d -name etc -exec cp /etc/asound.conf {} \; $ find ~/.local/share/flatpak -type d -name etc -exec cp /etc/asound.conf {} \;
最后,您可以使用Pitivi。
结果是Pitivi的渲染设置- 容器格式:MP4
- 影片
- 编解码器x264enc
- 进阶的
- 编码通过/类型:常量量化器
- 常数量化器:18
- 比特率:16384 kbit / s
- 速度质量预设:超快
- 心理视觉调整预设:电影
- 音讯
- 自担风险,担心我会使用“从不从代理文件渲染”
- 其他一切都是默认的
其他影响
我使用全屏幕页面的截屏为文本做一些动画效果,并使用reveal.js和animate.css进行布局。 在某些幻灯片的reveal.js中,我添加了过渡音:
<section style="font-size: 5em"> <audio data-autoplay src="/path/to/sound.wav"></audio> #1 </section>
如果文本很大,录制60 FPS的截屏视频很重要。 截屏执行此操作:
就我而言, shared_input_loopback
是shared_input_loopback
配置中的设备。
仍然在ffmpeg
上添加了此片段,用于剪辑之间的过渡 ,仍然很有用。
录像录像
当时有一部魅族MX4手机,我决定在其上使用前置摄像头并使用Open Camera进行录制。 花了一些时间训练自己看摄像机并控制自己在太空中的位置,而又不会犯典型的错误,例如割断头部。 同时,大声说清楚,打手势并至少产生某种面部表情。 但这仅仅是开始。
是什么促使我甚至在录制阶段进行自动视频切片?
- 在编辑时,尤其是在使用“ 波纹移动/编辑”工具时,Pitivi会刹车和出错,这导致需要定期重新启动Pitivi。
- 对我来说,手动剪切视频的过程是最无聊的事情之一。 显然,不可能完全实现自动化(至少在没有明确指出理解所讲内容的必要暂停的情况下),但是至少可以优化此过程。
以下是我为自己设定的未来自行车的要求:
- 使用Android手机录制视频,使用笔记本电脑录制音频。
- 相机对焦控制。
- 能够停止记录以保存或删除最后记录的片段。
- 通过USB从手机下载视频,反复尝试并恢复 ,而不会阻止录制下一个片段的功能。
- 声音同步 。
- 确定声音的存在和抛出暂停。
- 可以快速播放最后录制的视频片段,并且已经暂停了。
在记录阶段为什么要对设备进行如此多的控制? 为什么不连续几个小时开始录制,然后进行编辑呢? 原因有很多:
- 普通的磁盘空间不足。
- 长时间录制时,手机会过热并快速放电。
- 手机在水里导致触摸屏故障。 但是,您需要以某种方式控制焦点。 是的,下次按下会造成设备不必要的振动。
- 由于笔记本电脑的USB端口电源不佳,上传大文件时出现问题。 从理论上讲,可以使用具有附加电源的USB集线器解决此问题。 使用网络太慢。
- 希望快速查看最后记录的碎片以确保没有错误,并在行星转入太阳之前的错误位置之前快速将其重写。
- 希望尽早丢弃明显不好的副本,以免将来浪费时间和磁盘空间。
- 需要同步手机和笔记本电脑录制的长音频。 这可能会导致视频不匹配,因为从笔记本电脑录制或从电话录制时都会弹出音频流的帧(您可能可以通过某种方式解决,但不想冒险并浪费时间进行实验)。 单独同步小片段更容易,然后可能的不同步将不会引起注意。
- 需要处理由于视频大小为4 GiB而导致Open Camera重新开始记录的情况。 您可能需要修改“打开相机”。 如果无法删除或增加对4 GiB的限制,则必须在笔记本电脑上引发一个事件,以注意该位置的录制已重新开始。
记录小片段更容易,并使所有可能的东西实现原始自动化。 Ruby被选为开发自行车的主要语言。 实际上,现在我可能会选择Python,但那时我只是在学习Ruby,而我正在通过如此奇怪的实验为我运行新的语言。
自动视频切片
网络上有关此主题的信息不是很多。 关于研究的斯坦福大学和Adobe后来记得(这并不可怕,我仍然需要一个不太复杂的解决方案)。
切片分为两个阶段:在记录阶段-粗糙,在渲染阶段-更准确,并且具有手动校正过多修剪片段的能力。 使用WebRTC中的VAD粗略实现。 更精确-借助Google Speech(更具体地说-借助对autosub项目的修改,为视频生成字幕)。 我相信将会有更多成功的解决方案,这只是我们设法迅速做到的最好的解决方案。
如果要使用ffmpeg
开发类似的东西,请遵循不要在一次ffmpeg
调用中尝试做太多事情的原则。 制作中间文件并控制每一步,这样您就不必搜索奇怪的非Google错误,例如切割不正确或效果不佳。
我以某种方式开始产生的耻辱 :
$ bin/vlog-recorder \ --project /path/to/project \ --debug true \ --sound-settings ' --device=usb_card --format=dat' # arecord r - (RE)START recording s - STOP and SAVE current clip S - STOP and SAVE current clip, don't use auto trimming d - STOP and DELETE current clip p - PLAY last saved clip f - FOCUS camera on center h - show HELP q / Ctrl+C - QUIT [ stopped ] [ battery: 100% / 36°C ]
我需要arecord
的参数来明确指示设备,以避免由于基于ALSA的dsnoop插件而引起的周期性故障。 您也可以打开日志以控制从手机下载文件的过程: tail -f /path/to/project/log.txt
。
在一个视频中快速渲染以进行预览,您可以执行以下操作:
$ bin/vlog-render \ --project /path/to/project \ --language ru \ --video-filters 'hqdn3d,hflip,curves=psfile=/path/to/curves.acv,vignette' \ --speed 1.3 \ --fps 60 \ --preview true
--video-filters
参数是传递给ffmpeg
的过滤器 。 该视频将在mpv
播放器中自动打开。
您还可以通过编辑出现的/path/to/project/render.conf
文件来交换或丢弃剩余的不必要的重复项,由于识别出的声音可以检测到该文件。 顺便说一下,这个想法不是新的 。 在那里,您可以加快单个片段的速度,并编辑不成功的视频剪辑(如果有)。 下次vlog-render
重新读取render.conf
并应用更改。
要为视频编辑器准备片段,您需要指定--preview false
。 除了output
的片段外,它仍然会将它们合并到一个output.mp4
文件中,因为最初我不确定:
- 我会在pitivi中使用小片段吗
- 或上传一个较长的视频以进行进一步切片(以便您可以将多种效果应用于片段的“组”)。
我主要使用第一个选项。 第二个在一个光线output.mp4
视频中很有用:在那里我只使用了一个output.mp4
。 对于第二个选项, vlog-play-segments
脚本也很有用:使用它,您可以按持续时间的降序快速查看剪辑之间的所有暂停。 这将有助于更准确地render.conf
并节省以后在Pitivi中编辑较长视频的时间。
可以在Pitivi中的每个时间线下载一次生成的小片段:选择所有导入的片段,然后使用拖放操作将其拖动。
手机座
我不想寻找合适的电话架,而我的手已经挠了一下脸,至少可以记录一些东西。 我们拿起一块硬纸板,并切出了我们需要的电话支架:
支架安装在笔记本电脑的显示器上,以最大程度地减少脚本和相机之间的距离。
录音
可接受的声音非常关键 。 旁边有一个博雅BY-M1麦克风。 尽管它被宣传为全向麦克风,但实际上只有将其用作单向麦克风时,才能获得良好的声音。
使麦克风站立起来甚至更加容易:我们拿一瓶即将到来的石榴汁,一卷透明胶带并将此构造函数放在一起:
您也可以在这种设计下放置一条毛巾,以抑制桌子上的部分震动,同时调整高度。
声卡
就我而言,这是华硕Xonar U3。 但是事实证明,它与这种麦克风不兼容:麦克风具有专为电话设计的CTIA插头。 该问题已通过麦克风和耳机的TRS插头中的适配器解决。 而且发现这并不容易:此类适配器的制造商很少写细节。 就我而言,Cablexpert CCA-418W有所帮助。
这张卡的另一个问题是录制时右声道的直流偏移 。 哪个不会干扰,因为 我还是用单声道录音。 对于不允许您设置单声道的软件,我使用ALSA 将正常频道重定向到不良频道。
此卡还担心过热。 您需要将其远离冷却器,否则会减慢速度并以猛烈的声音录制声音。
声音处理
我编辑耳机中的声音(在本例中为Pioneer SE-M390),其音量要比通常听音乐的音量高。 该算法是这样的:
- 使用Pitivi,我分别渲染声音(使用所有相同的ALAC和MP4)。 我通常会创建几个单独的轨道,在Pitivi中选择特定的层,并暂时删除不必要的层。
- 如果接收到的文件立即上传到Audacity,我们将失去对音频流的拉伸/压缩,这可能会导致视频和音频不同步。 不太明显的是,并非所有视频都发生这种情况。 要防止这种情况发生,请执行以下拉伸/压缩:
ffmpeg -async 1 -i input.mp4 output.flac
- 下载Audacity中的所有曲目。 如有必要,添加背景音乐。
- 对于所有曲目,请使用“增益”设置所需的音量。
- 根据此视频中的提示,对带有声音的曲目应用降噪(在我的情况下为两倍),压缩器和均衡的效果。
- 我们用声音均衡并增加音轨的音量。 经典方法之一是再次进行归一化,放大,限制器和归一化,但是使用这种方法我还无法获得所需的声音质量。
我的动作暂时是这样的:首先,我要对整个音轨进行增益调整,以使最响的部分听起来没有过载,然后对单个片段手动应用放大。 更新 :另一种有效的方法是RMS规范化,限制器和规范化规范化。 RMS归一化和限制器设置可以从此处获取 。 不过,这种方法对我没有用,因为 无论如何,我决定使用适合我的内置限制器切换到另一个麦克风(Zoom H1n)(因此,对于新麦克风,我很可能只需要执行Normal Normalize(而不是所有这些操作))。 - 麦克风有时会录制声音,并带有一些类似咔嗒声的缺陷。 可以使用“光谱编辑”多重工具效果将其删除。 通常,有必要使用Ctrl + R将其连续多次应用于所选区域。 更新 :由于使用了新的麦克风,我发现这些缺陷与外部物体有关,很可能是口腔中的杂音和其他外来声音的组合。
- 我们从Audacity导出到FLAC,并将所有内容合并到一个文件中:
ffmpeg -i sound.flac -an -i video.mp4 -c copy output.mkv
- 至少我在不同的音量和设备上测试的第一个视频。
结果
借此机会,我放松了规则的内容,邀请您访问产生的YouTube频道 ,在这里我将分享有关编程和相关学科有效研究的见解。
祝您开发程序和创建视频博客好运!
更新 :本文翻译为他的英语博客。