• FFmpeg 命令:从入门到精通 | ffmpeg 命令裁剪与合并视频


    FFmpeg 命令:从入门到精通 | ffmpeg 命令裁剪与合并视频

    本节主要介绍了一些使用 ffmpeg 命令裁剪、合并视频的方法,并列举了一些例子。

    裁剪生成测试文件

    找三个不同的视频每个视频截取10秒内容:

    ffmpeg -i 沙海02.mp4 -ss 00:05:00 -t 10 -codec copy 1.mp4
    
    • 1
    ffmpeg -i 复仇者联盟3.mp4 -ss 00:05:00 -t 10 -codec copy 2.mp4
    
    • 1
    ffmpeg -i 红海行动.mp4 -ss 00:05:00 -t 10 -codec copy 3.mp4
    
    • 1

    注:如果音视频格式不统一则强制统一为 -vcodec libx264 -acodec aac。

    将上述 1.mp4 / 2.mp4 / 3.mp4转成 ts 格式:

    ffmpeg -i 1.mp4 -codec copy -vbsf h264_mp4toannexb 1.ts
    
    • 1
    ffmpeg -i 2.mp4 -codec copy -vbsf h264_mp4toannexb 2.ts
    
    • 1
    ffmpeg -i 3.mp4 -codec copy -vbsf h264_mp4toannexb 3.ts
    
    • 1

    转成flv格式:

    ffmpeg -i 1.mp4 -codec copy 1.flv
    
    • 1
    ffmpeg -i 2.mp4 -codec copy 2.flv
    
    • 1
    ffmpeg -i 3.mp4 -codec copy 3.flv
    
    • 1

    分离某些封装格式(例如MP4 / FLV / MKV 等)中的 H.264 的时候,需要首先写入 SPS 和 PPS,否则会导致分离出来的数据没有 SPS、PPS 而无法播放。

    H.264 码流的 SPS 和 PPS 信息存储在 AVCodecContext 结构体的 extradata 中。需要使用 ffmpeg 中名称为 h264_mp4toannexb 的 bitstream filter 处理。

    拼接文件

    以 MP4 格式进行拼接:

    方法1:

    ffmpeg -i "concat:1.mp4|2.mp4|3.mp4" -codec copy out_mp4.mp4 	
    
    • 1

    注:错误用法。

    方法2:

    ffmpeg -f concat -i mp4list.txt -codec copy out_mp42.mp4
    
    • 1

    mp4list.txt:

    file '1.mp4'
    file '2.mp4'
    file '3.mp4'
    
    • 1
    • 2
    • 3

    以 TS 格式进行拼接:

    方法1:

    ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out_ts.mp4 	
    
    • 1

    方法2:

    ffmpeg -f concat -i tslist.txt -codec copy out_ts2.mp4
    
    • 1

    tslist.txt:

    file '1.ts'
    file '2.ts'
    file '3.ts'
    
    • 1
    • 2
    • 3

    以 FLV 格式进行拼接:

    方法1:

    ffmpeg -i "concat:1.flv|2.flv|3.flv" -codec copy out_flv.mp4
    
    • 1

    注:错误用法。

    方法2:

    ffmpeg -f concat -i flvlist.txt -codec copy out_flv2.mp4
    
    • 1

    flvlist.txt:

    file '1.flv'
    file '2.flv'
    file '3.flv'
    
    • 1
    • 2
    • 3

    注:方法 1 只适用部分封装格式,比如 TS。

    建议:

    1. 使用方法 2 进行拼接。
    2. 转成 TS 格式再进行拼接。

    拼接不同编码的文件

    修改音频编码:

    ffmpeg -i 2.mp4 -vcodec copy -acodec ac3 -vbsf h264_mp4toannexb 2.ts
    
    • 1
    ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out1.mp4 
    
    • 1

    结果第二段没有声音。

    修改音频采样率:

    ffmpeg -i 2.mp4 -vcodec copy -acodec aac -ar 96000 -vbsf h264_mp4toannexb 2.ts
    
    • 1
    ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out2.mp4
    
    • 1

    第二段播放异常。

    修改视频编码格式:

    ffmpeg -i 1.mp4 -acodec copy -vcodec libx265 1.ts
    
    • 1
    ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out3.mp4 
    
    • 1

    修改视频分辨率:

    ffmpeg -i 1.mp4 -acodec copy -vcodec libx264 -s 800x472 -vbsf h264_mp4toannexb 1.ts
    
    • 1
    ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out4.mp4 
    
    • 1

    注意:

    1. 把每个视频封装格式也统一为 ts,拼接输出的时候再输出你需要的封装格式,比如 MP4。
    2. 视频分辨率可以不同,但是编码格式需要统一。
    3. 音频编码格式需要统一,音频参数(采样率/声道等)也需要统一。
  • 相关阅读:
    基于web、dns、nfs的综合实验
    校园二手物品交易系统微信小程序设计
    Redis快速上手篇五(持久化)
    PartImageNet物体部件分割(Semantic Part Segmentation)数据集介绍
    什么是分布式锁?几种分布式锁分别是怎么实现的?
    DataOps 不是工具,而是帮助企业实现数据价值的最佳实践
    B+tree数据结构区分主键索引、非聚集索引、覆盖索引
    css:img引入svg后修改颜色
    前端工程化
    (附源码)spring boot网上商品定制系统 毕业设计 180915
  • 原文地址:https://blog.csdn.net/ProgramNovice/article/details/133465472