android bmp合成mpeg4,FFmpeg 图片合成视频
知識準備
FFmpeg將多張圖片合成視頻,視頻的總幀數:總幀數 = duration * fps ,duration是我們設定的視頻的長度,fps是視頻每秒的幀數。
對于圖片文件是沒有幀率的概念,FFmpeg默認情況下一秒25張圖片成像合成視頻。因此FFmpeg提供-framerate還有-r設置輸入的視頻幀率,-r 8說明每秒鐘將8張圖片合成視頻。設置了輸入幀率之后,如果輸出幀率沒有指定,輸出幀率將跟輸入幀率保持一致
場景
將bmp圖片合成視頻
ffmpeg -r 8 -i ./RecordTemp/%d.bmp? -vcodec mpeg4 test.mp4
ffmpeg -r 8 -i? %d.bmp -vcodec libx264 test.mp4
其中-r 和-framerate 都是代表幀率(這個屬性屬于圖片的屬性,需要放在圖片之前)
1)控制視頻幀率
-r fps 幀率,可以指定兩個幀率,輸入幀率,輸出幀率;
輸入幀率:-i之前,設定讀入幀率,比如 -r 0.5 ,也就是說1秒要播0.5個圖片,那么一個圖也就是要播2s;
輸出頻率:-i之后,真正的輸出視頻播放幀率,不寫話,是默認和輸入頻率一樣。比如設 -r 30 ,對應上面的設定,一個圖播2s,那么輸出文件播放時,這2s內,都是這張圖,但是播放了60幀
2)圖片合成視頻,然后視頻拆分成圖片數量對應不上
指令如下:
ffmpeg? -i "D:/ffmpeg/RecordTemp/%06d.bmp" -vcodec mpeg4 -r 20 D:/ffmpeg/video5.avi
ffmpeg -i video5.avi? -f image2 image-%07d.png
解答:-r 20 放在-i之后指定的是輸出視頻幀率,輸入幀率默認情況下是25,所以拆分之后跟原始圖片數量對應不上
解決方案:ffmpeg -r 20 -i "D:/ffmpeg/RecordTemp/%06d.bmp" -vcodec mpeg4? D:/ffmpeg/video5.avi
3)輸出的視頻畫面質量下降,原因:影響視頻質量的最重要因素是視頻碼率,輸出視頻的碼率是默認的,只有200kbits/s
解決方案:修改默認的視頻碼率屬性-b:v
ffmpeg -r 20? -i "D:/ffmpeg/RecordTemp/%06d.bmp" -vcodec mpeg4 -b:v 6000k D:/ffmpeg/video5.avi
注意:當不清楚輸出碼率應該設置為多少,可以指定一個比較大的數字
4)指定從拿一張圖片開始合成視頻
ffmpeg -start_number 500 -i pano%d.jpg video.avi
備注下
-t duration
用做輸入選項(在-i之前),是限制讀取輸入文件的的時長;
用做輸出選項(before an output url),超過這個時間停止寫輸出文件;
比如:循環讀取一個輸入文件時(-loop 1),當到時間就會停止輸出,生成一個duration時長的視頻。但是如果沒有循環選項,而且輸入文件短于這個時長時,就會隨著輸入文件結束就結束,生成視頻,視頻時長小于duration。所以我們可以看出 -t 并不僅僅是輸出文件時長。
當用“管道”時,也不太一樣,管道讀了之后,里面內容就沒了,所以沒持續的輸入,這個-loop,-t 都是“不起作用的”,除非管道一直有內容。
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進行某些轉換??梢杂胒fmpeg -bsfs 查看所有支持的bitstream filter。 bitstream filter和 aac_adtstoasc的具體含義我也說不上。但是如果不用這個選項又會導致轉換失敗。
記錄
bmp轉換失敗:
原因:提供的bmp圖片文件,實際上是png格式的圖片文件,經過批處理修改后綴名稱,解決問題
排查過程:
1)通過Windows畫圖工具,重新保存成bmp文件,合成視頻成功
2)通過Windows畫圖工具,重新另存為jpg文件,合成視頻成功
說明是文件格式的問題Microsoft?Windows?[版本?10.0.18363.1316]
(c)?2019?Microsoft?Corporation。保留所有權利。
F:\test\test_old\store>ffmpeg?-i?test_%d.bmp?-vcodec?mpeg4?test.avi
ffmpeg?version?git-2020-08-16-5df9724?Copyright?(c)?2000-2020?the?FFmpeg?developers
built?with?gcc?10.2.1?(GCC)?20200805
configuration:?--enable-gpl?--enable-version3?--enable-sdl2?--enable-fontconfig?--enable-gnutls?--enable-iconv?--enable-libass?--enable-libdav1d?--enable-libbluray?--enable-libfreetype?--enable-libmp3lame?--enable-libopencore-amrnb?--enable-libopencore-amrwb?--enable-libopenjpeg?--enable-libopus?--enable-libshine?--enable-libsnappy?--enable-libsoxr?--enable-libsrt?--enable-libtheora?--enable-libtwolame?--enable-libvpx?--enable-libwavpack?--enable-libwebp?--enable-libx264?--enable-libx265?--enable-libxml2?--enable-libzimg?--enable-lzma?--enable-zlib?--enable-gmp?--enable-libvidstab?--enable-libvmaf?--enable-libvorbis?--enable-libvo-amrwbenc?--enable-libmysofa?--enable-libspeex?--enable-libxvid?--enable-libaom?--enable-libgsm?--enable-librav1e?--enable-libsvtav1?--disable-w32threads?--enable-libmfx?--enable-ffnvcodec?--enable-cuda-llvm?--enable-cuvid?--enable-d3d11va?--enable-nvenc?--enable-nvdec?--enable-dxva2?--enable-avisynth?--enable-libopenmpt?--enable-amf
libavutil??????56.?58.100?/?56.?58.100
libavcodec?????58.100.100?/?58.100.100
libavformat????58.?51.100?/?58.?51.100
libavdevice????58.?11.101?/?58.?11.101
libavfilter?????7.?87.100?/??7.?87.100
libswscale??????5.??8.100?/??5.??8.100
libswresample???3.??8.100?/??3.??8.100
libpostproc????55.??8.100?/?55.??8.100
[bmp?@?0000024bbbb5fd00]?bad?magic?number
Last?message?repeated?7?times
[image2?@?0000024bbbb5ddc0]?decoding?for?stream?0?failed
[image2?@?0000024bbbb5ddc0]?Could?not?find?codec?parameters?for?stream?0?(Video:?bmp,?none):?unspecified?size
Consider?increasing?the?value?for?the?'analyzeduration'?(0)?and?'probesize'?(5000000)?options
Input?#0,?image2,?from?'test_%d.bmp':
Duration:?00:00:00.32,?start:?0.000000,?bitrate:?N/A
Stream?#0:0:?Video:?bmp,?none,?25?fps,?25?tbr,?25?tbn,?25?tbc
Stream?mapping:
Stream?#0:0?->?#0:0?(bmp?(native)?->?mpeg4?(native))
Press?[q]?to?stop,?[?]?for?help
[bmp?@?0000024bbbb60500]?bad?magic?number
Error?while?decoding?stream?#0:0:?Invalid?data?found?when?processing?input
[bmp?@?0000024bbbb60500]?bad?magic?number
Error?while?decoding?stream?#0:0:?Invalid?data?found?when?processing?input
[bmp?@?0000024bbbb60500]?bad?magic?number
Error?while?decoding?stream?#0:0:?Invalid?data?found?when?processing?input
[bmp?@?0000024bbbb60500]?bad?magic?number
Error?while?decoding?stream?#0:0:?Invalid?data?found?when?processing?input
[bmp?@?0000024bbbb60500]?bad?magic?number
Error?while?decoding?stream?#0:0:?Invalid?data?found?when?processing?input
[bmp?@?0000024bbbb60500]?bad?magic?number
Error?while?decoding?stream?#0:0:?Invalid?data?found?when?processing?input
[bmp?@?0000024bbbb60500]?bad?magic?number
Error?while?decoding?stream?#0:0:?Invalid?data?found?when?processing?input
[bmp?@?0000024bbbb60500]?bad?magic?number
Error?while?decoding?stream?#0:0:?Invalid?data?found?when?processing?input
Cannot?determine?format?of?input?stream?0:0?after?EOF
Error?marking?filters?as?finished
Conversion?failed!
總結
以上是生活随笔為你收集整理的android bmp合成mpeg4,FFmpeg 图片合成视频的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab jpg合成gif,用MAT
- 下一篇: java 图片合成_java 将两张相片