ตัดข้อมูลเมตาจากทุกรูปแบบด้วย FFmpeg


43

ฉันจะลบข้อมูลเมตาทั้งหมดออกจากรูปแบบทั้งหมดผ่าน FFmpeg ได้อย่างไร

ฉันเพียงแค่สามารถตั้งค่าข้อมูลเมตาพิเศษสำหรับแต่ละรูปแบบต่อคน 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

คำตอบ:


63

การแก้ไขบรรทัดคำสั่งเล็กน้อยโดย @izxฉันได้สิ่งนี้:

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

ผลลัพธ์คือ (อีกครั้งตรวจสอบด้วยexiftool) เร็กคอร์ดข้อมูลเมตาลดลงจาก 81 เป็น 52 บรรทัด โปรดทราบว่าคุณไม่สามารถลบข้อมูลเมตาทั้งหมดได้บางอย่างจะยังคงอยู่ อย่างไรก็ตามฉันไม่ได้รับวันที่สร้างการเปลี่ยนแปลงซึ่งแปลกเพราะมันดูเหมือนจะทำงานในรุ่นอูบุนตู

ฉันโพสต์ในรายการส่งเมล FFmpegโดยถามว่ามีการอัปเดตหรือความคิดเห็นใด ๆ ลองดูสิ่งที่พวกเขาพูด


2
ในmovหรือmp4ไฟล์วันที่สร้างเป็นฟิลด์จำนวนเต็มในส่วนหัวภาพยนตร์และหัวติดตาม (แสดงเป็นวินาทีตั้งแต่ปี 1904) แม้ว่าคุณสามารถตั้งค่าเป็น 0 หรือค่าคงที่อื่น ๆ แต่ก็ไม่มีวิธีที่จะลบออกและยังคงมีไฟล์movหรือmp4ไฟล์ที่ถูกต้อง
mark4o

ฉันรู้ว่าฉันไม่สามารถลบได้ทั้งหมด แต่การเปลี่ยนแปลงไม่สามารถทำได้ด้วยเหตุผลบางอย่าง
slhck

3
การใช้ ffmpeg ปัจจุบันเวลาการสร้างสามารถเปลี่ยนแปลงได้ด้วย-metadata creation_time=2012-12-17T21:30:00(UTC)
mark4o

1
ฉันจะแก้ไขสิ่งนี้เพื่อลบชื่อได้อย่างไร ขณะนี้มันตั้งชื่อเป็นสิ่งที่สร้างขึ้นโดยอัตโนมัติ ฉันต้องการเห็นชื่อไฟล์แบบเต็มเป็นชื่อเรื่องในที่สุด
Rookie

2
@Rookie -metadata title="Some Value"แล้วคุณจะต้องตั้งค่า หรือสำหรับไฟล์บางอย่างเช่นนี้สำหรับไฟล์ MP4:ffmpeg -i "$file" -map_metadata -1 -c copy -metadata title="$file" "${file%%*.mp4}-new.mp4
slhck

9

โซลูชันของฉันในการตัดข้อมูลเมตาบทที่เปลี่ยนเวลาและชื่อเรื่องการสร้าง วิธีนี้ metacontent ใด ๆ ควรแตกต่างจากไฟล์ต้นฉบับ:

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
ตัวแปรนั้นมีประโยชน์สำหรับฉันขอบคุณ ฉันหวังว่าคู่มือ ffmpeg จะแสดงตัวอย่างเพิ่มเติมดังกล่าวข้างต้น; stackoverflow, superuser ฯลฯ ... ทั้งหมดมีประโยชน์มากเพราะมีข้อมูลที่เป็นประโยชน์มากมาย
shevy

8

หมายเหตุ:ฉันได้รับการปรับปรุงตั้งแต่ffmpegก่อนหน้านี้ (ก่อนหน้านี้ฉันมีรุ่นล้าสมัยavconvจากที่เก็บ Ubuntu)

ตอนนี้ @ slhck -map_metadata -1 ทำงานได้อย่างสมบูรณ์แบบ

ฉันแนะนำวิธีการแก้ปัญหาของ @ slhckเพราะพิมพ์น้อยและทันสมัย ฉันจะออกจากที่นี่สำหรับทุกคนที่ใช้รุ่นที่ล้าสมัย


วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการตั้งค่า-map_metadataให้ใช้หนึ่งในสตรีมอินพุตแทนที่จะใช้เมทาดาทาส่วนกลาง 99% ของเวลานี้ควรได้ผล หมายเหตุ: ฉันใช้ avconv เพราะอยู่ในที่เก็บ Ubuntu 12.04; นี่อาจจะเป็นแบบหล่นเข้ากันได้กับ ffmpeg เนื่องจากไวยากรณ์ของพวกเขาอยู่ในประสบการณ์ของฉันเสมอ

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

นี่จะใช้เมตะดาต้าจากสตรีมข้อมูลแรก (โดยปกติคือสตรีมวิดีโอ) และใช้เพื่อแทนที่เมทาดาทาส่วนกลางของไฟล์คอนเทนเนอร์ วิธีนี้ใช้งานได้เป็นส่วนใหญ่สตรีมข้อมูลไม่มีข้อมูลเมตาที่มีความหมายเขียนถึงพวกเขา อย่างไรก็ตามบางครั้งพวกเขาก็ทำและคุณต้องการกำจัดข้อมูลเมตานั้นอย่างสมบูรณ์ น่าเสียดายที่วิธีเดียวที่ฉันสามารถทำได้คือใช้ไพพ์และกระบวนการ 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% ของเคสดังนั้นควรเลือกใช้


1
ไฟล์ WAVE เช่นเดียวกับไฟล์ RIFF อื่น ๆ (เช่น AVI) สามารถมีแท็กข้อมูลเมตาได้โดยใช้รายการ "INFO" มันไม่ได้ใช้บ่อยนัก
blerontin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.