将ffmpeg结果重定向到另一个文件

时间:2015-06-22 15:14:06

标签: linux bash ffmpeg

我正在尝试使用ffmpeg获取输入视频的大小,下面是我使用的代码,我要做的是首先将结果存储到txt文件中,然后进行一些解析以获取视频的大小:

$ ffmpeg -i TheNorth.mp4 

终端显示“必须至少指定一个输出文件” 然后我尝试了这个:

$ ffmpeg -i TheNorth.mp4 result.txt

终端说“无法为'size.txt'找到合适的输出格式”

那么我怎么能得到结果并将其保存到指定的文件?

3 个答案:

答案 0 :(得分:6)

您可以使用管道存储输出ffmpeg生成:

ffmpeg -i TheNorth.mp4 2> result.txt

你需要在这里使用2>,因为ffmpeg写入StdErr(而不是StdOut)。

答案 1 :(得分:1)

更好的想法是使用ffprobe

ffprobe -show_format -print_format json TheNorth.mp4

将输出有关视频的JSON格式信息。猜猜它比原始输出更容易解析。要将输出重定向到文件,只使用普通的管道> result.txt,类似于已接受的答案,但没有两个。

答案 2 :(得分:1)

ffprobe

如果您只想获得视频的大小,那么您可以直接使用ffprobe获取该视频和其他信息。这将避免重定向,临时输出文件和其他解析。

$ ffprobe -v error -select_streams v:0 -show_entries stream=height,width -of csv=p=0:s=x input.mkv 
  1280x720

有关更多示例,请参阅FFmpeg Wiki: FFprobe Tips

三通

对于想要编码和捕获结果控制台输出的用户,我建议使用tee。纯重定向的问题在于可能会遗漏重要消息,例如错误消息,失败和提示。

您可以通过包含tee来显示控制台中的输出并将其保存到文件来避免这种情况:

ffmpeg -i input … output |& tee console.txt

ffmpeg输出到stderr而不是更典型的标准输出,因此&被添加到|管道来处理它。这仅适用于Bash 4+。如果您正在使用其他内容,请将|&更改为2>&1,将stderr重定向到stdout,然后再将其发送到管道。