Hapus metadata dari semua format dengan FFmpeg

43

Bagaimana saya bisa menghapus semua metadata dari semua format melalui FFmpeg?

Saya hanya dapat mengatur metadata khusus untuk setiap format per man ffmpeg . Adakah opsi atau metode untuk menghapus semua metadata dan menghapus media dari semua metadata yang tersedia di 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
sweb
sumber

Jawaban:

63

Sedikit memodifikasi baris perintah oleh @izx , saya mendapatkan ini:

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

Hasilnya adalah (sekali lagi, diperiksa dengan exiftool), catatan metadata berkurang dari 81 menjadi 52 baris. Perhatikan bahwa Anda tidak bisa begitu saja menghapus semua metadata, beberapa hal akan tetap ada. Namun, saya tidak mendapatkan tanggal pembuatan untuk berubah, yang aneh karena sepertinya berfungsi di versi Ubuntu.

Saya memposting di milis FFmpeg , menanyakan apakah ada pembaruan atau komentar tentang itu. Mari kita lihat apa yang mereka katakan.

slhck
sumber
2
Dalam movatau mp4file, tanggal pembuatan adalah bidang bilangan bulat di header film dan header lagu (dinyatakan sebagai detik sejak 1904). Meskipun Anda bisa mengaturnya ke 0 atau nilai tetap lainnya, tidak ada cara untuk menghapusnya dan masih memiliki file movatau valid mp4.
mark4o
Saya tahu saya tidak bisa menghapus seluruhnya, tetapi perubahan itu tidak mungkin karena beberapa alasan.
slhck
3
Menggunakan ffmpeg saat ini, waktu pembuatan dapat diubah dengan -metadata creation_time=2012-12-17T21:30:00(UTC).
mark4o
1
Bagaimana saya bisa memodifikasi ini untuk menghapus judul juga? Saat ini ia menetapkan judul untuk sesuatu yang dihasilkan secara otomatis. Saya ingin melihat nama file lengkap sebagai judul pada akhirnya.
Rookie
2
@Rookie Maka Anda perlu mengatur -metadata title="Some Value". Atau, untuk sebuah file, seperti ini untuk file MP4:ffmpeg -i "$file" -map_metadata -1 -c copy -metadata title="$file" "${file%%*.mp4}-new.mp4
slhck
9

Solusi saya untuk menghapus metadata, bab, untuk mengubah waktu dan judul pembuatan. Dengan cara ini setiap metacontent harus berbeda dari file asli:

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"
shub
sumber
1
Varian itu berguna bagi saya, terima kasih. Saya berharap manual ffmpeg akan menampilkan lebih banyak contoh seperti di atas; stackoverflow, superuser dll ... semua menjadi sangat berguna karena mengandung banyak informasi bermanfaat.
shevy
8

CATATAN: Saya telah memperbarui ffmpeg(sebelumnya saya memiliki versi usang dari avconvrepositori Ubuntu).

Sekarang @ slhck -map_metadata -1 berfungsi dengan baik.

Saya merekomendasikan solusi @ slhck karena kurang mengetik dan terbaru. Saya meninggalkan ini di sini untuk siapa saja yang menggunakan versi lama.


Cara termudah untuk melakukan ini adalah mengatur -map_metadatauntuk menggunakan salah satu aliran input, daripada menggunakan metadata global. 99% dari waktu ini seharusnya bekerja. CATATAN: Saya menggunakan avconv, karena itu ada di repositori Ubuntu 12.04; ini mungkin akan kompatibel dengan ffmpeg, karena sintaks mereka selalu sesuai dengan pengalaman saya.

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

Ini akan mengambil metadata dari aliran data pertama (biasanya aliran video) dan menggunakannya untuk mengganti metadata global dari file kontainer. Ini berfungsi karena sebagian besar waktu, aliran data tidak memiliki metadata bermakna yang dituliskan kepada mereka; Namun, kadang-kadang mereka melakukannya, dan Anda ingin sepenuhnya menyingkirkan metadata itu. Sayangnya, satu-satunya cara saya bisa memikirkan untuk melakukan ini menggunakan pipa dan dua proses avconv.

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

Ini mengambil keuntungan dari fakta bahwa file WAV tidak dapat mengandung metadata (karena format dibuat sebelum tag metadata ada).

Kedua metode ini mengapit semua metadata pada file yang baru saja saya uji - semua yang exiftooldilaporkan adalah informasi codec, dan avprobe melaporkan tidak ada metadata kepada saya. Menggunakan pipa untuk ini sangat jelek, dan metode pertama akan bekerja di 99% kasus, sehingga harus lebih disukai.

Evilsoup
sumber
1
WAVE file, seperti file berbasis RIFF lainnya (mis. AVI) sebenarnya dapat berisi tag metadata menggunakan potongan daftar "INFO". Hanya saja tidak sering digunakan.
blerontin