ffmpeg多线程转码
生活随笔
收集整理的這篇文章主要介紹了
ffmpeg多线程转码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
FROM: http://www.xsdou.com/1470.html
最近需要用ffmpeg進行視頻轉碼,考慮到ffmpeg這個工具本身支持多線程,而服務器也是多核的,想最大程度發揮服務器的計算能力。顯然不能用單線程了,但是線程并不是越多越好,需要找到個平衡點。這就需要用time命令進行計時,并將該屏幕的輸出重定向到文件,以便后期進行分析。
假設我這里有個in.mp4的視頻文件,分辨率為640*480,碼率為580kbps,需要降低分辨率為320*240,降低碼率為290kbps(這個參數和分辨率同時使用時不一定起作用,特別是中途退出時)。
普通降低分辨率,碼率的命令:
?ffmpeg-y-i in.mp4-s 320x240-b290000 out290.mp4
?
帶thread參數的命令:?? ?
ffmpeg -y -threads 2 -i in.mp4 -s 320x240 -b 290000 out290.mp4
這里用了兩個線程。
用time統計時間的命令:?? ?
time ffmpeg -y -threads 2 -i in.mp4 -s 320x240 -b 290000 out290.mp4
輸出重定向命令:
(time ffmpeg -y -threads 2 -i in.mp4 -s 320x240 -b 290000 out290.mp4) 2>1.txt
由于輸出為標準出錯,所以這里用2>1.txt
當然也可使用如下命令:
(time ffmpeg -y -threads 2 -i in.mp4 -s 320x240 -b 290000 out290.mp4) >& 1.txt
為了同時在屏幕上輸出,可以用tee命令。首先將標準出錯重定向到標準輸出,然后通過通道傳給文件,命令如下:
(time ffmpeg -y -threads 2 -i in.mp4 -s 320x240 out290.mp4) 2>&1 | tee 1.txt
如果想測試下服務器到底支持多少個線程比較好,就需要寫個腳本運行,我這里有一個,僅供參考:
#! /bin/bash
echo "Input num : "
read num
for (( i=1; i<=$num; i=i+1 ))
do
??????? #(time ffmpeg -y -threads $i -i in.mp4 -s 320x240 -vcodec libx264 -vpre fast out290.mp4) >& $i.txt
??????? (time ffmpeg -y -threads $i -i in.mp4 -s 320x240 -vcodec libx264 -vpre fast out290.mp4) 2>&1 | tee $i.txt
done
最近需要用ffmpeg進行視頻轉碼,考慮到ffmpeg這個工具本身支持多線程,而服務器也是多核的,想最大程度發揮服務器的計算能力。顯然不能用單線程了,但是線程并不是越多越好,需要找到個平衡點。這就需要用time命令進行計時,并將該屏幕的輸出重定向到文件,以便后期進行分析。
假設我這里有個in.mp4的視頻文件,分辨率為640*480,碼率為580kbps,需要降低分辨率為320*240,降低碼率為290kbps(這個參數和分辨率同時使用時不一定起作用,特別是中途退出時)。
普通降低分辨率,碼率的命令:
?ffmpeg-y-i in.mp4-s 320x240-b290000 out290.mp4
?
帶thread參數的命令:?? ?
ffmpeg -y -threads 2 -i in.mp4 -s 320x240 -b 290000 out290.mp4
這里用了兩個線程。
用time統計時間的命令:?? ?
time ffmpeg -y -threads 2 -i in.mp4 -s 320x240 -b 290000 out290.mp4
輸出重定向命令:
(time ffmpeg -y -threads 2 -i in.mp4 -s 320x240 -b 290000 out290.mp4) 2>1.txt
由于輸出為標準出錯,所以這里用2>1.txt
當然也可使用如下命令:
(time ffmpeg -y -threads 2 -i in.mp4 -s 320x240 -b 290000 out290.mp4) >& 1.txt
為了同時在屏幕上輸出,可以用tee命令。首先將標準出錯重定向到標準輸出,然后通過通道傳給文件,命令如下:
(time ffmpeg -y -threads 2 -i in.mp4 -s 320x240 out290.mp4) 2>&1 | tee 1.txt
如果想測試下服務器到底支持多少個線程比較好,就需要寫個腳本運行,我這里有一個,僅供參考:
#! /bin/bash
echo "Input num : "
read num
for (( i=1; i<=$num; i=i+1 ))
do
??????? #(time ffmpeg -y -threads $i -i in.mp4 -s 320x240 -vcodec libx264 -vpre fast out290.mp4) >& $i.txt
??????? (time ffmpeg -y -threads $i -i in.mp4 -s 320x240 -vcodec libx264 -vpre fast out290.mp4) 2>&1 | tee $i.txt
done
總結
以上是生活随笔為你收集整理的ffmpeg多线程转码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 之 分割参数getopt
- 下一篇: 偏振式投影