FFmpeg 之利,惠及全球#
引入#
FFmpeg 当之无愧为 21 世纪最伟大的发明之一! 你说什么?你还不知道 FFmpeg 是个什么东西? 那好,现在就让我给你开开眼界。
介绍#
FFmpeg 是一个开源的音视频处理程序,使用 C 语言编写。
在此处可以打开开源项目的地址:单击此处以跳转
在 Github 上有也有存储仓库 单击此处以跳转
特色#
FFmpeg 集成了很多强大的音视频处理功能。学习一些 FFmpeg 的指令,即可实现高度自定义的音视频转换操作。比如:提取音频或视频流、转封装格式、编码格式、调节比特率、调节音频分贝、调节视频分辨率、调节视频帧率…(以及更多功能)
作为一个 C 语言程序,对特定平台编译后,即可实现跨平台使用。
你可能还未见识过 FFmpeg 的各项功能,但你应当知道,FFmpeg 早已融入到你身边的软件中。(你用过 Chrome 吗?)凭借其开源而强大的技术,几乎任何需要音视频处理的操作都离不开他。
你说什么?格式工厂也有这样的功能?不要说我没有警告过你:格式工厂就是一个参数调得很烂的 FFmpeg 外壳,因为他内部使用的技术就是 FFmpeg。
你说什么?FileConverter 也有这样的功能?不要说我没有警告过你:FileConverter 就是一个参数调得很好的 FFmpeg 外壳,因为他内部使用的技术就是 FFmpeg,并且比格式工厂好用。
哇,好厉害!那我能拿他做什么?#
~你可以用他制作 osu! 谱面!~当然,我不是说真的去摆放游戏物件,而是让他处理音视频以供谱面使用。由于谱面要上传到服务器,并且 osu! 服务器对谱面大小有较严格的要求(上限100MB,无论谱面有多长。详情参见 osu! 谱面大小限制),因此必须要对体积很大的视频文件进行压缩处理。
让我们开始吧!#
需要安装 FFmpeg 并学习一些 FFmpeg 的指令。一起来看看吧!首先你有一个体积约为 200MB、时长约为 13 分钟、分辨率为 1920×1080、帧率为 60、包含音频轨道的视频文件。对于 osu! 谱面而言,必须先分离视频与音频轨道,然后最好将视频体积压缩至 50~60MB;音频保留 192kbps 的比特率,体积约为 15~20MB。
需要准备的材料:
- 搭配英伟达显卡的 Windows 电脑。
- 下载好的视频文件。
- FFmpeg 程序。如果你还没有安装 FFmpeg,请参阅 如何安装 FFmpeg
- 你的脑子。
详细步骤:
-
分离出音频轨道。打开视频所在文件夹,右键打开终端,输入以下指令(此处假定视频文件名为
origin.mp4):1ffmpeg -i origin.mp4 -vn -b:a 192k audio.mp3-vn指去除视频轨道。
-b:a 192k指设定音频轨道的比特率为 192Kbps。WARNING
如果音频流比特率本就没有 192kbps(例如某些音频比特率只有 128Kbps),那么需要将数值调低至不高于音频本身的比特率,否则过高的比特率将没有意义。
等待指令执行完毕,稍后将在同一个目录下输出名为 audio.mp3 的文件。
-
分离出视频轨道。事实上,可以将分离视频与编码视频的指令合并到一起,就像上一步输出音频那样,但视频编码的指令较为复杂,所以此处将两者分开,以使过程更清晰。继续在终端输入以下指令:
1ffmpeg -i origin.mp4 -an -c:v copy origin_video.mp4-an指去除音频轨道。
-c:v copy指复制视频轨道。等待指令执行完毕,稍后将在同一个目录下输出名为 origin_video.mp4 的文件。
-
压缩视频。继续在终端输入以下指令:
1ffmpeg -hwaccel cuda -i origin_video.mp4 -vf "scale=1280x720:flags=lanczos,fps=30" -b:v 600k -maxrate 700k -c:v h264_nvenc video.mp4-hwaccel cuda指使用英伟达显卡进行全局硬件渲染加速。
-vf "scale=1280x720:flags=lanczos,fps=30"指使用慢速高质量输出选项缩放视频尺寸为 1280×720,并设置帧率为 30 帧。
-b:v 600k -maxrate 700k指设定视频恒定比特率为 600Kbps,最大 700Kbps。
-c:v h264_nvenc指设定编码器为英伟达专用编码器 h264_nvenc。NOTE
主流的编码器有 H.264、H.265 和 AV1。
其中,H.264 应用最为广泛、兼容性最强、编码速度快,但压缩比率不高;
H.265 是 H.264 的改进版本,大幅提高了压缩比率,但是兼容性较差、编码速度慢;
AV1 是近来新推出的编码器,压缩比率强于 H.265,但兼容性同样较差、编码速度极慢。对于 osu!stable,只能使用 H.264 编码器编码的视频。如果导入了 H.265 或 AV1 的视频,那么游戏在加载视频时会卡死崩溃。
所以,用于 osu! 谱面的视频只能使用 H.264 编码器编码。
等待指令执行完毕,稍后将在同一个目录下输出名为 video.mp4 的文件。
至此,你已借助 FFmpeg 的功能完成了音频与视频的转换!现在,可以将他们拖入游戏窗口进行谱面创作了。
另请参阅:https://github.com/leandromoreira/ffmpeg-libav-tutorial
If this article helped you, please share it with others!
Some information may be outdated




