2011-12-29 23 views
60

Tôi cố gắng để thêm phụ đề văn bản để một container .mp4 sử dụng ffmpeg:Sử dụng ffmpeg để thêm văn bản phụ đề

ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mp4 

Khi tôi đang cố gắng để chạy dòng này, nó mang lại cho tôi một lỗi:

Nmber bản đồ luồng phải khớp với số lượng luồng đầu ra.

Nếu tôi cố gắng thay đổi mp4 để mkv (mặc dù mp4 hỗ trợ phụ đề văn bản), như thế này:

ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mkv 

Nó bản đồ một cách chính xác các con suối, nhưng đưa ra một lỗi:

Không tìm thấy bộ mã hóa (codec id 94210) cho luồng đầu ra # 0.2

Khi tôi khởi chạy

ffmpeg -codecs 

Tôi có thể thấy rằng codec srt được hỗ trợ làm bộ giải mã và mã hóa, tuy nhiên tôi không chắc chắn những gì được sử dụng cho mã hóa mp4 và mkv, và liệu tôi có cần bật hay biên dịch riêng biệt hay không.

Trả lời

27

Sử dụng thư viện libass (đảm bảo cài đặt ffmpeg của bạn có thư viện trong cấu hình --enable-libass).

Đầu tiên chuyển đổi sang định dạng phụ đề .ass:

ffmpeg -i subtitles.srt subtitles.ass 

Sau đó thêm chúng sử dụng một bộ lọc video:

ffmpeg -i mymovie.mp4 -vf ass=subtitles.ass mysubtitledmovie.mp4 
+0

Nó làm việc cho tôi, cảm ơn. –

+17

Điều này sẽ "ghi chúng vào" video, có nghĩa là bạn không thể tắt chúng trong trình phát. Điều này khác với việc thêm chúng dưới dạng luồng phụ đề mà người chơi có thể đọc và hiển thị nếu người xem muốn họ. – stib

+0

Cảm ơn rất nhiều vì giải pháp này. Có cách nào để chỉ định kích thước của các ký tự không? – user1319182

3

tôi đã cố gắng sử dụng MP4Box cho nhiệm vụ này, nhưng nó không thể xử lý các M4V Tôi đã xử lý. Tôi đã thành công nhúng SRT phụ đề như mềm mại với ffmpeg với dòng lệnh sau:

ffmpeg -i input.m4v -i input.srt -vcodec copy -acodec copy -scodec copy -map 0:0 -map 0:1 -map 1:0 -y output.mkv

Giống như bạn tôi đã phải sử dụng một tập tin đầu ra MKV - Tôi đã không thể tạo ra một file M4V.

97
ffmpeg -i infile.mp4 -i infile.srt -c copy -c:s mov_text outfile.mp4 

-vf subtitles=infile.srt sẽ không làm việc với -c copy


Trình tự -c copy -c:s mov_text là quan trọng.Bạn đang nói FFmpeg:

  1. Video: sao chép, Âm thanh: sao chép, Subtitle: sao chép
  2. Subtitle: mov_text

Nếu bạn đảo ngược họ, bạn đang nói FFmpeg:

  1. Phụ đề: mov_text
  2. Video: bản sao, Âm thanh: bản sao, Phụ đề: sao chép

Hoặc bạn chỉ có thể sử dụng -c:v copy -c:a copy -c:s mov_text trong bất kỳ yêu cầu nào .

+0

Vị trí ở đâu! ? hàng đầu?! đáy? trung tâm?! –

+4

Phương pháp này thêm phụ đề vào tệp dưới dạng một luồng, vì vậy cần hỗ trợ trình phát để hiển thị phụ đề (chẳng hạn như VLC) – BollMose

+0

Điều này có nghĩa là phụ đề có sẵn, nhưng không được ghi vào video? Tôi có thể hiển thị nếu tôi muốn theo yêu cầu không? – Sun

5

ffmpeg hỗ trợ bộ mã hóa mov_text phụ đề mà là về người duy nhất được hỗ trợ trong một container MP4 và có thể chơi được bằng iTunes, Quicktime, iOS, vv

dòng của bạn sẽ đọc:

ffmpeg -i input.mp4 -i input.srt -map 0:0 -map 0:1 -map 1:0 -c:s mov_text output.mp4

4

MKV container hỗ trợ các codec video và audio Hầu như mọi thứ và cũng hỗ trợ các menu phụ đề và DVD. Vì vậy, bạn chỉ có thể sao chép codec từ video đầu vào sang video đầu ra với MKV container với phụ đề. Trước tiên, bạn nên chuyển đổi SRT sang định dạng phụ đề ASS

ffmpeg -i input.srt input.ass 

và nhúng ASS phụ đề vào video

ffmpeg -i input.mp4 -i input.ass -c:v copy -c:a copy -c:s copy -map 0:0 -map 0:1 -map 1:0 -y out.mkv 

Cũng làm việc với tập tin VMW.

ffmpeg -i input.wmv -i input.ass -c:v copy -c:a copy -c:s copy -map 0:0 -map 0:1 -map 1:0 -y out.mkv 

xem trang wiki Comparison of container formats

+1

HV không thực sự có liên quan, nó luôn được chào đón để xem nhiều giải pháp hơn một. – JasonXA

-3

Đây là lý do tại sao mkv là một container tốt như vậy, đặc biệt là bây giờ mà nó trưởng thành:

mkvmerge -o output.mkv video.mp4 subtitle.srt 
+3

Chăm sóc để bình luận về lý do tại sao cách tiếp cận của bạn sẽ khắc phục vấn đề của OP? – mjuarez

28

Bạn đang cố gắng MUX phụ đề như một phụ đề suối. Nó là dễ dàng nhưng cú pháp khác nhau được sử dụng cho MP4 (hoặc M4V) và MKV. Trong cả hai trường hợp, bạn phải chỉ định codec video và âm thanh hoặc chỉ sao chép luồng nếu bạn chỉ muốn thêm phụ đề.

MP4:

ffmpeg -i input.mp4 -f srt -i input.srt \ 
-map 0:0 -map 0:1 -map 1:0 -c:v copy -c:a copy \ 
-c:s mov_text output.mp4 

MKV:

ffmpeg -i input.mp4 -f srt -i input.srt \ 
-map 0:0 -map 0:1 -map 1:0 -c:v copy -c:a copy \ 
-c:s srt output.mkv 
+0

Có thể thêm nhiều phụ đề không? Liệu softsub này có được công nhận là ngôn ngữ không rõ? – Patrick

+0

Vâng, đúng thế. Tôi vừa thử nghiệm nó cho MKV: – dotokija

+3

Đầu tiên thêm đầu vào khác: -i input2.srt. Thứ hai, ánh xạ dưới dạng luồng thứ 2: -map 2: 0. Cuối cùng, chọn bộ mã hóa cho luồng phụ đề thứ 2 (giống như phần đầu tiên): -c: s srt. Ví dụ hoàn chỉnh \ ffmpeg -i input.mp4 -f srt -i input.srt -i input2.srt \ -map 0: 0 -map 0: 1 -map 1: 0 -map 2: 0 -c: v copy -c: một bản sao \ -c: s srt -c: s srt output.mkv – dotokija

-1

Ví dụ đơn giản:

videoSource=test.mp4 
videoEncoded=test2.mp4 
videoSubtitle=test.srt 
videoFontSize=24 
ffmpeg -i "$videoSource" -vf subtitles="$videoSubtitle":force_style='Fontsize="$videoFontSize"' "$videoEncoded" 

Chỉ thay thế các biến linux

+0

Chăm sóc để xây dựng? – RamenChef

Các vấn đề liên quan