作为一名经常为孩子们录制小型体育比赛视频的家长,经常使用GoPro相机记录比赛。一场比赛下来,会产生大量的视频素材。使用两台相机拍摄冰球比赛大约会产生两小时的视频。将这些视频剪辑成一个精美的最终版本,可以说是非常繁琐的。GoPro有一个名为Quik的应用程序可以提取视频片段,但这个过程太漫长,工作流程也很繁琐。也尝试了一些开源应用程序,包括ShotCut,但似乎没有哪个能让工作变得更轻松。然后发现了FFMPEG库和命令行应用程序ffmpeg.exe。通过使用正确的命令行参数,可以不到一秒钟就提取出一个视频片段。本文简要讨论了为选择片段的起始点和长度而制作的图形用户界面(GUI),以创建批量文件供ffmpeg使用。
编辑高分辨率2K/4K视频的一个问题是文件尺寸巨大,通常每个文件4GB。大多数电脑可以播放这些视频,但快速跳转到特定时间点时会有些卡顿。GoPro相机还会录制一个低分辨率的视频,扩展名为LRV。这实际上是一个MP4视频文件,可以重命名并使用任何视频播放器观看。低分辨率视频用于找到想要的片段,然后使用ffmpeg从高分辨率视频中提取出来。在Windows Forms应用程序中嵌入了Windows Media Player控件,以便控制视频播放。由于ffmpeg为承担了大部分工作,所以不需要太多的代码就能实现这个功能。
下图显示了典型的GoPro文件夹内容,其中突出显示了低分辨率文件。
应用程序的主窗口是一个MDI窗口,如下图所示。目的是能够从两台或更多相机中打开视频,每个视频在单独的表单中打开。
点击“新建提取器”按钮将打开一个新的视频提取表单,如下图所示:
第一步是重命名GoPro LRV文件。这将打开文件打开对话框以选择文件。
然后打开视频以添加低分辨率视频。这将把选定的视频全部添加到列表框中。选择列表框中的视频将在媒体播放器控件中打开,如下图所示:
可以使用默认的媒体播放器按钮和滚动条来暂停/播放和跳过视频。然而,使用键盘会更加高效。可以使用以下按键来控制媒体播放器。右键箭头将视频向前跳过一秒。左箭头将视频向后跳过两秒。空格键用于切换播放和暂停状态。回车键用于标记要提取的片段的开始。
每次按下回车键时,都会创建一个新的片段提取宏,并添加到片段列表框中。如下图所示,已经向列表框中添加了五个片段。注意,文件名已从低分辨率视频GL010232.mp4更改为高分辨率文件GH010232.mp4。使用低分辨率文件是因为它可以加快处理速度。高分辨率视频是将要从文件中提取的内容。可以使用名为“片段时间”的组合框来选择片段的长度。默认值是十秒。
片段宏只是传递给ffmepg.exe应用程序的指令。在这些指令可以执行之前,它们必须保存到批处理文件中。这是通过“保存”按钮完成的。默认文件名是extractClip.bat,保存的默认文件夹是视频文件的源文件夹。这个文件的内容如下图所示。每一行都调用程序ffmeg.exe,并传递片段的起始点、提取片段的文件名、片段的长度和输出文件名。输出文件命名为clipN.mp4,其中N是从1开始的整数,以片段数量结束。