a.MOV
(iPhoneから)をc.MOV
、ffmpegは多くのメタデータ(ビデオの時間と場所を含む)をドロップします。
-metadata
を試しましたが、ffmpegは情報をドロップします(ffmpegがOutput #0
を出力しても、メタデータはドロップされないようです。
ですが、ffprobeを使用して出力ファイルのメタデータを表示するとドロップされます)
ffmpegにこれらのメタデータを強制的に保存するにはどうすればよいですか?
$ ffmpeg -i a.MOV -c copy c.MOV -y Input #0, mov,mp4,m4a,3gp,3g2,mj2, from "a.MOV": Metadata: major_brand : qt minor_version : 0 compatible_brands: qt creation_time : 2018-03-... com.apple.quicktime.location.ISO6709: .../ com.apple.quicktime.make: Apple com.apple.quicktime.model: iPhone ... com.apple.quicktime.software: 11.... com.apple.quicktime.creationdate: 2018-03-... Duration: 00:00:01.77, start: 0.000000, bitrate: 7868 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 7707 kb/s, 30 fps, 30 tbr, 600 tbn, 1200 tbc (default) Metadata: creation_time : 2018-03-... handler_name : Core Media Data Handler encoder : H.264 Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 87 kb/s (default) Metadata: creation_time : 2018-03-... handler_name : Core Media Data Handler Stream #0:2(und): Data: none (mebx / 0x7862656D), 0 kb/s (default) Metadata: creation_time : 2018-03-... handler_name : Core Media Data Handler Stream #0:3(und): Data: none (mebx / 0x7862656D), 0 kb/s (default) Metadata: creation_time : 2018-03-... handler_name : Core Media Data Handler Output #0, mov, to "c.MOV": Metadata: major_brand : qt minor_version : 0 compatible_brands: qt com.apple.quicktime.creationdate: 2018-03-... com.apple.quicktime.location.ISO6709: .../ com.apple.quicktime.make: Apple com.apple.quicktime.model: iPhone ... com.apple.quicktime.software: 11.... encoder : Lavf57.71.100 Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, q=2-31, 7707 kb/s, 30 fps, 30 tbr, 19200 tbn, 600 tbc (default) Metadata: creation_time : 2018-03-... handler_name : Core Media Data Handler encoder : H.264 Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 87 kb/s (default) Metadata: creation_time : 2018-03-... handler_name : Core Media Data Handler Stream mapping: Stream #0:0 -> #0:0 (copy) Stream #0:1 -> #0:1 (copy) Press [q] to stop, [?] for help frame= 23 fps=0.0 q=-1.0 Lsize= 732kB time=00:00:01.76 bitrate=7827.5kbits/s speed= 971x video:921kB audio:9kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.291216% $ ffprobe c.MOV Input #0, mov,mp4,m4a,3gp,3g2,mj2, from "c.MOV": Metadata: major_brand : qt minor_version : 512 compatible_brands: qt encoder : Lavf57.71.100 Duration: 00:00:00.77, start: 0.000000, bitrate: 7819 kb/s Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 7707 kb/s, 30 fps, 30 tbr, 19200 tbn, 38400 tbc (default) Metadata: handler_name : DataHandler encoder : H.264 Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 92 kb/s (default) Metadata: handler_name : DataHandler $
コメント
- 同じ問題があります。上記は機能しません’。私はffmpegバージョンを使用していますffmpegバージョン3.4.4-1〜16.04.york0 Copyright(c)2000-2018FFmpeg開発者とこのffmpeg-i a.MOV -map_metadata 0 -c copy c.MOVはまだこれをドロップします: -書き込みライブラリ:Apple QuickTime com.apple.quicktime.make:Apple com.apple.quicktime.model:iPhone 5s com.apple.quicktime.software:10.3.3 com.apple.quicktime.creationdate:2018-06-06T01: 15:37 + 0800に置き換えられます:-アプリケーションの作成:Lavf57.83.100
回答
その他ここでの回答は、”既知の”メタキーでのみ機能します。カスタム/任意のメタキーの場合、-map_metadata 0
はそれらすべてを保持するのに十分ではありません。
私のトランスコーダープロジェクトでは、多くのカメラメーカーがカスタムメタキーをMP4 / MOVコンテナに挿入することを好み、それらを保持したいと思います。トランスコードされたMP4 / MOVファイル。多くの頭を悩ませた後、ffmpegにはこの目的のためのスイッチがあります:
-movflags use_metadata_tags
クレジットはこのスレッドの作成者とGoogleに送られます:
https://superuser.com/questions/1208273/add-new-and-non-defined-metadata-to-a-mp4-file
コメント
- 良いヒント-ありがとう。 iPhoneに記録した一連のmovファイルを変換したときに気付いたことが1つあります。exifデータのRotationタグは180と表示されています。ffmpegはデフォルトでビデオを自動回転しますが、movタグもmp4にコピーすると、それでも変換中にffmpegがmp4を自動回転させた場合でも、プレーヤーに180回転するように指示します。そのため、ビデオを再生すると、ビデオが上下逆になってしまいました:)-私の場合の回避策は、
-noautorotate
を使用して自動回転しないようにffmpegに指示することでした-簡単な回避策はExiftoolとローテーションを0に設定します-exiftool -Rotation=0 file.mp4
回答
-metadata
オプションは、メタデータを操作するためのものです。入力ファイルから出力ファイルにメタデータをコピーするだけの場合は、 -map_metadata
オプションを使用する必要があります。 :
ffmpeg -i a.MOV -map_metadata 0 -c copy c.MOV
ファイル指定子はインデックスがゼロの番号であるため、「0」は最初の入力ファイルからメタデータを取得します。
コメント
-
concat
でこれを機能させる方法はありますか?例えば。ffmpeg -nostdin -f concat -safe 1 -i "${concatlist}" -map_metadata 0 -c copy "$outfile"
ここで$concatlist
は/tmp/concat.list
でfile 'filenamehere.mp3'
- わかりました、わかりました:
ffmpeg -nostdin -i "${infile}" -f ffmetadata "${metadatafile}"
次にffmpeg -nostdin -f concat -safe 1 -i "${concatlist}" -i "${metadatafile}" -map_metadata 1 -c copy "$outfile"
-
-map_metadata 0
または-map_metadata 1
? - @evandrix As回答に記載されているように、0は最初の入力ファイルをソースとして選択します。詳細については、 ffmpegドキュメントのこのセクションを参照してください。
- わかりました、ありがとうございます〜
回答
FFmpegは、デフォルトで、最初の入力ファイルからのすべてのメタデータを利用可能にします、書き込み用の出力ファイルmuxerへ。 -map_metadata
では、別の入力を指すか、ffmpegに入力グローバルメタデータ(-1
の値)を破棄するように指示することで、これをオーバーライドできます。 。
ただし、使用可能なメタデータのどれが実際に出力ファイルに書き込まれるかは、出力マルチプレクサ。 QT / ISOBMFFマルチプレクサ(MOV / MP4 / 3GP ..用)は、主にiTunes関連の限られた数のタグのみを考慮します。 @JerryTianが指摘したように、-movflags use_metadata_tags
を使用すると、他のすべてのタグがファイルに書き込まれます。ただし、これらは型にはまらない方法で記述されています。特に、Quicktimeはこれらの追加のメタデータエントリを認識しません。他のffmpegベースのs / wはそれらを読むべきです。または、@ JerryTianのようにカスタムs / wを使用している人は誰でも、s / wを調整して読み取ることができます。
movflagsはQTマルチプレクサからの出力にのみ適用されることに注意してください。Matroska(MKV)は書き込みます他のマルチプレクサはさまざまです。
コメント
- 音楽を変換するときにメタデータを保持しようとしています。カスタムCATALOGIDを持っていますが、 wavからflac。フィールドは保持されません。ffmpeg-ibb.wavbb2。flac -movflagsuse_metadata_tags。何か考えはありますか?
- つまり、私があなたを正しく理解していれば、’ FFmpegを使用して.mkvにエンコードすると、デフォルトでソースからのすべてのメタデータが保持されるはずだと言っています、追加のオプションを指定する必要はありませんか?
回答
ffmpegを使用する方法が見つかりませんでしたデータを保存します。しかし、私は自分のニーズに合わせてexifメタデータが必要であり、 exiftool
は便利なソリューション。
ビデオファイル間でメタデータをコピーできます: https://unix.stackexchange.com/a/492338/83370
オプション-all:all>all:all
を使用してすべてのメタデータをコピーするトリックがあります: http://u88.n24.queensu.ca/exiftool/forum/index.php?topic=3440.0
exiftool -TagsFromFile a.MOV "-all:all>all:all" c.MOV
コメント
- Canon 200Dのファイルで上記のすべてを試しましたが、これは実際に最も便利です。それでも、元の出力よりもさらに
exiftool c.MOV
がはるかに小さくなりますが、実際の作成日は保持されます(-map_metadata
-movflags
)とカメラ名ではありませんが、レンズ情報はまだ消えています。 - OK、これは実際には素晴らしい出発点でした。私がしなければならなかったのはすべてです。そのマッピング部分をスキップします。
exiftool -TagsFromFile in.mp4 out.mp4
を使用するだけで作業が完了しました!