FFmpeg常用的命令

1、在下载视频时添加Headers

通过 -headers参数可以在下载视频时添加Headers,header之间用 \r\n分隔。例如:
ffmpeg -headers "Referer: https://video.com/\r\nHost: video.com\r\n" -i https://video.com/1.mp4 -c copy 1.mp4
如果视频格式是m3u8,则headers只对m3u8文件有效,对切片的ts文件无效。

2、下载本地m3u8文件

当m3u8为本地文件时,通过 -protocol_whitelist参数添加协议的白名单,可以正常下载视频。例如:
ffmpeg -protocol_whitelist "file,http,https,tcp,tls" -i c:\video\1.m3u8 -c copy 1.mp4

3、视频裁剪

通过 -ss-t参数来裁剪视频。例如:
ffmpeg -ss 00:00:10 -t 00:00:10 -accurate_seek -i 1.mp4 --avoid_negative_ts 1 1_cut.mp4
命令的具体功能可以在 FFmpeg Documentation找到。
对于视频时长的计算可以使用这段代码:
type Time = [number, number, number];

/**
 * 计算时间差
 * @param { Time } startTime - 开始时间
 * @param { Time } endTime - 结束时间
 * @return { Time }
 */
function computingTime(startTime: Time, endTime: Time): Time {
  const startS: number = (startTime[0] * 3600) + (startTime[1] * 60) + startTime[2]; // 开始时间转换到秒
  const endS: number = (endTime[0] * 3600) + (endTime[1] * 60) + endTime[2];         // 结束时间转换到秒
  const cha: number = endS - startS;                                                 // 计算时间差
  const h: number = Number(`${ cha / 3600 }`.match(/\d+/g)![0]);                     // 时取整数
  const hp: number = cha % 3600;                                                     // 时取余
  const m: number = Number(`${ hp / 60 }`.match(/\d+/g)![0]);                        // 分取整数
  const s: number = hp % 60;                                                         // 分取余 => 秒

  return [h, m, s];
}

4、视频合并

首先创建一个txt文件,写入要合并的文件。
file '1.mp4'
file '2.mp4'
file '3.mp4'
然后执行命令:
ffmpeg -f concat -safe 0 -i list.txt -c copy 1.mp4