Чтение определенных метаданных MKV из avconv

Чтение определенных метаданных MKV из avconv

Я хочу извлечь определенный фрагмент метаданных из 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- в данном случае "UK Songs". Я не вижу никакой информации о чтении этих конкретных метаданных и использовании их в качестве переменной вдокументация 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

Вы можете адаптировать этот пример в свой любимый скрипт/оболочку/команду.

Связанный контент