有没有办法在转码前使用ffmpeg来确定文件的编码?

Bil*_*ble 21 ffmpeg video-processing video-encoding

我打算使用ffmpeg来确保上传到我网站的所有视频文件都编码为mp4 h264.

而不是自动处理每个文件,我想通过仅处理那些不是mp4 h264的文件来最小化处理开销.有没有一种简单的方法可以使用ffmpeg或其他命令行实用程序执行此操作?

llo*_*gan 29

使用ffprobe.

示例命令

$ ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 input.mp4
Run Code Online (Sandbox Code Playgroud)

结果

h264
Run Code Online (Sandbox Code Playgroud)

选项说明

  • -v error 除了致命错误之外,省略额外信息.

  • -select_streams v:0仅选择第一个视频流.否则codec_name,将显示文件中的所有其他流,例如音频.

  • -show_entries stream=codec_name仅输出codec_name而不是所有流信息.

  • -of default=nokey=1:noprint_wrappers=1选择默认输出格式样式并省略键和包装器信息.否则,没有这些选项,它将输出:

    [STREAM]
    codec_name=h264
    [/STREAM]
    
    Run Code Online (Sandbox Code Playgroud)

另见


pix*_*tik 23

如果您将输入文件传递给ffmpeg,而没有其他参数,它将为您提供有关视频源的信息:

ffmpeg -i myfile.avi
Run Code Online (Sandbox Code Playgroud)

另一种方法是-identifymplayer 的选项,它可能稍微容易解析.有一个包装器脚本midentify,可以为您提供更好的输出.看这个例子.

  • ffmpeg包中包含命令`ffprobe`,它支持多种输出格式,如xml和json.简化ffmpeg输出的解析 (7认同)

Tim*_*inn 5

另一种方法是使用ffprobeffmpeg附带的工具。以下将提供我可以从ffmpeg工具中找到的最简洁的输出:

ffprobe -hide_banner -stats -i myfile.avi
Run Code Online (Sandbox Code Playgroud)