ffmpeg的常用命令

記錄一下經(jīng)常用到的ffmpeg使用方法、hevc官方軟件HM的使用,以及shell腳本的配套使用
另外,對于ffmpeg的參數(shù)設(shè)置可以參考https://blog.csdn.net/hemingwang0902/article/details/4382205
http://m.itdecent.cn/p/a035056cbbf9
具體比較詳細(xì)的應(yīng)用可以參考http://m.itdecent.cn/p/b4f9f8c5e86a
https://zhuanlan.zhihu.com/p/46903150

(一) ffmpeg的常用操作

1.使用ffmpeg把jpg格式的圖片轉(zhuǎn)換成yuv420p格式
ffmpeg -i path/name.jpg -s 352x288 -pix_fmt yuv420p savepath/name.yuv
-s 352x288是圖片的width和height參數(shù),可以省略
-pix_fmt yuv420p是指定要轉(zhuǎn)換的yuv的格式,若想轉(zhuǎn)換成yuv422p格式的話直接替換就行

2.使用ffmpeg把yuv格式的圖片轉(zhuǎn)換成jpg格式
ffmpeg -s 352x288 -pix_fmt yuv420p -i path/name.yuv -pix_fmt rgb24 savepath/name.jpg
這里的格式是轉(zhuǎn)換成rgb24位。若想要存成png格式,改變要保存的圖片的后綴即可

3.使用ffmpeg把MP4格式的視頻轉(zhuǎn)換成yuv格式
ffmpeg -i path/name.avi -c:v rawvideo -pix_fmt yuv420p path/name.yuv -video_size 320x480
這里-c:v和-vcodec是等價的

4.把yuv格式的視頻轉(zhuǎn)換成avi格式
ffmpeg -s 320x480 -i path/name.yuv -vcodec copy path/name.avi
-s設(shè)置視頻的長寬參數(shù),copy表示copy表示原始編解碼數(shù)據(jù)必須被拷貝,轉(zhuǎn)換前后視頻的大小不變,也可以換成mpeg4等編碼格式

5.ffmpeg將一個視頻切成多張圖片
ffmpeg -i path/name.avi savepath/Frame%3d.png

6.ffmpeg將多張圖片合成一個視頻
ffmpeg -r 30 -i path/Frame%3d.png -vcodec libx264 name.avi
-r設(shè)置幀率,-vcodec可以選擇要合成的視頻的編碼格式,如果是copy的話合成的視頻就會比較大,其他很多都是帶壓縮的比如libx264,mpeg4等,有些在linux下可以打開,而在win下卻不能直接用系統(tǒng)自帶視頻播放器查看,但是可以自己下載適合的視頻播放器。
這里的圖片名字需要不間斷的%3d的格式,因為合成的時候需要一個順序

7.使用ffplay播放yuv格式的視頻或圖片
ffplay -i name.yuv -video_size 352x288
-video_size設(shè)置窗口格式,不能省略,也可以使用-s

如果是只想查看yuv視頻的Y通道
ffplay -s 352x288 -vf extractplanes='y' 1.yuv

(二)使用TAppEncoder來得到h.265壓縮編碼格式

HEVC/H.265相較于H.264來說,編碼更加自由,壓縮效率會更好,并且能在有限的帶寬下傳輸更高質(zhì)量的網(wǎng)絡(luò)視頻,只需原先H.264編碼的一半帶寬即可傳輸相同質(zhì)量的視頻,并且編碼效率也是H.264的兩倍,壓縮率更高。

對于HEVC的官方軟件HM的使用方法以及使用工具TAppEncoder等的安裝可參考https://blog.csdn.net/leixiaohua1020/article/details/49912113
https://blog.csdn.net/liangjiubujiu/article/details/80573548
這些教程主要是介紹windows下的使用方法,如果想在linux(如ubuntu)環(huán)境下使用的話,可以參考https://www.cnblogs.com/gjianw217/p/3505295.html

使用HEVC編碼格式對視頻進(jìn)行壓縮時,需要把視頻先轉(zhuǎn)換成yuv格式
如果原視頻是mp4、avi等格式可以參考上面的ffmpeg轉(zhuǎn)換方法,如果是y4m格式的視頻可以用下面的方法
mencoder **.y4m -ovc raw -of rawvideo -vf format=i420 -o **.yuv

而且需要對配置文件cfg根據(jù)實際需要進(jìn)行個性化編寫(有很多參考的cfg文件)
./TAppEncoderStatic -c encoder_intra_main37.cfg -i path/name.yuv -wdt 352 -hgt 288 -b binpath/name-37.bin -o savepath/name-37.yuv
-b保存壓縮的比特流,-o為解壓后的有損視頻
這里的關(guān)鍵是-c參數(shù),指定cfg配置文件,intra_main表示全i幀,lowdelay表示i幀和b幀,lowdelay_P表示i幀和p幀,具體區(qū)別可看https://blog.csdn.net/snowsnowsnow1991/article/details/48491099
https://blog.csdn.net/liangjiubujiu/article/details/80576873
https://blog.csdn.net/tianzhaixing2013/article/details/8773635

(三)

如果是在linux里面想同時處理多個任務(wù)的時候可以使用腳本語言來操作
這里用一些例子記錄一些平時用的比較多的語法

# 對于for循環(huán)的使用
for num in {1..8}
do
    cp 321x481/15004.jpg ceshi/$num.jpg
    echo $num
done
ffmpeg -i ceshi/%d.jpg ceshi/15004.avi
rm ceshi/*.jpg
# 讀取文件夾下的文件列表、對if語句的使用、提取文件名、批量壓縮視頻
path=./yuvs/tntsvc/
files=$(ls $path)
for filename in $files
do
    name=${filename%%.*}
    namea=${name%%_*}
    nameb=${name##*_}
    if [ $nameb == "cif" ]; then
        ./TAppEncoderStatic -c encoder_intra_main37.cfg -i yuvs/tntsvc/$name.yuv -wdt 352 -hgt 288 -b dataset/37/bins/$name-37.bin -o dataset/37/yuvs/$name-37.yuv
        ./TAppEncoderStatic -c encoder_intra_main42.cfg -i yuvs/tntsvc/$name.yuv -wdt 352 -hgt 288 -b dataset/42/bins/$name-42.bin -o dataset/42/yuvs/$name-42.yuv
    elif [ $nameb == "4cif" ]; then
        ./TAppEncoderStatic -c encoder_intra_main37.cfg -i yuvs/tntsvc/$name.yuv -wdt 704 -hgt 576 -b dataset/37/bins/$name-37.bin -o dataset/37/yuvs/$name-37.yuv
        ./TAppEncoderStatic -c encoder_intra_main42.cfg -i yuvs/tntsvc/$name.yuv -wdt 704 -hgt 576 -b dataset/42/bins/$name-42.bin -o dataset/42/yuvs/$name-42.yuv
    fi
done
# 變量num實現(xiàn)自加、整數(shù)轉(zhuǎn)換成string以及ffmpeg的批量操作
path=tennis
files=$(ls $path)
num=-1
for filename in $files
do
    num=`expr $num + 1`;
    var=$(printf "%03d" "$num")
    name=${filename%%.*}
    geshi=${filename%%*.}
    nameb=${filename##*.}
    echo $filename, $name , $geshi , $nameb
    if [ $nameb == "png" ]; then
        rm $path/$filename
    fi
    ffmpeg -s 352x240 -i $path/$filename -vcodec copy imgs/Frame$var.png
done
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容