2013-12-19 205 views
10

我檢查了FFmpeg的文檔和許多論壇,並計算出正確的命令行來從.MP4視頻中提取的字幕看起來應該像這樣:是否可以使用ffmpeg從MP4視頻中提取SubRip(SRT)字幕?

ffmpeg -i video.mp4 -vn -an -codec:s:0 srt out.srt 

不過,我得到下面的錯誤,這使它我質疑是否可行在所有:

錯誤而輸出流#0開口編碼器:0 - 也許不正確的參數 如BIT_RATE,速率,寬度或高度

使用ffmpeg -codecs,我可以確認ffmpeg應該能夠編碼子標題字幕。

使用ffmpeg -i video.mp4,我可以看到,有嵌入在視頻2個字幕軌道:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4': 
... 
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1/0x31637661), yuv420p, 720x572 [SAR 64:45 DAR 256:143], 1341 kb/s, 25 fps, 25 tbr, 90k tbn, 180k tbc 
Stream #0:1(eng): Audio: aac (mp4a/0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s 
Stream #0:2(fra): Audio: aac (mp4a/0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s 
Stream #0:3(eng): Subtitle: dvd_subtitle (mp4s/0x7334706D) 
Stream #0:4(und): Subtitle: mov_text (text/0x74786574) 

EDIT

我與評價,但我所示的簡化的命令行測試仍然會得到相同的錯誤。這裏是a link to the detailed verbose output運行命令。我也嘗試完全禁用結果輸出中的元數據和章節,但仍然產生相同的錯誤。

+3

簡單的'ffmpeg -i in.mp4 out.srt'正確工作。 (ffmpeg 2.0.1) – pogorskiy

+0

嘗試'ffmpeg ... -loglevel debug ...'以獲取有關錯誤的更多信息 – pogorskiy

+0

我已經嘗試了這兩個建議,但我無法確定一個明顯的錯誤。也許這是由ffmpeg試圖在生成的srt文件中輸出章節標記引起的?我已經包含了詳細的調試輸出。 –

回答

22

我enventually想通了,爲什麼我沒有成功:

指定的命令行本來是完全正常的,如果從視頻信號源字幕的基於文本的表示進行編碼。但是,從輸出到ffmpeg -i命令行的輸出中可以看出,字幕以「dvd_subtitle」格式編碼。

dvd_subtitle格式存儲視頻中每個字幕的位圖。因此,ffmpeg無法將位圖轉換爲文本。

對於這項任務,人們不得不求助於基於OCR的軟件,該軟件協助用戶將每個字幕標識爲來自其位圖再現的文本。

(在源視頻中有一個輔助的基於文本的字幕,但我不知道它來自哪裏,也沒有被大多數流行的播放器看到,對於所有意圖和目的,這個「mov_text」字幕似乎是一個存根佔位符,可能是從原始DVD轉換的人工製品)

+0

我認爲文本軌道是章節標記,但不知道。 – mcdado

4

僅供參考,(由於代表尚未評論),但從MP4中提取SRT將導致文件格式化爲MOV_Text而不是定期SRT。它仍然會被添加和工作,但它像改變mp4到m4v一樣。雖然它通常起作用,但代碼中的工作並不一樣。 Mov_text對於手動調整字體/大小等是非常可怕的。最好的辦法是從網上下載並測試SRT!

這是可行的,而且會造成mov_text編碼SRT文件:

ffmpeg -i in.mp4 out.srt 
0

嘗試使用地圖選項... 如果在輸入文件流太多....

語法將是:

ffmpeg -i視頻。MP4 -Map 0:4 out.srt

因爲有您的兩個視頻的字幕流,第一個0:3這是dvdsubtitle所以不能轉換爲SRT,所以我們將其轉換0第二子標題:4流這是mov_text和副標題的軟副本,所以可以很容易地轉換....

相關問題