web-dev-qa-db-ja.com

FFmpegでののフォーマットからメタデータを削除

FFmpegを使ってすべてのフォーマットからすべてのメタデータを削除する方法を教えてください。

私はちょうどman ffmpegごとにフォーマットごとに特別なメタデータを設定することができます。 ffmpegで利用可能なすべてのメタデータからすべてのメタデータを消去してメディアを削除するためのオプションまたは方法はありますか。

   -metadata key=value
       Set a metadata key/value pair.

       For example, for setting the title in the output file:

               ffmpeg -i in.avi -metadata title="my title" out.flv
37
sweb

コマンドラインを@izx で少し変更すると、次のようになります。

ffmpeg -i in.mov -map_metadata -1 -c:v copy -c:a copy out.mov

結果は(やはりexiftoolでチェック)、メタデータレコードは81から52行に減少しました。単純にすべてのメタデータを削除することはできません。いくつかのことが残ります。しかし、私は作成日を変更することができませんでした、それがUbuntuバージョンで動作するように思われたのでそれは奇妙です。

私は FFmpegメーリングリスト に投稿し、それについて何かアップデートやコメントがあったかどうか尋ねました。彼らが言わなければならないことを見てみましょう。

53
slhck

注:それ以来ffmpegを更新しました(以前はUbuntuリポジトリからavconvの古いバージョンを持っていました)。

@ slhckの -map_metadata -1 は完全に動作します。

タイピングが少なく最新であるため、 @ slhckの解決策 をお勧めします。古くなったバージョンを使っている人のためにここに置いておきます。


これを行う最も簡単な方法は、グローバルメタデータを使用するのではなく、入力ストリームの1つを使用するように-map_metadataを設定することです。 99%の時間これでうまくいくはずです。注:私はavconvを使用しています。これはUbuntu 12.04リポジトリにあるためです。これはおそらくffmpegと互換性があるでしょう。なぜならそれらの構文はいつも私の経験にあるからです。

avconv -i input.mp4 -map 0 -map_metadata 0:s:0 -c copy output.mp4

これは最初のデータストリーム(通常はビデオストリーム)からメタデータを取得し、それを使用してコンテナファイルのグローバルメタデータを置き換えます。ほとんどの場合、データストリームには意味のあるメタデータが書き込まれていないため、これは機能します。しかし、時々彼らはそうします、そしてあなたは完全にそのメタデータを取り除きたいです。残念ながら、これを行うために私が考えることができる唯一の方法はパイプと2つのavconvプロセスを使用しました。

avconv -i input.mp4 -f wav - | avconv -i - -i input.mp4 -map 1 -map_metadata 0 -c copy output.mp4

これはWAVファイルがメタデータを含むことができないという事実を利用します(メタデータタグが存在する前にフォーマットが作成されたので)。

これらの方法は両方とも、私がテストしたばかりのファイルのすべてのメタデータを空白にしました - exiftoolが報告したものはすべてコーデック情報であり、avprobeは私にメタデータを報告しませんでした。このためにパイプを使うのはかなり醜く、そして最初の方法は99%のケースでうまくいくでしょう、それでそれは好まれるべきです。

6
evilsoup

作成時間とタイトルを変更するために、メタデータ、章を削除するための私の解決策。このように、メタコンテンツは元のファイルとは異なるはずです。

ffmpeg -y -i "test.mkv" -c copy -map_metadata -1 -metadata title="My Title" -metadata creation_time=2016-09-20T21:30:00 -map_chapters -1 "test.mkv"
6
shub