主頁 >  其他 > FFmpeg使用中經驗總結

FFmpeg使用中經驗總結

2022-04-16 07:01:58 其他

FFmpeg使用中經驗總結(https://ffmpeg.org/)

命令摘抄自網路,最下面的圖片和視頻的操作是經過學習之后自己的使用心得,

我的需求是,把圖片按照固定時間間隔生成視頻,同時還要對視頻進行切割,切割條件是根據背景圖片的高度來裁剪,寬度不變,那么iw是不變的,ih是動態的,但是制作視頻時候是有size適配的,不能太變態了,所以還要計算適配具體不同的螢屏比例,比如16:9還是9:16等等,已經做成了可執行的jar檔案,公司內部批處理,

一、

ffmpeg -f image2 -i image1.jpg -vcodec libx264 -r 10 tt.mp4
我用這個命令執行,一晃而過,沒成,然后我在-r前給加上-t10秒,一樣不行,有人說行,網上都是這樣的命令,但不管用啊【問題1:哪里錯了嗎】


ffmpeg -f image2 -loop 1 -i image1.png -s 500x500 -t 00:00:10.67 -pix_fmt yuvj420p -vb 3000k pout.mp4
我用這個命令實作了圖片轉視頻,但如何在他的后面在加視頻呢?想在一個命令下實作,【問題2】


ffmpeg -ss 0 -t 3 -f lavfi -i color=c=0x000000:s=544x960:r=30 -i "image1.jpg" -filter_complex "[1:v]scale=960:540[v1];[0:v][v1]overlay=0:0[outv]" -map [outv] "Vgrd.mp4"
用這個命令也實作了,而且這個也好拼視頻(說好是因為我會),而且這個命令如果直接拼視頻concat的話,解析度首先得一樣,【問題3:有沒有解決方法?必須先調解析度嗎】


如果加的視頻先overlay到0:v,最前面的-t 3給圖片和視頻都分配了3秒,而且視頻并沒有播放【問題4:不知道為什么不能播放,如何解決】,


還有命令實在是挺長的,【問題5:有沒有簡單的?】


再者就是實在是太慢了,有時候測驗命令幾分鐘都不完(可能是寫錯了),【不知道怎的】

frame=XXX, fps=XX q=X……就沒完了,有時候還卡機,有時候得好幾行,
ffmpeg -f lavfi -i color=c=0x000000:s=544x960:r=30 -ss 0 -t 10 -i "image1.jpg" -ss 0 -t 20 -i 2.mp4 -filter_complex "[1:v]scale=960:540[v1];[0:v][v1]overlay=0:0[outv1];[0:v][v2]overlay=0:0[outv2];[outv1][outv2]concat[outv]" -map [outv] "Vgrd.mp4"
這條命令就卡機了,圖片和視頻分別overlay之后,在concat,


發現圖片轉視頻比處理視頻花的時間長多了,哎,就處理一張圖,如果處理多張又該咋整呢?但加image%d,顯然差點事【問題6】

解決:
我用你第一段的圖片轉視頻命令生成了3秒mp4,再跟主視頻合并,解決了我的問題,謝謝,
ffmpeg -f image2 -loop 1 -i image1.jpg -s 1280x720 -t 00:00:05 -pix_fmt yuvj420p -vb 3000k 1.mp4
ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
搞定
這段代碼只有一個輸入引數,就是image1.jpg,那就把image1.jpg用%1替換,然后把命令保存成一個bat檔案,例如a.bat,使用時,cmd里運行a.bat image1.jpg 即可,就把第一個引數image1.jpg當成引數%1傳進去了,不用每次寫那一大段命令了,

二、ffmpeg修改視頻檔案的解析度

這種方法是在Linux系統(幾乎任何發行版)中調整視頻檔案大小的最佳方法之一,也是Windows和Mac用戶的絕佳替代方案,
更改視頻檔案的解析度將是我們在處理視頻檔案時將執行的最常見操作之一,因此ffm??peg能夠完美地完成此操作,我們應該想要更改視頻檔案的解析度有幾個原因,例如:

減少視頻的大小,這可以通過降低視頻的解析度來實作,如果我們采用高清(1920x1080像素)的視頻,但我們知道我們永遠不會在支持比1024x768更高解析度的螢屏上看到,我們可以降低視頻解析度以適應這種新解析度,從而節省大量存盤空間空間,如果在互聯網上使用,也可以節省帶寬,
很多時候,視頻檔案的解析度會發生變化,從而使其格式標準化,也就是說,如果我們有幾個視頻并且我們希望它們都在同一解析度下,則必須經歷這個改變解析度的程序,
在現代網站的開發中,根據它們出現的位置來分辨各種解析度的視頻是非常有用的,我們可以開發具有回應式設計的網站,其中最適合用戶的視頻播放,例如,如果我們有各種格式的視頻 - 我們說1920x1080,1280x720和640x360-我們可以設計一個回應式網站,讓訪問者根據訪問者瀏覽器節省帶寬重現正確的視頻解析度(請記住,移動用戶通常支付傳輸資料,因此最好盡可能少地傳輸流量)

在這個例子中,我們將高清格式(1920x1080像素)的視頻解析度降低到640x360(對于寬高比16:9,這是一個相當常用的配置):

1
ffmpeg -i video_1920.mp4 -vf scale=640:360 video_640.mp4 -hide_banner
僅需要使用-vf scale = 640:360以新的所需解析度(640:360)指示縮放視頻濾波器  ,要考慮:

我們可以指出我們想要的任何解析度,但生成的視頻將始終具有相同的寬高比,也就是說,它不會扭曲影像,如果視頻的寬高比為16:9,它將保持視頻的16:9寬高比,該程式將調整生成的視頻,使其符合我們給出的解析度,
更改解析度時,視頻必須再次進行編碼程序,因此根據輸出格式和用于輸出的編解碼器,程序可能會很慢,
我們還沒有提到它,但大多數時候  將視頻轉換為更高的解析度  是沒有意義的,因為視頻質量沒有任何改善,
更改視頻寬高比
如果我們想要改變視頻的外觀,知道影像會顯得扭曲,我們可以使用額外的過濾器“ setdar”,想象一下,在前一種情況下,我們想要將16:9的寬高比改為4:3,因此視頻的解析度為4:3寬高比,在這種情況下,它將是640x480,進行此轉換的ffmpeg命令將是:
1
ffmpeg -i video_1920.mp4 -vf scale=640:480,setdar=4:3 video_640x480.mp4 -hide_banner
我們在這種情況下獲得的視頻輸出  video_640x480.mp4  改變了原始視頻的外觀并且稍微扭曲了影像,但它將以新的外觀獲得我們想要的解析度,

另一方面,如果我們不想依賴于使用可能“更正常”  (4:3,16:9)的寬高比  ,或者如果我們想要對具有未定義寬高比的其他解析度進行更改,我們是我們不會害怕可能出現的影像變形,我們可以使用“ setsar”  過濾器,這樣可以避免必須保持這些寬高比,通過這種方式,我們可以使用以下命令將之前的視頻轉換為200x400的解析度:
1
ffmpeg -i video_1920.mp4 -vf scale=200:400,setsar=1:1 video_200x400.mp4 -hide_banner
從1920x1080解析度的200x400解析度的結果使視頻輸出具有扭曲的外觀,

視頻大小調整的示例
我們將看到一些使用ffmpeg調整視頻大小的示例,我們有一個原始視頻,解析度為320x180像素,這里是,

正如我們之前看到的,我們可以將視頻大小調整為原始大小的一半,我們使用以下命令將其從320x180像素解析度調整為160x90像素解析度:	
1
ffmpeg -i video_320x180.mp4 -vf scale=160:90 video_180x90.mp4 -hide_banner
  

該視頻的大小從1.18MB變為354KB視頻(四分之一),結果如下:

請注意,視頻較小,但我們可以告訴瀏覽器將其放大,與原始視頻相比會有一些質量損失,

現在讓我們將原始視頻寬高比從16:9更改為4:3,為此,我們使用以下命令將視頻從320x180調整為320x240:
1
ffmpeg -i video_320x180.mp4 -vf scale=320:240,setdar=4:3 video_320x240.mp4 -hide_banner
這是結果(你可以看到影像看起來扭曲):

現在終于我們將調整視頻大小,就好像它必須適合垂直螢屏一樣,因此我們將尺寸從320x180像素調整為180x320像素,這是執行任務的命令:

1
ffmpeg -i video_320x180.mp4 -vf scale=180:320,setsar=1:1 video_180x320.mp4 -hide_banner

這是扭曲的結果:

請注意,在此視頻中,我還包含了webm格式的源代碼,以實作最大兼容性,我這樣做了所以如果您的瀏覽器無法直接使用mp4檔案,您可以在類似的webm檔案中看到結果,

三、FFmpeg將多張圖片合成視頻

首先要計算出視頻的總幀數:

總幀數 = duration * fps ,

duration是我們設定的視頻的長度,fps是視頻每秒的幀數,

第二步將所有的圖片檔案放到一個臨時目錄,并且制定一個命名規則(可正則的):
例如圖片的素材是image0.jpg image1.jpg image2.jpg

然后可以執行命令合成視頻了:

帶音頻:

ffmpeg -threads2 -y -r 10 -i /tmpdir/image%04d.jpg -i audio.mp3 -absf aac_adtstoasc output.mp4
1
引數的解釋含義:

-threads 2 以兩個執行緒進行運行, 加快處理的速度,

-y 對輸出檔案進行覆寫

-r 10 fps設定為10幀/秒(不同位置有不同含義,后面再解釋)

-i /tmpdir/image%04d.jpg 輸入圖片檔案,圖片檔案保存為 image0001.jpg image0002.jpg ….

-i audio.mp3 輸入的音頻檔案

-absf aac_adtstoasc 將結果的音頻格式轉為faac格式時需要這個選項,將音頻格式轉為faac是因為在iphone上某些音頻格式的視頻無法播放,例如mp3. 但faac格式的音頻的視頻在iphone上可以播放,-absf 的意思是設定一個bitstream filter進行某些轉換,可以用ffmpeg -bsfs 查看所有支持的bitstream filter, bitstream filter和 aac_adtstoasc的具體含義我也說不上,但是如果不用這個選項又會導致轉換失敗,

不帶音頻

ffmpeg -loop 1 -f image2 -i /tmpdir/image%04d.jpg -vcodec libx264 -r 10 -t 10 test.mp4
1
-loop 1回圈讀輸入 0讀完就不讀了
-vcode 編碼格式libx264
-b 指定200k碼率
-t 輸出視頻總時長:

這樣運行命令就可以生成視頻了;

從不同目錄下多張圖合成視頻
上面命令需要從指定檔案夾下的特殊命名規則的一組圖中去做輸入檔案;有沒有更好的方式呢?比如我有一些圖片的存盤路徑,能不能不拷貝到一個檔案夾下再操作,答案是有的,
1. 使用管道Pipe
2. 使用Concat命令

Pipe
You can use cat or other tools to pipe to ffmpeg:
cat讀取多張圖片輸入到一個“全域管道檔案”中,然后后面ffmpeg命令從全域管道中(指定-f image2pipe)讀取輸入檔案,生成視頻,

cat Desktop/aa/img1.jpg Desktop/aa/img2.jpg Desktop/aa/img3.jpg | ffmpeg -loop 0 -f image2pipe -r 3 -b 200k -s 640*360 -t 12 -i log.pipe -y Desktop/oup.mkv
1
這個命令在linux、Mac OS、Windows上都是可行的,但是在安卓中不行,可能是ffmpeg找不到那個“全域管道”,
那么我們可以自己創建一個管道,然后告訴ffmpeg管道在哪?

創建管道:

mkfifo Desktop/pic.pipe
1
向管道輸入檔案:

cat Desktop/aa/img1.jpg Desktop/aa/img2.jpg > Desktop/pic.pipe
1
使用ffmpeg讀取管道,生成視頻:

ffmpeg -loop 0 -f image2pipe -r 3 -b 200k -s 640*360 -t 12 -i Desktop/pic.pipe -y Desktop/oup.mp4
1
這里pic.pipe的路徑子安安卓上要換成安卓的路徑:Environment.getExternalStorageDirectory().getAbsolutePath()下面

管道檔案非常,非常強大,更多管道知識:

【Linux】mkfifo命令創建命名管道實作行程之間通信
【Linux】行程間通信-命名管道FIFO

Concat
首先,創建個input.txt檔案,填寫圖片資訊:

file 檔案路徑
duration 這張圖播放時長

file '/Users/wangshuainan/Desktop/aa/imga.jpg'
duration 5
file '/Users/wangshuainan/Desktop/aa/imgb.jpg'
duration 1
file '/Users/wangshuainan/Desktop/aa/imgc.jpg'
duration 3
file '/Users/wangshuainan/Desktop/aa/imgc.jpg'

注意!!! 最后一個圖要重復寫一遍,但不用加duration,

然后run ffmpeg command:

ffmpeg -f concat -safe 0 -i Desktop/input.txt -vsync vfr -pix_fmt yuv420p Desktop/output.mp4
1
這里命令里要加上-safe 0,不然會報unsafe file name的error,不要問我怎么知道的,

參考:

https://trac.ffmpeg.org/wiki/Slideshow

容易誤解的幾個命令:
下面解釋下幾個特殊命令的特殊含義:
-t duration
用做輸入選項(在-i之前),是限制讀取輸入檔案的的時長;
用做輸出選項(before an output url),超過這個時間停止寫輸出檔案;
比如:回圈讀取一個輸入檔案時(-loop 1),當到時間就會停止輸出,生成一個duration時長的視頻,但是如果沒有回圈選項,而且輸入檔案短于這個時長時,就會隨著輸入檔案結束就結束,生成視頻,視頻時長小于duration,所以我們可以看出 -t 并不僅僅是輸出檔案時長,
當用“管道”時,也不太一樣,管道讀了之后,里面內容就沒了,所以沒持續的輸入,這個-loop,-t 都是“不起作用的”,除非管道一直有內容,

-t duration (input/output)
When used as an input option (before -i), limit the duration of data read from the input file.

When used as an output option (before an output url), stop writing the output after its duration reaches duration.

duration must be a time duration specification, see (ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual.

-to and -t are mutually exclusive and -t has priority.

-r fps
幀率,可以指定兩個幀率,輸入幀率,輸出幀率;
輸入幀率:-i之前,設定讀入幀率,比如 -r 0.5 ,也就是說1秒要播0.5個圖片,那么一個圖也就是要播2s;
輸出頻率:-i之后,真正的輸出視頻播放幀率,不寫話,是默認和輸入頻率一樣,比如設 -r 30 ,對應上面的設定,一個圖播2
s,那么輸出檔案播放時,這2s內,都是這張圖,但是播放了60幀,

You can specify two frame rates: input and output.

Set input frame rate with the -framerate input option (before -i). The default for reading inputs is -framerate 25 which will be set if no -framerate is specified.
The output frame rate for the video stream by setting -r after -i or by using the fps filter. If you want the input and output frame rates to be the same, then just declare an input -framerate and the output will inherit the same value (meaning you can omit the -r).
By using a separate frame rate for the input and output you can control the duration at which each input is displayed and tell ffmpeg the frame rate you want for the output file. This is useful if your player cannot handle a non-standard frame rate. If the input -framerate is lower than the output -r then ffmpeg will duplicate frames to reach your desired output frame rate. If the input -framerate is higher than the output -r then ffmpeg will drop frames to reach your desired output frame rate.

In this example each image will have a duration of 5 seconds (the inverse of 1/5 frames per second). The video stream will have a frame rate of 30 fps by duplicating the frames accordingly:

ffmpeg -framerate 1/5 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
1
參考:
FFmpeg官網:
http://ffmpeg.org/ffmpeg.html
https://trac.ffmpeg.org/wiki/Slidesh

四、linux 下多個圖片合并,FFmpeg將多張圖片合成視頻

cat Z000*.jpg | ffmpeg  -r 3 -t 12 -i pipe:0 -y -b 200K out.mp4

FFmpeg將多張圖片合成視頻

首先要計算出視頻的總幀數:

總幀數 = duration * fps ,

duration是我們設定的視頻的長度,fps是視頻每秒的幀數,

第二步將所有的圖片檔案放到一個臨時目錄,并且制定一個命名規則(可正則的):

例如圖片的素材是image0.jpg image1.jpg image2.jpg

然后可以執行命令合成視頻了:

帶音頻:

點擊(此處)折疊或打開

ffmpeg -threads2 -y -r 10 -i /tmpdir/image%04d.jpg -i audio.mp3 -absf aac_adtstoasc output.mp4

引數的解釋含義:

-threads 2 以兩個執行緒進行運行, 加快處理的速度,

-y 對輸出檔案進行覆寫

-r 10 fps設定為10幀/秒(不同位置有不同含義,后面再解釋)

-i /tmpdir/image%04d.jpg 輸入圖片檔案,圖片檔案保存為 image0001.jpg image0002.jpg ….

-i audio.mp3 輸入的音頻檔案

-absf aac_adtstoasc 將結果的音頻格式轉為faac格式時需要這個選項,將音頻格式轉為faac是因為在iphone上某些音頻格式的視頻無法播放,例如mp3. 但faac格式的音頻的視頻在iphone上可以播放,-absf 的意思是設定一個bitstream filter進行某些轉換,可以用ffmpeg -bsfs 查看所有支持的bitstream filter, bitstream filter和 aac_adtstoasc的具體含義我也說不上,但是如果不用這個選項又會導致轉換失敗,

不帶音頻

點擊(此處)折疊或打開

ffmpeg -loop 1 -f image2 -i /tmpdir/image%04d.jpg -vcodec libx264 -r 10 -t 10 test.mp4

-loop 1回圈讀輸入 0讀完就不讀了

-vcode 編碼格式libx264

-b 指定200k碼率

-t 輸出視頻總時長:

這樣運行命令就可以生成視頻了;

從不同目錄下多張圖合成視頻

上面命令需要從指定檔案夾下的特殊命名規則的一組圖中去做輸入檔案;有沒有更好的方式呢?比如我有一些圖片的存盤路徑,能不能不拷貝到一個檔案夾下再操作,答案是有的,

1. 使用管道Pipe

2. 使用Concat命令

Pipe

You can use cat or other tools to pipe to ffmpeg:

cat讀取多張圖片輸入到一個“全域管道檔案”中,然后后面ffmpeg命令從全域管道中(指定-f image2pipe)讀取輸入檔案,生成視頻,

點擊(此處)折疊或打開

cat Desktop/aa/img1.jpg Desktop/aa/img2.jpg Desktop/aa/img3.jpg | ffmpeg -loop 0 -f image2pipe -r 3 -b 200k -s 640*360 -t 12 -i log.pipe -y Desktop/oup.mkv

這個命令在linux、Mac OS、Windows上都是可行的,但是在安卓中不行,可能是ffmpeg找不到那個“全域管道”,

那么我們可以自己創建一個管道,然后告訴ffmpeg管道在哪?

點擊(此處)折疊或打開

創建管道:

mkfifo Desktop/pic.pipe

1

向管道輸入檔案:

cat Desktop/aa/img1.jpg Desktop/aa/img2.jpg > Desktop/pic.pipe

1

使用ffmpeg讀取管道,生成視頻:

ffmpeg -loop 0 -f image2pipe -r 3 -b 200k -s 640*360 -t 12 -i Desktop/pic.pipe -y Desktop/oup.mp4

1

這里pic.pipe的路徑子安安卓上要換成安卓的路徑:Environment.getExternalStorageDirectory().getAbsolutePath()下面

Concat

首先,創建個input.txt檔案,填寫圖片資訊:

點擊(此處)折疊或打開

file 檔案路徑

duration 這張圖播放時長

file '/Users/wangshuainan/Desktop/aa/imga.jpg'

duration 5

file '/Users/wangshuainan/Desktop/aa/imgb.jpg'

duration 1

file '/Users/wangshuainan/Desktop/aa/imgc.jpg'

duration 3

file '/Users/wangshuainan/Desktop/aa/imgc.jpg'
注意!!! 最后一個圖要重復寫一遍,但不用加duration,

然后run ffmpeg command:

點擊(此處)折疊或打開

ffmpeg -f concat -safe 0 -i Desktop/input.txt -vsync vfr -pix_fmt yuv420p Desktop/output.mp4

容易誤解的幾個命令:

下面解釋下幾個特殊命令的特殊含義:

-t duration

用做輸入選項(在-i之前),是限制讀取輸入檔案的的時長;

用做輸出選項(before an output url),超過這個時間停止寫輸出檔案;

比如:回圈讀取一個輸入檔案時(-loop 1),當到時間就會停止輸出,生成一個duration時長的視頻,但是如果沒有回圈選項,而且輸入檔案短于這個時長時,就會隨著輸入檔案結束就結束,生成視頻,視頻時長小于duration,所以我們可以看出 -t 并不僅僅是輸出檔案時長,

當用“管道”時,也不太一樣,管道讀了之后,里面內容就沒了,所以沒持續的輸入,這個-loop,-t 都是“不起作用的”,除非管道一直有內容,

-t duration (input/output)

When usedasaninput option (before-i), limitthedurationofdatareadfromtheinputfile.

When usedasanoutput option (beforeanoutput url), stop writingtheoutputafterits duration reaches duration.

duration must beatimeduration specification, see (ffmpeg-utils)theTime duration sectionintheffmpeg-utils(1) manual.

-toand-t are mutually exclusiveand-t has priority.

-r fps

幀率,可以指定兩個幀率,輸入幀率,輸出幀率;

輸入幀率:-i之前,設定讀入幀率,比如 -r 0.5 ,也就是說1秒要播0.5個圖片,那么一個圖也就是要播2s;

輸出頻率:-i之后,真正的輸出視頻播放幀率,不寫話,是默認和輸入頻率一樣,比如設 -r 30 ,對應上面的設定,一個圖播2

s,那么輸出檔案播放時,這2s內,都是這張圖,但是播放了60幀,

You can specify two frame rates: input and output.

Set input frame rate with the -framerate input option (before -i). The default for reading inputs is -framerate 25 which will be set if no -framerate is specified.

The output frame rate for the video stream by setting -r after -i or by using the fps filter. If you want the input and output frame rates to be the same, then just declare an input -framerate and the output will inherit the same value (meaning you can omit the -r).

By using a separate frame rate for the input and output you can control the duration at which each input is displayed and tell ffmpeg the frame rate you want for the output file. This is useful if your player cannot handle a non-standard frame rate. If the input -framerate is lower than the output -r then ffmpeg will duplicate frames to reach your desired output frame rate. If the input -framerate is higher than the output -r then ffmpeg will drop frames to reach your desired output frame rate.

In this example each image will have a duration of 5 seconds (the inverse of 1/5 frames per second). The video stream will have a frame rate of 30 fps by duplicating the frames accordingly:

ffmpeg -framerate 1/5 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

五、ffmpeg 圖片合成視頻黑屏 不兼容問題合成MP4

使用-pix_fmt yuv420p最大化兼容性參考
“默認情況下,使用libx264時,根據您的輸入,ffmpeg
將嘗試避免顏色二次采樣,從技術上講,這是
的首選,但不幸的是,幾乎所有的視頻播放器ng
FFmpeg播放器,許多在線視頻服務僅支持
YUV顏色空間以及4:2:0色度二次采樣,
選項 -pix_fmt yuv420p 或 -vf format = yuv420p 將使
最大化兼容性,”

ffmpeg -i ./frames_%10d.png -pix_fmt yuv420p 5.mp4

六、將多張圖片合成視頻

Concat
首先,創建個input.txt檔案,填寫圖片資訊:
file 檔案路徑
duration 這張圖播放時長

file '/Users/wangshuainan/Desktop/aa/imga.jpg'
duration 5
file '/Users/wangshuainan/Desktop/aa/imgb.jpg'
duration 1
file '/Users/wangshuainan/Desktop/aa/imgc.jpg'
duration 3
file '/Users/wangshuainan/Desktop/aa/imgc.jpg'
注意!!! 最后一個圖要重復寫一遍,但不用加duration,

合并
輸入命令:

ffmpeg -f concat -safe 0 -i input.txt -vsync vfr -pix_fmt yuv420p output1.mp4
ffmpeg -f concat -safe 0 -i E:/smartpen/20220407/BP1-9B5-007-46/1713.536.33.61.txt -vcodec libx264 -b:v 600k -preset medium -crf 10 -vsync vfr -pix_fmt yuv422p -s 2480*3600 20020407-04.mp4
ffmpeg -f concat -safe 0 -i E:/smartpen/20220407/BP1-9B5-007-46/1713.536.33.61.txt -r 20 -vf crop=iw:500:0:800 -vsync vfr -pix_fmt yuv444p -s 3600*5400 20020407-04.mp4

七、視頻裁剪

1.按照xy坐標來裁剪

/*iw: 輸入寬度;ih:輸入高度;x:x軸起始坐標;y:y軸其實坐標*/
ffmpeg.exe -i e:/smartpen/tmp.mp4 -vf crop=iw:ih/3:0:2*ih/3 e:/smartpen/temp03.mp4
/*3508:點陣筆背景圖原影像素高;
  1300:點陣筆背景圖原圖高度起始坐標點高度;
  2300:點陣筆背景圖原圖高度結束坐標點高度;
  1080:視頻高度;
  1080*(2300-1300)/3508:在視頻內截取與原圖等比的高度
  1080*1300/3508:視頻內與原圖等比的y軸起始點
  ffmpeg.exe -i e:/smartpen/tmp.mp4 -vf crop=iw:1080*(2300-1300)/3508:0:1080*1300/3508 e:/smartpen/temp04.mp4
*/
ffmpeg.exe -i E:/smartpen/2022-03-16101536/BP1-9B5-007-46/1713.536.33.61-BP1-9B5-007-46.mp4 -vf crop=iw:1080*900/3508:0:0 E:/smartpen/2022-03-16101536/BP1-9B5-007-46/01.mp4
09:50:56
10:07:43
10:10:29
ffmpeg.exe -ss 1228 -i E:/smartpen/2022-03-16101536/BP1-9B5-007-46/1713.536.33.61-BP1-9B5-007-46.mp4 -vf crop=iw:1080*(3508-2180)/3508:0:1080*2180/3508 E:/smartpen/2022-03-16101536/BP1-9B5-007-46/04.mp4

ffmpeg -i E:/smartpen/2022-03-16101536/BP1-9B5-007-46/02.mp4 -vf scale=-1:320 E:/smartpen/2022-03-16101536/BP1-9B5-007-46/020.mp4

ffmpeg -r 20 -loop 1 -i demo.jpg -pix_fmt yuv420p -vcodec libx264 -b:v 600k -preset medium -crf 30 -t 6.700 -y out.mp4


引數介紹:
-r 設定幀率
-loop 回圈次數
-pix_fmt 像素格式(yuv420p yuvj420p yuv422p yuvj422p yuv444p yuvj444p nv12 nv16 nv21...) windwos media player 只支持yuv420p
-vcodec 視頻編碼器
-b:v 控制平均碼率
-preset 編碼效率(medium、fast),越快質量越差
-crf 范圍 0-51: 0是編碼毫無丟失資訊, 23 is 默認, 51 是最差的情況,相對合理的區間是18-28. 值越大,壓縮效率越高,但也意味著資訊丟失越嚴重,輸出影像質量越差,
-vframes -r的舊寫法
-t 持續時間
-y 覆寫檔案

test_num_1 尺寸 切分的視頻基本都按照16:9制作,第一題從頂端向下到題目結束,高度為960px,寬度跟隨高度等比縮放,
	需要設定兩個引數,
	第一個是裁剪-vf crop=iw:ih:x:y   示例:iw:560:0:800 iw:設定為默認寬度,ih設定為具體要裁剪的高度,x設定為0(x軸不裁剪的話就從0開始),y設定為題目頂端的坐標值
	第二個引數像素設定: -pix_fmt yuv422p 
	第三個引數:-s 996*560 解釋:因為高度為560,那么寬度自適應(比例為16:9),那么寬度計算方法是560*16/9=996(約等于偶數整數值)

第三題:y0=1200 y1=2310 ih=1110 sw=1110*16/9=1974
ffmpeg -f concat -safe 0 -i E:/smartpen/20220407/BP1-9B5-007-46/1713.536.33.61-3.txt -vf crop=iw:1110:0:1200 -vcodec libx264 -b:v 600k -preset medium -crf 1 -vsync vfr -pix_fmt yuv420p -s 1974*1110 -y test_num_3.mp4

下面的命令生成的視頻可以再windows media player下播放,注意yuv420p和尺寸最好是標準的尺寸1920*1080,如果生成的視頻無法在檔案夾預覽出來,證明視頻播放會有問題,
ffmpeg -f concat -safe 0 -i E:/smartpen/20220407/BP1-9B5-007-46/1713.536.33.61-3.txt -vf crop=iw:1110:0:1200 -preset medium -crf 1 -vsync vfr -pix_fmt yuv420p -s 1920*1080 -y test_num_3.mp4

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/458292.html

標籤:其他

上一篇:MSE 微服務治理發布企業版,助力企業構建完整微服務治理體系

下一篇:【介面測驗系列】- 前端互動測驗和后端邏輯測驗

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more