Làm cách nào để trích xuất phụ đề từ video bằng ffmpeg?


34

Tôi đang cố trích xuất phụ đề từ video dưới dạng .srttệp, tôi đã sử dụng lệnh sau:

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

Nhưng, tôi gặp lỗi là tùy chọn Không được nhận dạng codec:s:0:1 Vì vậy, bạn có thể cho tôi biết lệnh chính xác và cách trích xuất phụ đề dưới dạng .srttệp trong video không?


umair: bạn sẽ cho tôi biết trong dấu nhắc lệnh
vijay

Tôi có cùng một vấn đề. Bạn đã có được điều này để cuối cùng làm việc?
Maxime Labelle

Câu trả lời:


51

Đơn giản:

ffmpeg -i Movie.mkv -map 0:s:0 subs.srt
  • -i : Nhập URL / đường dẫn tệp.
  • -map : Chỉ định một hoặc nhiều luồng đầu vào làm nguồn cho tệp đầu ra.
  • s: 0 : Chọn luồng phụ đề.

2
Điều này làm việc cho tôi với một tệp MP4 với phụ đề được nhúng.
Rubens Mariuzzo

11
Điều này sẽ tải về phụ đề đầu tiên. Nếu có một số, sử dụng 0:s:1để tải xuống cái thứ hai, 0:s:2để tải xuống cái thứ ba, v.v.
Fabien Snauwaert

5
@ jm3 Bạn có biết bất kỳ cách nào để tự động trích xuất tất cả các luồng phụ đề từ một tệp, đặt tên chúng theo định danh ngôn ngữ của chúng (ví dụ: eng, fre, dut, v.v.) không?
Cha

Tại sao nó quá chậm khi trích xuất từ ​​thùng chứa MKV lớn (~ 4 gb)?
dùng25

Để trích xuất thêm phụ đề cùng một lúc, bạn phải sao chép các -maptham số cho mỗi tệp. Cũng bao gồm -c copyđể nó chỉ trích xuất tệp mà không cố xử lý nó : ffmpeg -i Movie.mkv -c copy -map 0:s:0 subs.01.srt -c copy -map 0:s:1 subs.02.srt. Dù sao, nó sẽ mất nhiều thời gian vì ffmpeg phải đọc toàn bộ tệp video để tìm tất cả các phần của luồng phụ đề.
Radek Pech

8

-codec:s:0:1không chính xác Nếu bạn sử dụng -codec:s:0thì ffmpeg sẽ sử dụng codec đã nêu cho luồng phụ đề đầu tiên được chuyển đến đầu ra, nếu bạn sử dụng -codec:s:1thì nó sẽ sử dụng nó cho luồng phụ đề thứ hai, v.v.

Bạn cũng có thể sử dụng -codec:sđể chọn tất cả các luồng phụ đề đầu ra hoặc -codec:2để chọn luồng đầu ra thứ ba, bất kể đó là gì.

Bạn có thể bối rối vì -maptùy chọn này hoạt động theo một cách khác - ở đó, bạn phải chọn luồng đầu vào được chọn từ đâu. (vì vậy, -map 0:s:0sẽ lấy luồng phụ đề đầu tiên từ đầu vào đầu tiên và đưa nó vào đầu ra). Tuy nhiên, -maplà để chọn luồng nào bạn muốn lấy từ đầu vào; trong khi đó, hầu hết các tùy chọn khác sử dụng ánh xạ luồng đều được sử dụng cho các luồng sau khi chúng được chọn (vì vậy không cần chỉ định tệp đầu vào mà chúng đến từ đâu), vì chúng được chuyển đến đầu ra.


evilsoup: tôi sẽ sử dụng lệnh sau E: \ FFMpeg_Latest> ffmpeg -i E: \ Routine \ Rout.mkv -vn -an -map 0: s: 0 srt E: \ Routine \ sub.srt, có vẻ như tôi gặp lỗi không thể tìm thấy định dạng đầu ra phù hợp cho 'srt', bạn có thể cho tôi biết lệnh trích xuất phụ đề trong video không ...
vijay

2
Hãy thử: ffmpeg -i E:\Routine\routine.mkv -map 0:s:0 E:\Routine\sub.srt(ffmpeg sẽ phát hiện ra rằng bạn muốn phụ đề srt từ tên tệp đầu ra)
evilsoup

Tôi đã sử dụng: ffmpeg -i film.mp4 -vn -an -codec:s srt film.srtnên sao chép tất cả phụ đề vào tệp srt.
Stuart

@Stuart nó không trích xuất tất cả phụ đề
user25

1
@evilsoup -codec:stương đương -codec:s:0vì vậy nó không chọn tất cả phụ đề ... nó sẽ trích xuất bản nhạc văn bản đầu tiên
user25
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.