我正在探索一个视频文件以获取一些基本信息。例如,以下使用 show_entries 标志来指定必要的数据。
> ffprobe -v error -show_entries format=size,duration:stream=codec_name,bit_rate video.mp4
Run Code Online (Sandbox Code Playgroud)
我还需要获取 TAG:rotate 条目,但这不起作用,因为分号与 show_entries 标志的语法混合在一起。
> ffprobe -v error -show_entries format=size,duration:stream=codec_name,bit_rate,TAG:rotate output.mp4
No match for section 'rotate'
Failed to set value 'format=size,duration:stream=codec_name,bit_rate,TAG:rotate' for option 'show_entries': Invalid argument
Run Code Online (Sandbox Code Playgroud)
有没有办法修复语法?唯一的其他解决方案是不指定单个条目而只获取所有数据。
我想确定流大小(不是视频大小)并使用以下 ffprobe 命令来完成这项工作
ffprobe -v error -count_packets -select_streams a:0 -show_entries stream=size my_input_file_name
Run Code Online (Sandbox Code Playgroud)
但这不起作用,并且不产生任何输出,任何人都可以指出此命令的问题
几乎是标题,FFprobe 中编码宽度(或编码高度)和宽度(或高度)之间有什么区别,为什么它们有时不同,哪个是正确的?
width=1920
height=1080
coded_width=1920
coded_height=1088
Run Code Online (Sandbox Code Playgroud) 我想从 MP3 文件中提取元数据。这将进入脚本,因此我想从命令行执行此操作。由于我已经安装了 ffmpeg,我想我可以用它来实现这个目的。我在这里找到了以下描述:
使用 ffmpeg 提取 ffmetadata 文件如下:
ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE
Run Code Online (Sandbox Code Playgroud)
我尝试过这样的:
ffmpeg -i InSpace.mp3 -f ffmetadata meta.txt
Run Code Online (Sandbox Code Playgroud)
并发现它确实使用meta.txt所需的数据创建,但也将不同格式的元数据转储到stderr,以及错误消息输出文件为空,没有编码(如果使用,请检查 -ss / -t / -frames 参数)。此外,它还会将此分页提示打印到 stderr:
Stream mapping:
Press [q] to stop, [?] for help
Run Code Online (Sandbox Code Playgroud)
然后等我输入一些东西。
当然,我可以通过将命令编写为来解决这个问题
ffmpeg -i InSpace.mp3 -f ffmetadata meta.txt </dev/null 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
但这看起来很不优雅,而且也意味着真正的错误消息也被丢弃了。
我做错了什么?或者,是否有更好的方法从命令行提取元数据?
更新:
按照gregg评论中的建议,我尝试了:
ffprobe -show_entries 'stream_tags : format_tags' InSpace.mp3
Run Code Online (Sandbox Code Playgroud)
这也在 stderr 上产生了大量文本(包括诸如使用哪个 gcc 版本来创建程序之类的信息),而且还将标签转储到 stdout。当然,我可以再次将 stderr 重定向到 /dev/null,虽然输出格式比 ffmpeg 生成的格式稍微不太方便,但获取 stdout 上的信息比 …