วิธีการแยกคำบรรยายจากวิดีโอโดยใช้ ffmpeg?


34

ฉันพยายามที่จะแยกคำบรรยายจากวิดีโอเป็น.srtไฟล์ฉันใช้คำสั่งต่อไปนี้:

FFMPEG -i mytestmovie.mkv -vn -an -codec:s:0.1 srt sub.srt

แต่ฉันได้รับข้อผิดพลาดเป็นตัวเลือกที่ไม่รู้จักcodec:s:0:1 ดังนั้นคุณสามารถบอกฉันคำสั่งที่แน่นอนและวิธีการแยกคำบรรยายเป็น.srtไฟล์ในวิดีโอได้หรือไม่


Umair: มึงจะบอกฉันในพร้อมรับคำสั่ง
วีเจย์

ผมมีปัญหาเดียวกัน. คุณได้รับสิ่งนี้เพื่อการทำงานในที่สุด?
Maxime Labelle

คำตอบ:


51

ง่าย:

ffmpeg -i Movie.mkv -map 0:s:0 subs.srt
  • -i : URL / เส้นทางของไฟล์อินพุต
  • - แผนที่ : กำหนดอินพุตสตรีมตั้งแต่หนึ่งรายการขึ้นไปเป็นแหล่งข้อมูลสำหรับไฟล์เอาต์พุต
  • s: 0 : เลือกสตรีมคำบรรยาย

2
สิ่งนี้ใช้ได้กับฉันด้วยไฟล์ MP4 พร้อมคำบรรยายในตัว
รูเบนส์ Mariuzzo

11
นี่จะดาวน์โหลดแทร็กคำบรรยายแรก หากมีหลายให้ใช้0:s:1เพื่อดาวน์โหลดอันที่สอง0:s:2เพื่อดาวน์โหลดอันที่สามและอื่น ๆ
Fabien Snauwaert

5
@ jm3 คุณจะรู้วิธีใดที่จะแยกสตรีมคำบรรยายทั้งหมดออกจากไฟล์โดยอัตโนมัติตั้งชื่อพวกมันหลังจากตัวระบุภาษาของพวกเขา (เช่น eng, fre, dut เป็นต้น)
คุณพ่อ

ทำไมมันจึงช้าเมื่อแยกจากภาชนะ MKV ขนาดใหญ่ (~ 4 gb)
25

หากต้องการแยกคำบรรยายเพิ่มเติมในครั้งเดียวคุณต้องทำซ้ำ-mapพารามิเตอร์สำหรับแต่ละไฟล์ นอกจากนี้ยังรวมถึงเพื่อให้มันเป็นเพียงแค่สารสกัดจากแฟ้มโดยไม่พยายามที่จะดำเนินการได้:-c copy ffmpeg -i Movie.mkv -c copy -map 0:s:0 subs.01.srt -c copy -map 0:s:1 subs.02.srtอย่างไรก็ตามจะใช้เวลานานเนื่องจาก ffmpeg ต้องอ่านไฟล์วิดีโอทั้งหมดเพื่อค้นหาทุกส่วนของสตรีมคำบรรยาย
Radek Pech

8

-codec:s:0:1ไม่ถูกต้อง หากคุณใช้-codec:s:0แล้ว ffmpeg จะใช้ตัวแปลงสัญญาณที่ระบุสำหรับสตรีมคำบรรยายแรกที่ถูกส่งผ่านไปยังเอาต์พุตถ้าคุณใช้-codec:s:1มันจะใช้มันสำหรับสตรีมคำบรรยายที่สองเป็นต้น

คุณยังสามารถใช้-codec:sเพื่อเลือกสตรีมคำบรรยายออกทั้งหมดหรือ-codec:2เพื่อเลือกสตรีมเอาต์พุตที่สามโดยไม่คำนึงว่ามันคืออะไร

คุณอาจสับสนเพราะ-mapตัวเลือกทำงานในลักษณะที่แตกต่าง - ที่นั่นคุณต้องเลือกอินพุตที่สตรีมที่เลือกมา (ดังนั้น-map 0:s:0จะใช้สตรีมคำบรรยายแรกจากอินพุตแรกและป้อนไปยังเอาต์พุต) อย่างไรก็ตาม-mapมีไว้สำหรับการเลือกสตรีมที่คุณต้องการใช้จากอินพุต ในขณะที่ตัวเลือกอื่น ๆ ส่วนใหญ่ที่ใช้การจับคู่สตรีมนั้นใช้สำหรับสตรีมหลังจากที่เลือกแล้ว (ไม่จำเป็นต้องระบุไฟล์อินพุตที่มาจาก) เนื่องจากมีการส่งผ่านไปยังเอาต์พุต


evilsoup: ฉันจะใช้คำสั่งต่อไปนี้ E: \ FFMpeg_Latest> ffmpeg -i E: \ Routine \ rout.mkv -vn -an -map 0: s: 0 srt E: \ Routine \ sub.srt, ดูเหมือนว่าฉันมีข้อผิดพลาด ได้ไม่สามารถที่จะหารูปแบบการออกเหมาะสำหรับ 'srt' u สามารถบอกฉันคำสั่งสำหรับการสกัดคำบรรยายในวิดีโอ ...
วีเจย์

2
ลอง: ffmpeg -i E:\Routine\routine.mkv -map 0:s:0 E:\Routine\sub.srt(ffmpeg ควรตรวจสอบว่าคุณต้องการคำบรรยาย srt จากชื่อไฟล์ที่ส่งออก)
evilsoup

ฉันใช้: ffmpeg -i film.mp4 -vn -an -codec:s srt film.srtที่ควรคัดลอกคำบรรยายทั้งหมดไปยังไฟล์ srt
Stuart

@ Stuart ไม่ได้แยกคำบรรยายทั้งหมด
25

1
@evilsoup -codec:sเท่ากับ-codec:s:0ดังนั้นจึงไม่เลือกคำบรรยายทั้งหมด ... มันจะแยกแทร็กข้อความแรก
user25
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.