1. 程式人生 > >如何最快地批量執行音視訊轉碼

如何最快地批量執行音視訊轉碼

    為什麼要有這個需求?我們知道,單純的轉format ,不轉codec ,其實僅僅是io 操作,這個操作是很快的,但是一旦需要decodec & encodec ,這個操作是非常耗時,耗cpu的,因為這個地方有解壓縮和壓縮的操作。如果批量任務需要轉碼,而且是同時轉碼成不同的格式,這裡,我們希望能一次decodec 多次encodec 就好,相當於節省了decodec 的時間。

    思路有了,其實做起來,整個過程就簡單多了,首先分離音視訊流;然後轉碼視訊成yuv ,轉碼音訊;最後將音視訊按模板進行合成。

    下面實際檔案舉例:    

1,解碼視訊 ffmpeg -i input.flv out.yuv

2,分離音訊 ffmpeg -i input.flv -acodec copy out.aac

3.1, 轉碼視訊併合成音訊流 位元速率500k ffmpeg -s 1280x720 -i out.yuv -i out.aac -vcodec h264 -b 500k out.flv
3.2, 轉碼視訊併合成音訊流 位元速率1000k ffmpeg -s 1280x720 -i out.yuv -i out.aac -vcodec h264 -b 1000k out.flv

    多模板轉碼,主要是在步驟3上,3可以重複使用,最後刪去中間的yuv 檔案即可。然後轉碼得提前知道yuv 的解析度,可以使用ffprobe ,不然轉碼會失敗。