Tách siêu dữ liệu từ tất cả các định dạng với FFmpeg


43

Làm cách nào tôi có thể xóa tất cả siêu dữ liệu khỏi tất cả các định dạng thông qua FFmpeg?

Tôi chỉ có thể đặt siêu dữ liệu đặc biệt cho mỗi định dạng cho mỗi người đàn ông ffmpeg . Bất kỳ tùy chọn hoặc phương pháp nào để xóa tất cả siêu dữ liệu và dải phương tiện khỏi tất cả các siêu dữ liệu có sẵn trên 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

Câu trả lời:


63

Hơi sửa đổi dòng lệnh của @izx , tôi đã nhận được điều này:

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

Kết quả là (một lần nữa, được kiểm tra exiftool), một bản ghi siêu dữ liệu giảm từ 81 xuống còn 52 dòng. Lưu ý rằng bạn không thể xóa tất cả siêu dữ liệu, một số thứ sẽ ở lại. Tuy nhiên, tôi đã không thay đổi ngày tạo, điều này thật lạ vì dường như nó hoạt động trong phiên bản Ubuntu.

Tôi đã đăng trên danh sách gửi thư của FFmpeg , hỏi liệu có bất kỳ cập nhật hoặc nhận xét nào về điều đó không. Hãy xem họ nói gì.


2
Trong movhoặc mp4tệp, ngày tạo là một trường số nguyên trong tiêu đề phim và tiêu đề theo dõi (được biểu thị bằng giây kể từ năm 1904). Mặc dù bạn có thể đặt nó thành 0 hoặc một số giá trị cố định khác, không có cách nào để xóa nó và vẫn có tệp movhoặc hợp lệ mp4.
mark4o

Tôi biết tôi không thể loại bỏ nó hoàn toàn, nhưng vì một số lý do, việc thay đổi là không thể.
slhck

3
Sử dụng ffmpeg hiện tại, thời gian tạo có thể được thay đổi bằng -metadata creation_time=2012-12-17T21:30:00(UTC).
mark4o

1
Làm thế nào tôi có thể sửa đổi điều này để loại bỏ tiêu đề quá? Hiện tại nó đặt tiêu đề cho một cái gì đó tự động tạo ra. Tôi muốn xem tên tệp đầy đủ như tiêu đề cuối cùng.
Tân binh

2
@Rookie Sau đó, bạn cần phải thiết lập -metadata title="Some Value". Hoặc, đối với một tệp, một cái gì đó như thế này đối với tệp MP4:ffmpeg -i "$file" -map_metadata -1 -c copy -metadata title="$file" "${file%%*.mp4}-new.mp4
slhck

9

Giải pháp của tôi để loại bỏ siêu dữ liệu, chương, để thay đổi thời gian tạo và tiêu đề. Bằng cách này, bất kỳ siêu dữ liệu nào cũng phải khác với tệp gốc:

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"

1
Biến thể đó là hữu ích cho tôi, cảm ơn bạn. Tôi muốn hướng dẫn sử dụng ffmpeg sẽ hiển thị nhiều ví dụ như ở trên; stackoverflow, superuser, v.v ... tất cả đều trở nên rất hữu ích vì chúng chứa rất nhiều thông tin hữu ích.
shevy

8

LƯU Ý: Tôi đã cập nhật ffmpeg(trước đây tôi đã có phiên bản lỗi thời avconvtừ kho lưu trữ Ubuntu).

Bây giờ @ slhck -map_metadata -1 hoạt động hoàn hảo.

Tôi đề xuất giải pháp của @ slhck vì nó ít gõ và cập nhật hơn. Tôi sẽ để nó ở đây cho bất cứ ai sử dụng một phiên bản lỗi thời.


Cách dễ nhất để làm điều này là thiết lập -map_metadatađể sử dụng một trong các luồng đầu vào, thay vì sử dụng siêu dữ liệu toàn cầu. 99% thời gian này sẽ làm việc. LƯU Ý: Tôi đang sử dụng avconv, vì đó là trong kho Ubuntu 12.04; điều này có thể sẽ tương thích với ffmpeg, vì cú pháp của chúng luôn nằm trong kinh nghiệm của tôi.

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

Điều này sẽ lấy siêu dữ liệu từ luồng dữ liệu đầu tiên (thường là luồng video) và sử dụng siêu dữ liệu đó để thay thế siêu dữ liệu toàn cầu của tệp chứa. Điều này hoạt động vì hầu hết thời gian, các luồng dữ liệu không có siêu dữ liệu có ý nghĩa được viết cho chúng; tuy nhiên, đôi khi họ làm như vậy và bạn muốn loại bỏ hoàn toàn siêu dữ liệu đó. Thật không may, cách duy nhất tôi có thể nghĩ ra để làm điều này là sử dụng một đường ống và hai quy trình avconv.

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

Điều này lợi dụng thực tế là các tệp WAV không thể chứa siêu dữ liệu (vì định dạng đã được tạo trước khi tồn tại thẻ siêu dữ liệu).

Cả hai phương pháp này đều làm trống tất cả siêu dữ liệu trên một tệp mà tôi vừa kiểm tra chúng - tất cả những gì exiftoolđược báo cáo là thông tin về codec và avprobe báo cáo không có siêu dữ liệu cho tôi. Sử dụng một đường ống cho việc này khá xấu, và phương pháp đầu tiên sẽ hoạt động trong 99% trường hợp, do đó nên được ưu tiên.


1
Các tệp WAVE, giống như các tệp dựa trên RIFF khác (ví dụ AVI) thực sự có thể chứa các thẻ siêu dữ liệu bằng cách sử dụng đoạn danh sách "INFO". Nó chỉ không được sử dụng rất thường xuyên.
ngừng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.