我正在尝试使用ffmpeg获取输入视频的大小,下面是我使用的代码,我要做的是首先将结果存储到txt文件中,然后进行一些解析以获取视频的大小:
$ ffmpeg -i TheNorth.mp4
终端显示“必须至少指定一个输出文件” 然后我尝试了这个:
$ ffmpeg -i TheNorth.mp4 result.txt
终端说“无法为'size.txt'找到合适的输出格式”
那么我怎么能得到结果并将其保存到指定的文件?
答案 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 -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,然后再将其发送到管道。