ffmpeg – 把光碟轉換成MP4

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參數可以把光盤中的字幕複製到視頻裡。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *