視頻轉碼中遇到的坑

最近一直在做視頻方面的工作。在視頻轉碼開發過程中,會遇到各種各樣的問題,有些問題現場就解決了,已滑入湖中,有些印象深刻,
至今難忘。這裏,就把這些印象深刻的問題,或者說是"坑",整理出來,以期給有緣者以助益。

1、中文、空格、亂碼。
這 裏中文、空格、亂碼的問題似乎不是視頻轉碼獨有的問題。但出現在視頻轉碼服務中。主要出現在兩個方面。一方面是業務邏輯中,忽略了對這些特殊字符的處理, 於是,這些字符無法被正確翻譯或是被截斷,造成路徑錯誤。另一方面試底層的ffmpeg本身,雖然ffmpeg號稱視頻處理的瑞士軍刀,但是畢竟是來自西 方的到,似乎到了亞洲不是太靈,對亞洲字符的支持不是太友善。
解決方法:需要從兩方面小心,以防止踩進坑裏:一業務邏輯中對特殊字符進行轉義;二、生成中間文件並重命名。

2、對視頻進行crop時,參考圖片不能全黑。
對視頻進行裁剪時,如果用戶未指定裁剪座標,而是由系統自動識別。這時,通常會截取一張圖片作爲參考圖片,採用圖像識別以確定裁剪位置。即,需要採用圖像識別技術來圈定黑框。因此,這張參考圖片不能全爲黑,否則,圖像識別程序會無法判定裁剪位置。
解決方法:選取參考圖片時,選取多張,然後以裁剪座標圈定範圍面積最大的一張爲準。

3、
aspect不能爲奇數。
根據視頻常識,分辨率不能出現奇數。但是,開發過程中往往容易忽略這個問題,從而造成很多失敗。
解決方法:參數驗證時進行檢查;底層進行調整,將分辨率調整爲偶數

4、注意極端視頻,少於1s的!

在轉碼服務的開發過程中,往往無法考慮這等極端情況。但是真實場景中確實出現了。這會造成截圖失敗,如果用戶指定了截圖時間點爲1s的話。真實場景中很難想到如此極端情況。
解決方法:日誌中突出記錄此類情況。提醒使用方,修改請求參數,比如,時間點可以設爲0。

5、對非視頻截圖。
這 確實是一個讓人哭笑不得的問題。對一個文本文件進行截圖!對一個exe可執行文件進行截圖!這簡直不是一個次元的問題。所以,當一個視頻截圖請求過來跑了 一個小時的時候,驀然回首,發現是對一個文本文件進行截圖。而且截圖程序一遍又一遍地兢兢業業地嘗試截取一張圖片出來。
解決方法:操作之前對被操作對象默默底細,看看人家是不是可被截圖。不要上去就截人家的圖,人家表示很無辜啊!千萬不要鍥而不捨,爲了尊嚴,20次不成,是不是考慮放棄?

6、操作之前,進行預判。是否損壞。是否是視頻或是否是音頻。
嘍,是這個意思。比如,轉碼,好歹搞清楚被轉碼對象是不是一個好的視頻,有沒有損壞。如果已損壞,真不需要再忙活。整容也得被整容者是或者的是不?還有,你對被轉碼對象施加H264轉碼,是不是應該先確定對方有沒有視頻流?
解決方法:1、判斷對方是不是視頻。2、判斷對方是不是健康的視頻。3、判斷對方是不是有視頻流。4、判斷對方是不是有音頻流。5、判斷對方你搞不搞得定(如人家塊頭很大)

7、特殊視頻。如1kfps。
嘍, 這真的跟見識有關。一般認爲視頻不過就25fps、30fps。最大不過60fps。那誰告訴你沒有1kfps?沒錯,沒聽錯,就是有這樣的視頻,你還別 急着說坑爹。嘍,看過動物世界吧?這裏未了抓怕動物不是精彩瞬間,都是會採用超高清攝像機,用以捕捉每一個細節,然後以慢鏡頭的方式呈現在觀衆面前。
解決方法:對此等視頻特殊處理!你的意識到它的存在。

8、用來單元測試的音視頻樣本過少。
嘍,準備了40個音視頻,應該夠了?no,not enough!各種各樣的坑,40個視頻完全無法保證一網打盡所有視頻。可以給你個鏈接:download.wavetlan.com/SVV/Media/HTTP/,見識下視頻的豐富度。
解決方法:大量的樣本庫,並且積累一個問題樣本庫,這個樣本庫中有所有容易出problem的視頻。如果,這個problem庫能通過,你纔敢找qa測試。同時,隨着時間的積累,你應該不同豐富你的測試庫。

9、ffmpeg獲取視頻元信息對flac的size、arate獲取不準確的問題
獲取視頻元信息是對flac格式的音頻的size和arate獲取不準確。而且,不是對所有的flac的音頻都不準確,是對部分flac的音頻不準確。恕本人才疏學淺,無法確知其中緣由。
解決方法:暫無(參考10,曲線獲取?)。似乎可以給ffmpeg開發小組提bug?

10、aac格式的音頻,ffmpeg獲取duration不準確的問題。
嘍ffmpeg獲取aac格式的音頻也會概率性低出現不準確的情況。如果需要拿duration進行計算,就會踩進坑中。
解決方法:把aac給整成mp3,然後再獲取這些元信息。因爲mp3的元信息會準確獲得。


all right。一般湊10爲整。還有其他坑將在之後的文章中補充。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章