我计划将 FFMPeg 与 Java 一起使用,以检测特定的编解码器并将其转换为另一个编解码器。使用 FFMpeg 线 -
ffprobe -v quiet -print_format json -show_streams "input.avi"
我可以打印出视频的所有流信息,但这包括视频信息、音频信息、所有元数据、所有标签和其他我不需要的信息。
问题:是否可以启动只返回视频编解码器的 FFMpeg 命令,这样我就不必通过不必要的信息挥手?
我计划将 FFMPeg 与 Java 一起使用,以检测特定的编解码器并将其转换为另一个编解码器。使用 FFMpeg 线 -
ffprobe -v quiet -print_format json -show_streams "input.avi"
我可以打印出视频的所有流信息,但这包括视频信息、音频信息、所有元数据、所有标签和其他我不需要的信息。
问题:是否可以启动只返回视频编解码器的 FFMpeg 命令,这样我就不必通过不必要的信息挥手?
简单地grep字符串怎么样?
ffprobe -v quiet -show_streams -select_streams v input.avi | grep "codec_name"
您还可以cut
输出并读取纯字符串:
ffprobe -v quiet -show_streams -select_streams v output.mpg | grep "codec_name" | cut -d= -f 2
如果您在 Windows 上:
ffprobe -v quiet -show_streams -select_streams v input.avi | find /i "codec_name"
可能有点晚了,这里有一个命令来显示第一个视频流的编解码器名称:
ffprobe -v quiet \
-select_streams v:0 \
-show_entries 'stream=codec_name' \
-print_format 'default=nk=1:nw=1' INFILE
或者,更短的替代方案:
ffprobe -v quiet \
-select_streams v:0 \
-show_entries 'stream=codec_name' \
-of 'csv=p=0' INFILE
这在 Windows/VBScript 上运行良好(是的,需要多个兔子耳朵:
Set objShell = CreateObject("WScript.Shell")
TheCommand = "cmd /c [PathTo]\ffprobe.exe -v quiet -show_streams -select_streams v "" [PathTo]\FileName.avi"" | find /i ""codec_name"""
Set objExec = objShell.Exec(TheCommand)
Do
retCodec = retCodec & objExec.StdOut.ReadLine()
Loop While Not objExec.Stdout.atEndOfStream
WScript.Echo(retCodec)