我想从 MKV 中提取特定的元数据并将其用作转换文件的文件名。
例如,如果我运行avconv -i MyFile.mkv
我得到以下输出
avconv version 9.18-6:9.18-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
built on Mar 16 2015 13:19:10 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, matroska,webm, from 'MyFile.mkv':
Duration: 00:06:49.05, start: 0.000000, bitrate: 9062 kb/s
Chapter #0.0: start 0.000000, end 409.057000
Metadata:
title : UK Songs
Stream #0.0: Video: h264 (High), yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 1k tbn, 59.94 tbc (default)
Metadata:
title : x264 1280x720 Bitrate=7843 kb/s
...
我想要的Metadata -> title
是“英国歌曲”。我看不到有关读取此特定元数据并将其用作变量的任何信息libav 文档
目前,我正在使用以下方法转换文件
avconv -i MyFile.mkv -acodec copy MyFile.ac3"
这给了我一个名为“MyFile.ac3”的文件,而我想要一个名为“UK Songs.ac3”的文件
答案1
这只会输出标题元数据:
echo "$(avconv -i MyFile.mkv | grep '^\s*title\s*:' | sed 's/[[:space:]]*title[[:space:]]*:[[:space:]]//')"
这将转换为您想要的文件名:
avconv -i MyFile.mkv -acodec copy "$(avconv -i MyFile.mkv | grep '^\s*title\s*:' | sed 's/[[:space:]]*title[[:space:]]*:[[:space:]]//').ac3"
至少在我的 OS X 上使用 Bash 时是这样的,但不能 100%确定 sed 在你的 Ubuntu 上是否有显著差异。
答案2
仅凭 即可获得该称号ffprobe
(无需grep
、sed
、awk
等)。我对此非常怀疑avprobe
。
$ ffprobe -v error -show_entries format_tags=title -of default=nw=1:nk=1 in.mkv
UK Songs
您可以将此示例改编成您最喜欢的脚本/shell/命令。