bash - 使用 ffmpeg 转换文件时跟踪日志文件并处理每一行丢失的数据

标签 bash shell ffmpeg tail

我正在运行一个脚本来按照下面的代码片段跟踪日志文件。我遇到了一个问题,当几行几乎同时写入日志文件时,传递到 $line 的行从一开始就丢失了许多字节。

我可以稍后检查该文件,并看到文件中的有问题的行是完整的,那么为什么它在脚本中不完整。也许是某种缓冲问题?

处理有时可能需要几秒钟才能完成,这会产生影响吗?

#!/bin/bash
tail -F /var/log/mylog.log | while read line
do
   log "$line"
   ffmpeg -i "from.wav" "to.mp3"
done

文件中的整行

"12","","765467657","56753763","test"

记录 $line 的示例

657","56753763","test"

更新 我对代码进行了更多调试,看来导致问题的处理是对用于将 wav 转换为 mp3 的 ffmpeg 的调用。如果我只用 sleep 来代替它,那么问题就会消失。 ffmpeg 会以某种方式影响缓冲区吗?

最佳答案

如果您使用的平台具有相当新的 GNU Coreutils 版本(例如任何相当新的 Linux 发行版),您可以使用 stdbuf强制行缓冲。

stdbuf manpage中的示例高度相关:

 tail -f access.log | stdbuf -oL cut -d ' ' -f1 | uniq

这将立即显示 access.log 中的唯一条目

关于bash - 使用 ffmpeg 转换文件时跟踪日志文件并处理每一行丢失的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22916515/

相关文章:

bash - 如何指定 Bourne shell(不是 sh)

git - 不断提示输入 .ssh/id_rsa 的密码

linux - 如何从 Linux 命令的输出中提取单个单词?

mysql - All or nothing/事务语句与 mysql

c++ - 如何从H264中的ffmpeg读取sei未注册的用户数据?

android - 使用 HTML5 标签播放视频

javascript - 获得一个工作 meteor JS Vagrant 盒子

linux - shell :文件意外结束

linux - 从 csv 文件中提取电子邮件地址

objective-c - 如何在 Objective-C 中使用 FFmpeg 在 macOS 中录制屏幕?