avconv から特定の MKV メタデータを読み取る

avconv から特定の MKV メタデータを読み取る

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 を使用していますが、sed が Ubuntu で大幅に異なるかどうかは 100% わかりません。

答え2

タイトルはffprobe単独で取得できます ( grep、、sedなどawkは必要ありません)。それができるかどうかは非常に疑わしいですavprobe

$ ffprobe -v error -show_entries format_tags=title -of default=nw=1:nk=1 in.mkv
  UK Songs

この例を、お気に入りのスクリプト/シェル/コマンドに適応させることができます。

関連情報