フィルタで扱う:Meta | ニコラボ
色空間など:色関係の設定のまとめ
カバーアート:mp4, mp3, flacにカバーアートを付ける
目次
特徴
- メタデータは直接コマンドに書き込むと、メタデータを書き込んだファイルを読み込む2種類の方法がある
- メタデータファイルは UTF-8 でエンコードされた INI 形式のテキストファイルで構成される
- ファイル読み込みの場合にはヘッダに識別番号を付けてコマンドに識別番号を指定する
- メタデータの指定方法はkey=value
- チャプターやストリーム毎にメタデータを指定できる
- 先頭に [CHAPTER] や [STREAM] を宣言してチャプターやストリームを指定する
- チャプターでタイムベースを指定できる。指定していない場合はミリ秒とする
- 例:TIMEBASE=num/den
チャプターの開始と終了の時間を指定する。演算はできないので予め計算しておく(数値は正の整数) - 例:START=num, END=num
- 例:TIMEBASE=num/den
- コメントには “;” , “#” が使える
- 特殊文字(“=”, “;”, “#”, “” と改行)はバックスラッシュ()でエスケープする
チャプターをつくるPythonスクリプト
How to Add Chapters to MP4s with FFmpeg – Kyle Howellsより時間とチャプター名からチャプターをつくるPythonスクリプト。
開始時間のChapters.txtを作成。
0:23:20 Start 0:40:30 First Performance 0:40:56 Break 1:04:44 Second Performance 1:24:45 Crowd Shots 1:27:45 Credits
helper.pyのコード。
以下を実行すると、FFMETADATAFILEが作成される。下のコマンドでは.ini拡張子がついているのでそれを外せばmp4にチャプターを付けられる。
python helper.py
メタデータ(チャプター)ファイルの例。
metadataの指定方法。
- metadata、metadata:gならグローバル値
- metadata:s:vならストリーム部の映像のすべて
- metadata:s:a:0ならストリーム部の音声の1番目だけ
- metadata:s:s:1ならストリーム部の字幕の2番目だけ
2ファイル以上で-metadataでメタデータを追加するには-mapでストリームを選択した順番が-metadataの指定順になる。
コマンド例
出力コンテナによっては表示されないメタデータがあるので以下の表を参考にする。
ファイルに追加されているメタデータを出力する。
ffmpeg -i input -f ffmetadata ffmetadata.ini
メタデータを保持する。適宜エンコーダのパラメータを設定する。
ffmpeg -i input.mp4 -c:v libx264 -c:a copy -map_metadata 0:g -movflags use_metadata_tags -map_metadata 0 output.mp4
動画にチャプターを追加する。もしくはffmetadata.iniに差し替える。
ffmpeg -i video.mp4 -i chapter.ini -map_metadata 1 -map_chapters 1 -c copy video_with_chapter.mp4
逆についているチャプターを削除するには-map_chapters -1 -map_metadata:s -1にする。
ffmpeg -i video.mp4 -map_chapters -1 -map_metadata:s -1 -c copy video_without_chapter.mp4
ffmpeg – How to remove tx3g stream from m4a file – Stack Overflow : web.archive.org
Changed behaviour of -map_metadata : ffmpeg
チャプターをXML形式で出力する。
ffprobe -i input -show_chapters -of xml > chapters.xml
ファイルに追加されているすべてのメタデータを出力する。
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 などで表示される名前を追加する。言語指定はISO 639-2形式の3文字指定。
以下のコマンドは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
回転のメタデータをつける。ビューワが対応していれば指定した値で回転する。-metadata指定の回転は廃止予定に変わっているので-display_rotationを使う。
ffmpeg -i input -metadata:s:v:0 rotate="90" -c copy output.mp4
コンテナが対応していればside_data_listのrotationにメタデータを追加、編集し、再エンコードなしに反時計回りの度数指定で映像を回転できる。主な用途はスマホ、アクションカムなどで撮影した動画、画像の回転補正。
ffmpeg -display_rotation:v:0 90 -i input -c copy output.mp4
-display_hflip、-display_vflipが併用されたときは-display_rotationで回転した後に適用する。hflipは水平方向、vflipは垂直方向に回転する。
ffmpeg -display_rotation:v:0 90 -display_hflip -i input -c copy output.mp4
ffmpeg Documentation : Video Options
エンコードするときにメタデータを見て自動で回転させないには-noautorotateをつける。
ffmpeg -noautorotate -i input -c:a copy output.mp4
ffmpeg – mp4 And Rotation – Remove Flags But Set Rotation – Stack Overflow
Rotation Metadata in Video Files Created by Mobile Devicesより。
H.264のCodec IDをisom (isom/iso2/avc1/mp41)からmp42(isom/iso2/avc1/mp41)に変更する。
ffmpeg -i input.mp4 -c copy -brand mp42 output.mp4
H.265のCodec IDをhev1からhvc1に変更する。
ffmpeg -i input.mp4 -c copy -tag:v hvc1 output.mp4
MP4にはiTunes tagsのメタデータの制限があるので-movflags +use_metadata_tagsをつけると任意のタグをつけられる。
video – How to add new — and non-defined — metadata to an MP4 file? – Super User
MP4に任意のメタデータを追加する。
ffmpeg -i input.mp4 -c copy -metadata xyz="+22.9835+113.3621/" -metadata com.android.version=1 -metadata com.android.manufacturer="Xiaomi" -metadata com.android.model="Mi 10 Pro" -movflags +use_metadata_tags output.mp4
メタデータの削除。
ffmpeg -i input -map_metadata -1 -c copy output
ffmpeg metadata copy (all) – Stack Overflow
handler_nameを消す。
ffmpeg -i input -metadata:s:a:0 handler_name='' -empty_hdlr_name 1 -c copy output
How to stop ffmpeg from adding “handler_name” to metadata – Super User
iPhoneのメタデータ関係。
Convert iPhone videos and keep all metadata? : ffmpeg
公式ドキュメント: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 | ||
language | String | ✔ | ✔ | ✔ | language | Language |
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 |
関連記事
- ffmpegを使ったメタデータの追加・変更 – 脳内メモ++
- id3-ffmpeg.md · GitHub
- FFmpeg Metadata – MultimediaWiki
- video – How to set custom handler_name metadata for subtitle stream using FFMPEG – Stack Overflow
- Adding Meta Data to MP4 Video | Kdenlive
- Retrieving and Saving media metadata using FFmpeg – Stack Overflow
- video – Updating mp4 chapter times and names with ffmpeg? – Super User
- how to save custom data into header in movie file using ffmpeg? – Super User
- Problems with modifying encoder metadata with FFMPEG – Stack Overflow
- Set a subtitle language using ffmpeg – Stack Overflow
- List of ISO 639-2 codes – Wikipedia
- Adding Meta Data to MP4 Video | Kdenlive
- ffmpeg – How to add arbitrary or custom metadata in MP4? – Stack Overflow
- FFmpeg: Public Metadata API
- Technical Note TN2174: Final Cut Pro X – Metadata in MP4
libx264やlibx265で使ったエンコードオプションを消す
libx264はエンコードした後のファイルでも消すことができる。
ffmpeg -i 264.mp4 -bsf:v filter_units=remove_types=6 -c copy output.mp4
FFmpeg Bitstream Filters Documentation : filter_units
-bsf:v filter_units=remove_types=6はH.264形式のclosed captions (EIA-608) を除くことができるが、MPEG-2では-bsf:v filter_units=remove_types=178を使うようだ。
ffmpeg – Removing EIA-608 Closed Captions from H.264 without reencode – Stack Overflow
NALについて。
- H.264 : Advanced video coding for generic audiovisual services
- 猫科研究所 – H.264/AVC(NAL)
- H.264 について(まとめ) 【H.264/Annex B/NAL file format/AVC/rtmp】 – モノトーンの伝説日記
- H.264 – redstrange Wiki*
- Possible Locations for Sequence/Picture Parameter Set(s) for H.264 Stream – Stack Overflow
libx265はエンコードした後のファイルでは消すことができないのでエンコードするときに非表示にする。
ffmpeg -i input -c:v libx265 -x265-params no-info=1 -c:a copy output.mp4
ffmpeg – How to Remove a frame from an HEVC bitstream? – Stack Overflow
libx265でエンコードしたファイルのエンコードオプションではなく、コンソール上に表示されるエンコードオプションを消す。
ffmpeg -i input -c:v libx265 -x265-params log-level=0 -c:a copy output.mp4
FFmpeg loglevel is quiet, but SVT-AV1 encoder still writes : ffmpeg
HDR10+/Dolby Visionのメタデータを消す
ffmpeg -i input.mkv -bsf:v filter_units=remove_types=39 -c copy output.mkv
Dropping HDR10+/Dolby Vision metadata : ffmpeg
Atomsのメタデータを消す
Dolby TrueHDを保持したままAtomsのメタデータを消す。
ffmpeg -i Atmos.thd -bsf:a truehd_core -c:a copy No-Atmos.thd
Atomsのメタデータを消してac3にエンコードする。
ffmpeg -i Atmos.thd -c:a ac3 -b:a 640k -center_mixlev 0.707 No-Atmos5.1.ac3
ffmpeg使う時、必ずこのサイトが出てきて、参考になります。ありがとうございます。