赞
踩
找三个不同的视频每个视频截取10秒内容
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
#如果音视频格式不统一则强制统一为:
-vcodec libx264 -acodec aac
-strict -2
参数用于避免警告信息。将上述test_video_01_cut.mp4/test_video_02_cut.mp4/test_video_03_cut.mp4转换成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 编码的视频流转换为 Annex B 格式。test_video_01_cut_ts.ts
:指定输出文件名为 test_video_01_cut_ts.ts
,即将转换后的视频保存为 MPEG-2 Transport Stream (TS) 格式文件。同样的过程适用于 test_video_02_cut.mp4
和 test_video_03_cut.mp4
文件。
转换成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 格式文件。这些命令将输入的裁剪后的视频文件转换为 FLV 格式的文件,并保持了视频和音频编解码方式不变。
分离某些封装格式(例如MP4/FLV/MKV等)中的H.264的时候,需要首先写入SPS和PPS,否则会导致分离出来的数据没有SPS、PPS而无法播放。H.264码流的SPS和PPS信息存储在AVCodecContext结构体的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
拼接起来,并将结果保存为 output_test_video_mp4.mp4
文件,保持视频和音频流不变。ffmpeg -f concat -i mp4list.txt -codec copy output_test_video_mp4.mp4
其中mp4list.txt
的具体内容如下:
file 'test_video_01_cut.mp4'
file 'test_video_02_cut.mp4'
file 'test_video_03_cut.mp4'
-f concat
:指定使用 concat 协议。
-i mp4list.txt
:指定输入文件为 mp4list.txt,其中包含了要拼接的视频文件列表。这个文件应该是一个文本文件,每行包含一个视频文件的路径。
-codec copy
:指定视频和音频编解码器都为 copy,表示将视频流和音频流直接复制到输出文件中,而不进行重新编码。
output_test_video_mp4.mp4
:指定输出文件名为 output_test_video_mp4.mp4,即将拼接后的视频保存为一个 MP4 格式文件。
确保 mp4list.txt 中的视频文件路径是正确的,并且文件列表格式正确,每行一个文件路径。这样,FFmpeg 将会按照列表中文件的顺序将它们拼接在一起,输出一个 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 协议来指定多个文件的路径,这些文件将被拼接在一起。竖线 |
用于分隔文件路径。在这里,三个 TS 文件 test_video_01_cut_ts.ts
、test_video_02_cut_ts.ts
和 test_video_03_cut_ts.ts
被指定为输入文件。-codec copy
:指定视频和音频编解码器都为 copy,表示将视频流和音频流直接复制到输出文件中,而不进行重新编码。这保持了视频和音频的原始编码格式和质量。output_test_video_ts.mp4
:指定输出文件名为 output_test_video_ts.mp4
,即将拼接后的视频保存为 MP4 格式文件。这个命令可以将多个 TS 格式的视频文件合并成一个 MP4 文件,而不进行任何重新编码,从而快速、高效地实现文件合并。
ffmpeg -f concat -i tslist.txt -codec copy output_test_video_ts.mp4
其中tslist.txt
的具体内容如下:
file 'test_video_01_cut_ts.ts'
file 'test_video_02_cut_ts.ts'
file 'test_video_03_cut_ts.ts'
-f concat
:指定使用 concat 协议来读取输入文件。
-i tslist.txt
:指定输入文件为 tslist.txt,这个文件包含了要拼接的 TS 文件的路径列表。tslist.txt 应该是一个文本文件,每行包含一个 TS 文件的路径。
-codec copy
:指定视频和音频编解码器都为 copy,表示将视频流和音频流直接复制到输出文件中,而不进行重新编码。这保持了视频和音频的原始编码格式和质量。
output_test_video_ts.mp4
:指定输出文件名为 output_test_video_ts.mp4,即将拼接后的视频保存为 MP4 格式文件。
这个命令能够从一个 TS 文件列表中读取并拼接视频文件,而不进行任何重新编码,从而实现了快速、高效地文件合并。
以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 协议来指定多个文件的路径,这些文件将被拼接在一起。竖线 |
用于分隔文件路径。在这里,三个 FLV 文件 test_video_01_cut_flv.flv
、test_video_02_cut_flv.flv
和 test_video_03_cut_flv.flv
被指定为输入文件。-codec copy
(或 -c copy
):指定视频和音频编解码器都为 copy,表示将视频流和音频流直接复制到输出文件中,而不进行重新编码。这保持了视频和音频的原始编码格式和质量。output_test_video_flv.mp4
:指定输出文件名为 output_test_video_flv.mp4
,即将拼接后的视频保存为 MP4 格式文件。这个命令可以将多个 FLV 格式的视频文件合并成一个 MP4 文件,而不进行任何重新编码,从而实现了快速、高效地文件合并。
ffmpeg -f concat -i flvlist.txt -codec copy output_test_video_flv.mp4
其中flvlist.txt
的具体内容如下:
file 'test_video_01_cut_flv.flv'
file 'test_video_02_cut_flv.flv'
file 'test_video_03_cut_flv.flv'
-f concat
:指定使用 concat 协议来读取输入文件。
-i flvlist.txt
:指定输入文件为 flvlist.txt,这个文件包含了要拼接的 FLV 文件的路径列表。flvlist.txt 应该是一个文本文件,每行包含一个 FLV 文件的路径。
-codec copy
(或 -c copy
):指定视频和音频编解码器都为 copy,表示将视频流和音频流直接复制到输出文件中,而不进行重新编码。这保持了视频和音频的原始编码格式和质量。
output_test_video_flv.mp4
:指定输出文件名为 output_test_video_flv.mp4,即将拼接后的视频保存为 MP4 格式文件。
这个命令能够从一个 FLV 文件列表中读取并拼接视频文件,而不进行任何重新编码,从而实现了快速、高效地文件合并。
方法1只适用于部分封装格式,比如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
,即将结果保存为该文件。这个命令可以实现将输入文件的视频流直接复制,音频流重新编码为 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 协议拼接的多个 TS 文件。这个参数告诉 FFmpeg 从这些文件中读取数据,并进行拼接操作。每个文件路径之间使用竖线 |
分隔。-codec copy
(或 -c copy
):指定视频和音频编解码器都为 copy,表示将视频流和音频流直接复制到输出文件中,而不进行重新编码。这样可以保持视频和音频的原始编码格式和质量。output_test_video.mp4
:指定输出文件名为 output_test_video.mp4
,即将拼接后的视频保存为 MP4 格式文件。这个命令能够将多个 TS 格式的视频文件合并成一个 MP4 文件,而不进行任何重新编码,从而实现了快速、高效地文件合并。
修改音频采样率
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
,即将结果保存为该文件。这个命令可以实现将输入文件的视频流直接复制,音频流重新编码为 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
,即将结果保存为该文件。这个命令将视频流重新编码为 H.265 格式,并将音频流直接复制到输出文件中,以保持音频的原始编码格式和质量。
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
,即将结果保存为该文件。这个命令将视频流重新编码为 H.264 格式,并将音频流直接复制到输出文件中,以保持音频的原始编码格式和质量。同时,指定了输出视频的分辨率为 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
为基准注意:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。