我正在使用命令从摄像机流复制视频cat /dev/video0 > file.mpeg
这工作得很好,但是我也想将文件分成更小的块...所以我一直在等待按 Ctrl+C..想要自动化所以创建了一个批处理脚本将等待 X 分钟然后停止作业,同时显示进度条。效果很好,但我想再迈出一步。我有一个包含确切时间和文件名的 XML 文件,我有一个解析该文件的单声道程序。
这是问题..我如何以编程方式运行这个 cat 命令。当然我可以执行系统命令。但我想用同一种语言来完成整个应用程序。我可以打开一个文件以二进制方式写入并一次读取 1000 个字节......但是 cat 在做什么?它是否知道以某种方式阅读多少/多快?
答案1
让timeout
杀cat
cat
由于它与和ctrl+配合得很好c,因此以下命令行应该根据问题处理数据并假设要记录 5 秒的播放时间。
timeout 5 cat /dev/video0 > file.mpeg
cat
是一个用于读取/写入数据的简单工具。无法设置数据传输的速度或时间间隔cat
。你必须在外面控制它cat
。但还有许多其他工具。
使用内置功能ffmpeg
也可以使用多媒体工具ffmpeg
。有一个陡峭的学习曲线,但是当你开始使用它时,你会发现它是一个非常强大的工具。说明书上有详细的说明man ffmpeg
但最好通过互联网搜索合适的教程。
我已经测试了以下命令行,将 MTS 文件转换为 mpeg 文件。我还没有在设备上测试过它,但我认为它会起作用。您可能希望使用命令行中的更多选项来控制转换(与默认值不同)。
ffmpeg -t 5 -i /dev/video0 file.mpeg
其中-t 5
表示记录 5 秒。
以下命令行可能是一个重要的改进,
ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4
它将把输入分割成 10 分钟长度的文件。你应该看看文档这里
ffmpeg
版本
在我使用 Lubuntu 18.04.1 LTS 的工作计算机中,有
ffmpeg version 3.4.4-0ubuntu0.18.04.1
3.4.4 版本。这是从 Ubuntu 的存储库安装后得到的结果。其他 Linux 发行版和版本可能有其他版本(较新或较旧)。链接(到https://ffmpeg.org)描述的是4.1版本,该版本中的某些功能可能在旧版本中没有。此版本更先进,但获取和更新错误修复可能更复杂。