有個賣迷片的朋友影片一直無法發佈影片,佛心幫忙看看.
發佈 m3u8
開個 .net core 的 mvc 專案
修改 Startup.cs 的 Configure
預設 .ts 檔會吃到 typescript 所以將它移除
並且加上 .m3u8 , .key , .ts 相對應的 mime 型別
1 | var provider = new FileExtensionContentTypeProvider(); |
由於切割 .ts 檔案並且製作加密需要符合 Aes-128 加密演算法 , 之前用 openssl 產生不曉得是否因為是在 windows 上 , 造成有的 key 無法使用 , 故手動用 .net 自己刻 Aes-128? 好吧偷懶參考大神比較快
建立一個KeyController的ApiController
1 | [Route("api/[controller]")] |
接著新增一個 key.enc 的文字檔把從API取得的值寫進去
接著用 openssl 產生 VI 亂數
1 | $ openssl rand -hex 16 |
接著新增 enc.keyinfo 的文字檔加入以下內容
1 | http://localhost:5000/api/key |
631a942d1e82f749467743256fcecaaa => VI 亂數
將剛剛做好的 enc.key 跟 enc.keyinfo 丟到 ffmpeg 要執行的目錄下 like this:
1 | enc.key |
接著執行以下命令
1 | $ ffmpeg -y -i yourvideo.mp4 -hls_time 12 -hls_key_info_file enc.keyinfo -hls_playlist_type vod -hls_segment_filename "file%d.ts" playlist.m3u8 |
都搞定以後會產生 playlist.m3u8 跟一堆 fileXX.ts
1 | playlist.m3u8 |
回到 mvc 的專案在 wwwroot 底下建立一個 videos 的資料夾將剛剛產生的 .ts playlist.m3u8 都丟到裡面 , 怕 enc.key enc.keyinfo 最好也一起丟進去 , 特別注意在 mvc 專案中 .ts 代表是 typescript 所以先把 .ts 全部選起來 Exclude From Project 否則會造成專案錯誤編譯失敗!
最後在 View/Home/Index.cshtml 補上以下程式碼大概就可以動了!
1 | @{ |
上字幕
這是後來遇到的 , 因為謎片都是沒字幕的 , 朋友想加上字幕又懶得花錢 , 所以只好找了免費仔的方法 pyTranscriber
基本上只要下載以後選擇要的檔案就是無腦用 google api 去產生字幕 , 不過翻譯出來還是需要有人去校正 , 還是滿方便低 ~
另外如果想要把字幕燒在影片上的話可以用 ffmpeg 然後用 powershell 執行像是這樣就可以搞定 , 參考這篇
1 | .\ffmpeg.exe -i "40cm 黑人大戰金剛.mp4" -vf subtitles="40cm 黑人大戰金剛.srt" "40cm 黑人大戰金剛.mp4" |
順帶一提剪片子
這邊有個雷包參數 -t
跟 -to
如果用 -t
的話指的是剪幾秒 , 而 -to
則是剪到那個位置
假設我下面是用 -t
的話會剪從剪 00:30:00
開始然後往後加上 40 分鐘 , 還好這個速度很快 , 不然做迷片的朋友又要欲哭無淚 ~
1 | ./ffmpeg -i "40cm 黑人大戰金剛.mp4" -ss 00:30:00 -to 00:40:00 -async 1 -c copy cut.mp4 |
所以如果我想從 00:30:00
開始剪到 00:40:00
這十分鐘的最後精華片段應該這樣下才對 ~
1 | ./ffmpeg -i "40cm 黑人大戰金剛.mp4" -ss 00:30:00 -to 00:40:00 -async 1 -c copy cut.mp4 |