web-dev-qa-db-ja.com

quicktimeムービーファイルからすべてのメタデータを削除するにはどうすればよいですか?

私のカメラは.movファイルをムービーとして取ります。それらからすべてのメタデータを削除して、いつ、どこで撮影されたのか、私が持っているカメラの種類などを誤って共有することなく、YouTubeで自信を持って共有できるようにするにはどうすればよいですか? 、GUIプログラムの方が良いでしょう。

7

さて、私はコマンドラインの答えがあります:

注:これは、デフォルトでUbuntuに含まれるffmpegでのみ機能します。バージョンは0.8.1-4:0.8.1-0ubuntu1に似ています。 itは、サードパーティのPPAからインストールした、または自分でコンパイルしたffmpegバイナリでは動作しません。あなたのマイレージは異なる場合があります。

  • これらをインストールします:Sudo apt-get install ffmpeg libimage-exiftool-Perl
  • 次に、ソース.movファイルがある場所に移動し、それをtest.movと呼びます
  • そして実行:

     ffmpeg -i test.mov -map_metadata -1 -vcodec copy -acodec copy test-nometadata.mov 
    
  • その後、exiftoolを使用して、機能したことを確認できます。 exiftool test.movexiftool test-nometadata.movは違いを示すはずです。

  • これは、大量のメタデータ(Pastebin'd)を含む古いNikon .movからのサンプル出力です。

    1. 前-80メタデータ行
    2. 後-52メタデータ行 (作成、変更などの回数もヌルにされました)

(上記のffmpegの順序は必須であることに注意してください-入力ファイルと出力ファイルは最後に指定する必要があります)

13
ish

注: ffmpegの最新バージョン(およびおそらくavconvですが、テストしていません)では、次のように使用できます。

ffmpeg -i input.mp4 -map 0 -map_metadata -1 -c copy output.mp4

-map_metadata -1を使用すると、空の「ダミー」メタデータソースが作成されます。リポジトリ内のavconvのバージョン、または他の古いバージョンの場合、以下で説明する方法を使用します。


Avconv(または、それがあなたの武器であるならffmpegを使用して、構文は同じです):

これを行う最も簡単な方法は、グローバルメタデータを使用するのではなく、入力ストリームの1つを使用するように-map_metadataを設定することです。これが機能するのは99%です。

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%のケースで機能するため、この方法をお勧めします。

ボーナス:ディレクトリ内のすべてのMP4のブランクバージョンを作成し、その後、メタデータバージョンをブランクバージョンに置き換えます(警告-ほぼ元に戻せません):

for f in *.mp4; do avconv -i "$f" -map 0 -map_metadata 0:s:0 -c copy "out.$f"; mv "out.$f" "$f"; done
2
evilsoup