柚子快報激活碼778899分享:FFmpeg命令裁剪和合并視頻
柚子快報激活碼778899分享:FFmpeg命令裁剪和合并視頻
FFmpeg命令過濾器
生成測試文件
找三個不同的視頻每個視頻截取10秒內(nèi)容 ffmpeg -i test_video_01.mp4 -ss 00:00:00 -t 10 -codec copy test_video_01_cut.mp4
ffmpeg -i test_video_02.mp4 -ss 00:00:00 -t 10 -codec copy test_video_02_cut.mp4
ffmpeg -i test_video_03.mp4 -ss 00:00:00 -t 10 -codec copy test_video_03_cut.mp4
#如果音視頻格式不統(tǒng)一則強制統(tǒng)一為:
-vcodec libx264 -acodec aac
這些命令會將視頻文件裁剪為前 10 秒,并將視頻編碼器設(shè)置為 libx264,音頻編碼器設(shè)置為 AAC??梢允褂?strict -2 參數(shù)用于避免警告信息。 將上述test_video_01_cut.mp4/test_video_02_cut.mp4/test_video_03_cut.mp4轉(zhuǎn)換成ts格式 ffmpeg -i test_video_01_cut.mp4 -codec copy -vbsf h264_mp4toannexb test_video_01_cut_ts.ts
ffmpeg -i test_video_02_cut.mp4 -codec copy -vbsf h264_mp4toannexb test_video_02_cut_ts.ts
ffmpeg -i test_video_03_cut.mp4 -codec copy -vbsf h264_mp4toannexb test_video_03_cut_ts.ts
-i test_video_01_cut.mp4:指定輸入文件為 test_video_01_cut.mp4,裁剪后的視頻文件。-codec copy:指定視頻和音頻編解碼器都為 copy,表示將視頻流和音頻流直接復制到輸出文件中,而不進行重新編碼。-vbsf h264_mp4toannexb:指定使用 h264_mp4toannexb 過濾器,將 H.264 編碼的視頻流轉(zhuǎn)換為 Annex B 格式。test_video_01_cut_ts.ts:指定輸出文件名為 test_video_01_cut_ts.ts,即將轉(zhuǎn)換后的視頻保存為 MPEG-2 Transport Stream (TS) 格式文件。 同樣的過程適用于 test_video_02_cut.mp4 和 test_video_03_cut.mp4 文件。 轉(zhuǎn)換成flv格式 ffmpeg -i test_video_01_cut.mp4 -codec copy test_video_01_cut_flv.flv
ffmpeg -i test_video_02_cut.mp4 -codec copy test_video_02_cut_flv.flv
ffmpeg -i test_video_03_cut.mp4 -codec copy test_video_03_cut_flv.flv
-i test_video_01_cut.mp4:指定輸入文件為 test_video_01_cut.mp4,裁剪后的視頻文件。-codec copy:指定視頻和音頻編解碼器都為 copy,表示將視頻流和音頻流直接復制到輸出文件中,而不進行重新編碼。test_video_01_cut_flv.flv:指定輸出文件名為 test_video_01_cut_flv.flv,即將裁剪后的視頻保存為 FLV 格式文件。 這些命令將輸入的裁剪后的視頻文件轉(zhuǎn)換為 FLV 格式的文件,并保持了視頻和音頻編解碼方式不變。 分離某些封裝格式(例如MP4/FLV/MKV等)中的H.264的時候,需要首先寫入SPS和PPS,否則會導致分離出來的數(shù)據(jù)沒有SPS、PPS而無法播放。H.264碼流的SPS和PPS信息存儲在AVCodecContext結(jié)構(gòu)體的extradata中,需要使用FFmpeg中名稱為“h264_mp4toannexb”的bitstream filter處理。
開始拼接文件
以MP4格式進行拼接
ffmpeg -i "concat:test_video_01_cut.mp4|test_video_02_cut.mp4|test_video_03_cut.mp4" -codec copy output_test_video_mp4.mp4
這個命令將會將三個輸入文件 test_video_01_cut.mp4、test_video_02_cut.mp4 和 test_video_03_cut.mp4 拼接起來,并將結(jié)果保存為 output_test_video_mp4.mp4 文件,保持視頻和音頻流不變。 ffmpeg -f concat -i mp4list.txt -codec copy output_test_video_mp4.mp4
其中mp4list.txt的具體內(nèi)容如下: file 'test_video_01_cut.mp4'
file 'test_video_02_cut.mp4'
file 'test_video_03_cut.mp4'
-f concat:指定使用 concat 協(xié)議。 -i mp4list.txt:指定輸入文件為 mp4list.txt,其中包含了要拼接的視頻文件列表。這個文件應(yīng)該是一個文本文件,每行包含一個視頻文件的路徑。 -codec copy:指定視頻和音頻編解碼器都為 copy,表示將視頻流和音頻流直接復制到輸出文件中,而不進行重新編碼。 output_test_video_mp4.mp4:指定輸出文件名為 output_test_video_mp4.mp4,即將拼接后的視頻保存為一個 MP4 格式文件。 確保 mp4list.txt 中的視頻文件路徑是正確的,并且文件列表格式正確,每行一個文件路徑。這樣,F(xiàn)Fmpeg 將會按照列表中文件的順序?qū)⑺鼈兤唇釉谝黄?,輸出一個 MP4 文件。 以TS格式進行拼接
ffmpeg -i "concat:test_video_01_cut_ts.ts|test_video_02_cut_ts.ts|test_video_03_cut_ts.ts" -codec copy output_test_video_ts.mp4
-i "concat:test_video_01_cut_ts.ts|test_video_02_cut_ts.ts|test_video_03_cut_ts.ts":指定輸入文件列表,使用 concat 協(xié)議來指定多個文件的路徑,這些文件將被拼接在一起。豎線 | 用于分隔文件路徑。在這里,三個 TS 文件 test_video_01_cut_ts.ts、test_video_02_cut_ts.ts 和 test_video_03_cut_ts.ts 被指定為輸入文件。-codec copy:指定視頻和音頻編解碼器都為 copy,表示將視頻流和音頻流直接復制到輸出文件中,而不進行重新編碼。這保持了視頻和音頻的原始編碼格式和質(zhì)量。output_test_video_ts.mp4:指定輸出文件名為 output_test_video_ts.mp4,即將拼接后的視頻保存為 MP4 格式文件。 這個命令可以將多個 TS 格式的視頻文件合并成一個 MP4 文件,而不進行任何重新編碼,從而快速、高效地實現(xiàn)文件合并。 ffmpeg -f concat -i tslist.txt -codec copy output_test_video_ts.mp4
其中tslist.txt的具體內(nèi)容如下: file 'test_video_01_cut_ts.ts'
file 'test_video_02_cut_ts.ts'
file 'test_video_03_cut_ts.ts'
-f concat:指定使用 concat 協(xié)議來讀取輸入文件。 -i tslist.txt:指定輸入文件為 tslist.txt,這個文件包含了要拼接的 TS 文件的路徑列表。tslist.txt 應(yīng)該是一個文本文件,每行包含一個 TS 文件的路徑。 -codec copy:指定視頻和音頻編解碼器都為 copy,表示將視頻流和音頻流直接復制到輸出文件中,而不進行重新編碼。這保持了視頻和音頻的原始編碼格式和質(zhì)量。 output_test_video_ts.mp4:指定輸出文件名為 output_test_video_ts.mp4,即將拼接后的視頻保存為 MP4 格式文件。 這個命令能夠從一個 TS 文件列表中讀取并拼接視頻文件,而不進行任何重新編碼,從而實現(xiàn)了快速、高效地文件合并。 以FLV格式進行拼接
ffmpeg -i "concat:test_video_01_cut_flv.flv|test_video_02_cut_flv.flv|test_video_03_cut_flv.flv" -codec copy output_test_video_flv.mp4
-i "concat:test_video_01_cut_flv.flv|test_video_02_cut_flv.flv|test_video_03_cut_flv.flv":指定輸入文件列表,使用 concat 協(xié)議來指定多個文件的路徑,這些文件將被拼接在一起。豎線 | 用于分隔文件路徑。在這里,三個 FLV 文件 test_video_01_cut_flv.flv、test_video_02_cut_flv.flv 和 test_video_03_cut_flv.flv 被指定為輸入文件。-codec copy(或 -c copy):指定視頻和音頻編解碼器都為 copy,表示將視頻流和音頻流直接復制到輸出文件中,而不進行重新編碼。這保持了視頻和音頻的原始編碼格式和質(zhì)量。output_test_video_flv.mp4:指定輸出文件名為 output_test_video_flv.mp4,即將拼接后的視頻保存為 MP4 格式文件。 這個命令可以將多個 FLV 格式的視頻文件合并成一個 MP4 文件,而不進行任何重新編碼,從而實現(xiàn)了快速、高效地文件合并。 ffmpeg -f concat -i flvlist.txt -codec copy output_test_video_flv.mp4
其中flvlist.txt的具體內(nèi)容如下: file 'test_video_01_cut_flv.flv'
file 'test_video_02_cut_flv.flv'
file 'test_video_03_cut_flv.flv'
-f concat:指定使用 concat 協(xié)議來讀取輸入文件。 -i flvlist.txt:指定輸入文件為 flvlist.txt,這個文件包含了要拼接的 FLV 文件的路徑列表。flvlist.txt 應(yīng)該是一個文本文件,每行包含一個 FLV 文件的路徑。 -codec copy(或 -c copy):指定視頻和音頻編解碼器都為 copy,表示將視頻流和音頻流直接復制到輸出文件中,而不進行重新編碼。這保持了視頻和音頻的原始編碼格式和質(zhì)量。 output_test_video_flv.mp4:指定輸出文件名為 output_test_video_flv.mp4,即將拼接后的視頻保存為 MP4 格式文件。 這個命令能夠從一個 FLV 文件列表中讀取并拼接視頻文件,而不進行任何重新編碼,從而實現(xiàn)了快速、高效地文件合并。 方法1只適用于部分封裝格式,比如TS 建議:
使用方法2進行拼接轉(zhuǎn)換成TS格式再進行拼接
測試不同編碼拼接
修改音頻編碼 ffmpeg -i test_video_02.mp4 -vcodec copy -acodec ac3 -vbsf h264_mp4toannexb test_video_02_ac3_h264.mp4
-i test_video_02.mp4:指定輸入文件為 test_video_02.mp4。-vcodec copy:指定視頻編解碼器為 copy,表示直接復制視頻流而不進行重新編碼。-acodec ac3:指定音頻編解碼器為 AC-3,表示重新編碼音頻流為 AC-3 格式。-vbsf h264_mp4toannexb:指定視頻比特流過濾器,用于將 H.264 視頻流重新封裝為 H.264 Annex B 格式。test_video_02_ac3_h264.mp4:指定輸出文件名為 test_video_02_ac3_h264.mp4,即將結(jié)果保存為該文件。 這個命令可以實現(xiàn)將輸入文件的視頻流直接復制,音頻流重新編碼為 AC-3 格式,并重新封裝視頻流為 H.264 Annex B 格式的功能。 ffmpeg -i "concat:test_video_01_cut_ts.ts|test_video_02_cut_ts.ts|test_video_03_cut_ts.ts" -codec copy output_test_video.mp4
#第二段沒聲音
-i "concat:test_video_01_cut_ts.ts|test_video_02_cut_ts.ts|test_video_03_cut_ts.ts":指定輸入文件為通過 concat 協(xié)議拼接的多個 TS 文件。這個參數(shù)告訴 FFmpeg 從這些文件中讀取數(shù)據(jù),并進行拼接操作。每個文件路徑之間使用豎線 | 分隔。-codec copy(或 -c copy):指定視頻和音頻編解碼器都為 copy,表示將視頻流和音頻流直接復制到輸出文件中,而不進行重新編碼。這樣可以保持視頻和音頻的原始編碼格式和質(zhì)量。output_test_video.mp4:指定輸出文件名為 output_test_video.mp4,即將拼接后的視頻保存為 MP4 格式文件。 這個命令能夠?qū)⒍鄠€ TS 格式的視頻文件合并成一個 MP4 文件,而不進行任何重新編碼,從而實現(xiàn)了快速、高效地文件合并。 修改音頻采樣率 ffmpeg -i test_video_02.mp4 -vcodec copy -acodec aac -ar 96000 -vbsf h264_mp4toannexb test_video_02_cut_ts.ts
-i test_video_02.mp4:指定輸入文件為 test_video_02.mp4。-vcodec copy:指定視頻編解碼器為 copy,表示直接復制視頻流而不進行重新編碼。-acodec aac:指定音頻編解碼器為 AAC,表示重新編碼音頻流為 AAC 格式。-ar 96000:指定音頻采樣率為 96000 Hz,這是 AAC 格式的典型采樣率之一。-vbsf h264_mp4toannexb:指定視頻比特流過濾器,用于將 H.264 視頻流重新封裝為 H.264 Annex B 格式。test_video_02_cut_ts.ts:指定輸出文件名為 test_video_02_cut_ts.ts,即將結(jié)果保存為該文件。 這個命令可以實現(xiàn)將輸入文件的視頻流直接復制,音頻流重新編碼為 AAC 格式,并重新封裝視頻流為 H.264 Annex B 格式的功能。 ffmpeg -i "concat:test_video_01_cut_ts.ts|test_video_02_cut_ts.ts|test_video_03_cut_ts.ts" -codec copy output_test_video.mp4
#第二段播放異常
修改視頻編碼格式 ffmpeg -i test_video_01_cut.mp4 -acodec copy -vcodec libx265 test_video_02_cut_ts.ts
-i test_video_01_cut.mp4:指定輸入文件為 test_video_01_cut.mp4。-acodec copy:指定音頻編解碼器為 copy,表示直接復制音頻流而不進行重新編碼。-vcodec libx265:指定視頻編解碼器為 libx265,表示將視頻流重新編碼為 H.265 格式。test_video_02_cut_ts.ts:指定輸出文件名為 test_video_02_cut_ts.ts,即將結(jié)果保存為該文件。 這個命令將視頻流重新編碼為 H.265 格式,并將音頻流直接復制到輸出文件中,以保持音頻的原始編碼格式和質(zhì)量。 ffmpeg -i "concat:test_video_01_cut_ts.ts|test_video_02_cut_ts.ts|test_video_03_cut_ts.ts" -codec copy output_test_video.mp4
修改視頻分辨率 ffmpeg -i test_video_01_cut.mp4 -acodec copy -vcodec libx264 -s 800x600 -vbsf h264_mp4toannexb test_video_01_cut_ts.ts
-i test_video_01_cut.mp4:指定輸入文件為 test_video_01_cut.mp4。-acodec copy:指定音頻編解碼器為 copy,表示直接復制音頻流而不進行重新編碼。-vcodec libx264:指定視頻編解碼器為 libx264,表示將視頻流重新編碼為 H.264 格式。-s 800x600:指定輸出視頻的分辨率為 800x600。-vbsf h264_mp4toannexb:指定視頻比特流過濾器,用于將 H.264 視頻流重新封裝為 H.264 Annex B 格式。test_video_01_cut_ts.ts:指定輸出文件名為 test_video_01_cut_ts.ts,即將結(jié)果保存為該文件。 這個命令將視頻流重新編碼為 H.264 格式,并將音頻流直接復制到輸出文件中,以保持音頻的原始編碼格式和質(zhì)量。同時,指定了輸出視頻的分辨率為 800x600。 ffmpeg -i "concat:test_video_01_cut_ts.ts|test_video_02_cut_ts.ts|test_video_03_cut_ts.ts" -codec copy out4.mp4
音視頻默認顯示窗口會以第一個test_video_01_cut_ts.ts修改后的分辨率800x600為基準 注意:
把每個視頻封裝格式統(tǒng)一為ts,拼接輸出的時候再輸出需要的封裝格式,比如MP4等視頻分辨率可以不同,但是編碼格式需要統(tǒng)一音頻編碼格式以及音頻參數(shù)(采樣率/聲道等)也需要統(tǒng)一
柚子快報激活碼778899分享:FFmpeg命令裁剪和合并視頻
精彩文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。