如何自动化FFmpeg和Bento4与Bash脚本
在本教程中, 您将学习如何编写运行在Ubuntu上的Bash脚本,并使用开源工具FFmpeg和Bento4编码和打包多个文件到HLS/DASH输出. 您将学习如何直接在内容文件夹上运行脚本,以及如何设置监视文件夹操作. 虽然这是初学者级别的东西, 熟悉FFmpeg和Bento4将有所帮助, 还有一些批处理经验,以及在Linux或Windows的命令行上工作的经验.
您可以下载本文中展示的所有脚本 在这里.
本教程的口号是“不要让完美成为优秀的敌人”,”,, 以各种形式, 是伏尔泰说的吗, 孔子, 莎士比亚, 马克·扎克伯格(“完成比完美好”). 这是我的说法,我知道这里详细介绍的脚本不是最优雅或高度优化的, 特别是图5所示的脚本. 然而, 他们完成工作,应该是相对简单的, 即使是Bash新手, 理解和实施.
为什么Ubuntu?
我大部分时间都花在Windows工作站上,但使用Ubuntu创建本教程,因为Bash脚本比Windows命令行编程更简单、更强大. 我使用Ubuntu是因为它是免费的, 它安装在我办公室的几台电脑上, 在同一台电脑上创建Windows和Ubuntu的双启动也很容易. Ubuntu还有一个易于使用的GUI,简化了将文件从一个驱动器或文件夹移动到另一个驱动器或文件夹的操作,还有一个简单的文本编辑器,非常适合创建Bash脚本.
在这方面,您可以在Linux Bash Shell上运行这些脚本 现在可以在Windows 10上使用, 但让Linux GUI在Windows 10上运行来访问文件和文本编辑器操作似乎颇具挑战性, 所以我没有尝试. 如果你周围有一台旧的工作站, 安装Ubuntu并让它作为编码服务器应该是相对简单的.
要安装
Ubuntu有多个LTS(长期支持)版本. 此时,我将安装版本18.04辆轻坦而不是16辆.04 LTS,因为它更新而且通常更快, 尽管这里的指令应该适用于两个版本. 一定要安装桌面版的Ubuntu, 它包含GUI, 而不是服务器版本, 这不会(尽管您可以稍后添加).
在Windows机器上安装Ubuntu, 你将下载一个可启动版本的Ubuntu到一个USB驱动器上, 从那个驱动器启动计算机, 然后安装Ubuntu. 有许多教程向您展示如何使用,其中包括一个 go2sm.com/ubuntuinstall. 如果您想创建双引导系统,请务必找到包含此内容的教程.
安装Ubuntu之后,你必须安装ffmpeg4.X,你可以学习怎么做 go2sm.com/ffmpeginstall和Bento4,记录在 go2sm.com/ubuntubento4. 这两种情况, 一旦你安装了程序, you can call it from a command line or script from any drive location; you don’t need to include the specific address to the executable.
Ubuntu终端导航基础
虽然你可以通过Ubuntu的GUI文件应用程序来执行大多数与文件相关的繁重工作, 您必须使用键盘命令在终端中导航以执行Bash脚本. 有四个命令你绝对需要知道:
松材线虫病
-显示当前工作目录
ls
-列出当前工作目录中的文件和文件夹
cd 目录
– to change to the listed 目录; capitalization matters
cd ..
-导航到较低的目录
中使用了其中几个命令 图1.
几个额外的功能将有助于加快操作速度. 第一个, 和Windows一样, 按向上和向下箭头键可以切换到之前在当前终端会话中使用过的批处理命令. So, 如果您正在调试批处理文件, you don’t have to type it in each time you want to run it; just press the up arrow until it appears and click Enter.
第二个有用的功能与Tab键有关, 哪个尝试完成您键入的任何命令. 假设你要从根文件夹切换到视频文件夹. 假设只有一个文件夹以大写V开头,如果你输入 cd V
并按Tab键,命令将自动补全到 cd /视频
. 按Enter键导航到该文件夹. 您可以使用相同的过程在Terminal中完成批处理脚本的名称, 节省一些按键并避免错误.
很明显, 还有许多其他有用的终端命令, 您还可以下载一个方便的命令行参考备忘单 go2sm.com/terminalcheats. 在那个URL上有两个参考表格, 但当我检查时,它们是相反的, 所以点击Ubuntu参考下载Linux命令参考(这是你想要的),反之亦然.
您的第一个Bash脚本
让我们避开典型 回声= hello world
第一个Bash脚本,然后直接跳转到一个有用的、与ffmpeg相关的脚本. 情况是这样的. 我在Premiere Pro中创建了一个基于ppt的13个视频教程系列,并以10Mbps的速度导出了720p的文件,因为Adobe Premiere Pro不提供恒定速率因子(CRF)编码. 我想使用CRF编码对这些文件进行重新编码,因为这样可以显著降低数据速率和上传时间,而且没有明显的质量影响.
FFmpeg命令很简单:
输入.Mp4 -c:v libx264 -crf 23 input_crf.mp4
这告诉FFmpeg输入文件,使用x264编解码器将其编码为CRF值23,然后追加 _crf
到输入文件名,以命名输出文件. 64Kbps单声道AAC音频轨道将自动复制过来, 但我也可以配置音频输出. 为每个文件创建带有条目的Windows批处理文件是很简单的, 但是,如果您希望将来对不同的文件执行相同的操作,那么这既耗时又容易出错,而且编辑起来很痛苦. 在Bash中要容易得多. 以下是步骤.
1. 打开终端.
有许多不同的方式打开终端应用程序. 例如,在图1中,我在Ubuntu 18中打开终端.在左侧的收藏夹栏中单击它. 进入Terminal后,我运行一些导航命令,然后创建Bash脚本.
- 第一个命令是
松材线虫病
,显示当前工作目录或我当前所在的目录. - 然后输入lsto列出该目录下的文件和文件夹.
- 要导航到“视频”文件夹并执行这些批处理操作,请键入
cd /视频
(or cd V
按Tab键自动补全).
图1. 码头工作 在Ubuntu 18中.04
2. 创建Bash文件.
要创建Bash脚本,我输入 触摸crf.sh
,它使用该名称创建一个文件. 注意,从技术上讲,您不必使用 .sh
这是Bash文件的分母,但这是常见的做法. 然后我输入 ls
再次列出视频文件夹中的文件, 包括我要转换的视频文件和 crf.sh
我刚刚创建的脚本文件.
3. 创建Bash脚本.
在基本的文本编辑器中创建脚本,因为它不会像文字处理器那样插入任何奇怪的字符. In 图2我开口了 crf.sh
在Ubuntu文本编辑器中单击右键 crf.sh
选择“用文本编辑器打开”. 图2的底部显示了Text Editor应用程序.
- 第1行—所有Bash文件都需要以所谓的shebang或
#!/bin/bash
.这会告诉Ubuntu这是一个Bash脚本. - 第3行—我们为这个Bash文件使用了一个“for循环”,它有两个组件. 首先,确定要处理哪些文件. 第3行显示的命令将这些文件标识为带有 .我将在其中运行脚本的文件夹中设置mp4扩展名.
- 然后在第4行添加“do”,并在第5行输入要在这些文件上运行的FFmpeg命令字符串.
- 的
-i
string identifies the 文件 to be encoded; we add the quotes around the word 文件 and the dollar sign 美元(“文件”)
表示我们正在检索文件夹中的文件列表,而不是简单地使用单词 文件
在脚本中. - 在命令字符串末尾的文件名中执行相同的操作
%.*
增加了从输出文件名中去掉扩展名并在文件名中添加_crf的功能 (" $[文件%.*} _crf”.mp4)
. 如果输入文件是 input文件.mp4
,脚本将输出一个名为 input文件_crf.mp4
. -
完成
第6行结束“for”循环.
图2. 工作在文件和Ubuntu文本编辑器
相关文章
FFmpeg被设计为视频和音频录制的跨平台解决方案, 转换, 以及使用简单的静态命令行进行流式传输. 在命令字符串中使用变量和“for循环”简化了现有脚本的重用,并有助于自动化它们的操作. 虽然你不能在Windows命令窗口中使用这些脚本, 你可以在Windows上使用微软PowerShell,在Linux和Mac上使用Bash. 在本教程中,您将学习如何使用PowerShell和Bash创建和运行这样的脚本.
2023年3月14日
而不是专注于随机的任务, 本教程将带您了解使用最新版本的FFmpeg进行编码的基础知识.
2022年3月27日
任何进行性能或基准测试的人, 请看一下:本文中的六个命令可以帮助处理在任何工作室或编码工具中出现的基本任务.
2019年7月22日
AV1提供与HEVC相同的质量,但数据速率较低. 但就目前而言,进展缓慢. 一段5秒的视频编码耗时23小时46分钟.
9月27日2018
以以前的DIY文章为基础, 本文将引导您完成音频捕获, 用FFmpeg编码和包装, 然后通过您在上一篇文章中设置的Icecast服务器播放
2018年6月15日
FFmpeg可能是免费下载的,但仍然需要付费. Robert Reinhardt解释了为什么这种编码器并不适合每个公司.
2014年1月21日