フィルタで扱う:Meta | ニコラボ
色空間など:色関係の設定のまとめ

特徴

  • メタデータは直接コマンドに書き込むと、メタデータを書き込んだファイルを読み込む2種類の方法がある
  • メタデータファイルは UTF-8 でエンコードされた INI 形式のテキストファイルで構成される
  • ファイル読み込みの場合にはヘッダに識別番号を付けてコマンドに識別番号を指定する
  • メタデータの指定方法はkey=value
  • チャプターやストリーム毎にメタデータを指定できる
  • 先頭に [CHAPTER] や [STREAM] を宣言してチャプターやストリームを指定する
  • チャプターでタイムベースを指定できる。指定していない場合はミリ秒とする
    • 例:TIMEBASE=num/den
      チャプターの開始と終了の時間を指定する。演算はできないので予め計算しておく(数値は正の整数)
    • 例:START=num, END=num
  • コメントには “;” , “#” が使える
  • 特殊文字(“=”, “;”, “#”, “” と改行)はバックスラッシュ()でエスケープする


メタデータ(チャプター)ファイルの例。

metadataの指定方法。

  • metadatametadata:gならグローバル値
  • metadata:s:vならストリーム部の映像のすべて
  • metadata:s:a:0ならストリーム部の音声の1番目だけ
  • metadata:s:s:1ならストリーム部の字幕の2番目だけ

コマンド例

出力コンテナによっては表示されないメタデータがあるので以下の表を参考にする。

ファイルに追加されているメタデータを出力する。
ffmpeg -i input -f ffmetadata ffmetadata.ini

動画にチャプターを追加する。
ffmpeg -i video.mp4 -i chapter.ini -map_metadata 1 -map_chapters 1 -c copy video_with_chapter.mp4

チャプターをXML形式で出力する。
ffprobe -i input -show_chapters -of xml > chapters.xml

ffprobe の使い方

ファイルに追加されているすべてのメタデータを出力する。
ffmpeg -i input -map_metadata 0 -map_metadata:s:v 0:s:v -map_metadata:s:a 0:s:a -c copy -f ffmetadata ffmetadata.txt

メタデータを直接コマンドで指定する。
ffmpeg -i input -metadata "key"="value" -c copy output

タイトルを付ける。
ffmpeg -i input -metadata "title"="hogehoge" -c copy output

最初の値はグルーバル値に、2番目の値はすべての映像ストリームに、3番目の値は最初の音声ストリームだけに指定する。
ffmpeg -i input -metadata key1=value1 -metadata:s:v key2=value2 -metadata:s:a:0 key3=value3 -c copy out.mkv

メタデータファイルをファイルに追加する。
ffmpeg -i input -i ffmetadata.ini -map_metadata 1 -c copy output

主音声と副音声に MPC-HC などで表示される名前を追加する。
以下のコマンドは1入力に映像と主音声があり、2入力に副音声を入力する場合。2入力は映像と音声付きの動画でも可能。
ffmpeg -i video+audio.mp4 -i sub-audio.m4a -map 0 -map 1:a -metadata:s:a:0 language="jpn" -metadata:s:a:0 title="main" -metadata:s:a:1 language="eng" -metadata:s:a:1 title="dub" -c copy output.mp4

さらに日本語と英語の字幕を追加する。ass 字幕は mp4 コンテナには入れられない。
ffmpeg -i video+audio.mp4 -i sub-audio.m4a -i subtitle-jpn.ass -i subtitle-eng.ass -map 0 -map 1:a -map 2 -map 3 -metadata:s:a:0 language="jpn" -metadata:s:a:0 title="main" -metadata:s:a:1 language="eng" -metadata:s:a:1 title="dub" -metadata:s:s:0 language="jpn" -metadata:s:s:1 language="eng" -c copy -c:s ass output.mkv

mp4 に入れるなら mov_text 字幕を使う。
ffmpeg -i movie.mp4 -i subtitle-jpn.ass -i subtitle-eng.ass -map 0 -map 1 -map 2 -metadata:s:a:0 language="jpn" -metadata:s:a:0 title="main" -metadata:s:s:0 language="jpn" -metadata:s:s:1 language="eng" -c copy -c:s mov_text output.mp4

グローバル値の encoder 名を書き換える。通常なら Lavf58.30.100 のようになる。
ffmpeg -i input -metadata:g encoding_tool=myapp -c copy output.mp4

回転のメタデータをつける。ビューワが対応していれば指定した値で回転する。
ffmpeg -i input -metadata:s:v:0 rotate="90" -c copy output

回転のメタデータをつける。0度にすれば回転しない。
ffmpeg -i input -metadata:s:v:0 rotate="0" -c copy output

Rotation Metadata in Video Files Created by Mobile Devicesより。

スマホと回転メタデータの関係

メタデータの削除。
ffmpeg -i input -map_metadata -1 -c copy output

H.264のコーデックIDをisomからmp42(isom/iso2/avc1/mp41)に変更する。
ffmpeg -i input.mp4 -c copy -brand mp42 output.mp4

公式ドキュメント:FFmpeg Formats Documentation : Metadata

メタデータの対応表

グローバル値(-metadata:g foo=bar)につけて結果を調べているが一部ストリーム値で指定している。

ffmpegのkey設定 mp4 mp3 ts ffmpeg の表示例 mediainfo の表示例
album String album Album
album_artist String album_artist Album/Performer
artist String artist Performer
author String author author
comment String comment Comment
compatible_brands String compatible_brands compatible_brands
composer String composer Composer
copyright String copyright Copyright
date String date Recorded date
description String description Description
disc String disc Part/Position
encoded_by String encoded_by Encoded by
Encoding settings String Encoding settings Encoding settings
encoding_tool String encoder Writing application
episode_id String episode_id episode_id
episode_id String episode_id Part_ID
episode_sort int8 episode_sort part
gapless_playback int8 gapless_playback
genre String genre Genre
grouping String grouping Grouping
hd_video int8 hd_video hd_video
location String location location
lyrics String lyrics USLT
lyrics String lyrics Lyrics
make String make make
media_type int8 media_type
model String model model
network int8 network network
network int8 network TVNetworkName
publisher String publisher Publisher
season_number int8 season_number Season
service_name String service_name Service name
service_provider String service_provider Service provider
show String show show
show String show Movie name
show String show Collection
synopsis String synopsis synopsis
synopsis String synopsis LongDescription
TBPM String TBPM BPM
TIT1 String TIT1 Grouping
TIT3 String TIT3 Track name/More
title String title Movie name
title String title Track name
TKEY String TKEY Initial key
track int8 track Track name/Position

関連記事

libx264やlibx265で使ったエンコードオプションを消す

libx264はエンコードした後のファイルでも消すことができる。
ffmpeg -i 264.mp4 -bsf:v filter_units=remove_types=6 -c copy output.mp4

libx265はエンコードした後のファイルでは消すことができないのでエンコードするときに非表示にする。
ffmpeg -i input -c:v libx265 -x265-params no-info=1 -c:a copy output.mp4

One thought on “ffmpeg でメタデータを加える”

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)