ffmpeg – 把光碟轉換成MP4
ffmpeg – 把光碟轉換成MP4
資料來源:https://it.ismy.fun/2019/05/16/convert-vob-to-mp4-by-ffmpeg/
DVD光碟上的視頻文件通常以.VOB格式保存在VIDEO_TS目錄中,由於一些系統只能讀取1GB以下的VOB文件,因此,為了保證最大兼容性,視頻通常會被切割成1GB大小的多個VOB文件。
對於只有一個VOB 文件的光盤,可以不做處理直接轉換(ffmpeg 會採用默認的最優化配置完成視頻的格式轉換):
$ ffmpeg -i VTS_01_1.VOB output.mp4
多vob 文件時,就要參照以下步驟轉換:
第一步合併多個vob 文件
光盤VIDEO_TS目錄中通常有多個*.vob格式的視頻文件。轉換前首先要把它們合成為一個output.vob文件:
$ cat *.VOB > output.vob
第二步識別vob 信息
$ ffmpeg -i output.vob Input #0, mpeg, from 'output.vob': Duration: 01:08:50.98, start: 0.287267, bitrate: 6469 kb/s Stream #0:0[0x1bf]: Data: dvd_nav_packet Stream #0:1[0x1e0]: Video: mpeg2video (Main), yuv420p(tv, bt470bg, top first), 720x576 [SAR 16:15 DAR 4:3], 25 fps, 25 tbr, 90k tbn, 50 tbc Stream #0:2[0x80]: Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s Stream #0:3[0x81]: Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s Stream #0:4[0x20]: Subtitle: dvd_subtitle Stream #0:5[0x21]: Subtitle: dvd_subtitle
從輸出的信息可以看出來,0:0是DVD的菜單,0:1是視頻部分,0:2和0:3是音頻部分,0:4和0:5是字幕。
進一步識別視頻信息
由於ffmpeg 只會用幾秒的時間對視頻的頭文件解析,從而知道視頻中包含哪些文件。不幸的是,VOB 這種格式沒有頭文件,因此只讀幾秒鐘是無法獲取VOB 文件的完整文件信息的。這時候就需要指定參數,讓ffmpeg 讀取視頻的一部分,從而獲取完成的文件信息:
$ ffmpeg -analyzeduration 100M -probesize 100M -i output.vob
可以根據情況調整數值
開始轉換
為了讓轉碼後的視頻更完整,我決定將兩個音軌和兩個字幕都集成進去
$ ffmpeg -i output.vob -preset superfast -crf 21 \ -c:a ac3 \ -c:s copy \ -map 0:1 -map 0:2 -map 0:3 -map 0:4 -map 0:5 \ output.mkv
-c:a是-codec:a的簡寫,冒號後面的a是audio音頻的簡寫,s是subtitle的簡寫。這個參數用來指定視頻、音頻、字幕所採用的編碼器,copy表示沿用源視頻的編碼器。
-map 用來指定參與轉碼的資源編號,即第二步識別出來的視頻信息。
Tips
在不指定任何解碼器時,ffmpeg 會使用libx264 轉碼視頻,轉出的視頻文件大小是源文件的16% 左右,清晰度很高,但轉碼時間很長。
如果希望快點完成轉碼,則可以指定-preset和-crf兩個參數來調諧。
我個人用下面的參數設置就能達到速度和質量比較理想的平衡,轉碼後的文件是源文件尺寸的40% 左右:
$ ffmpeg -i output.vob -preset superfast -crf 18 output.mp4
-crf參數的設置範圍是0~50,數值越小代表清晰度越高,建議值域為18~28。
使用-c:s copy參數可以把光盤中的字幕複製到視頻裡。