使用FFmpeg进行简单的视频编辑

FFmpeg 是强大的视频编辑开源命令行工具,由于它过于强大,因此包装后的很多窗口工具都没有它好用,因此学习使用命令行工具还是很必要的。

FFmpeg 官网地址:https://www.ffmpeg.org/

下面介绍几个使用 FFmpeg 的高频视频编辑功能。

安装 FFmpeg

macOS 命令行安装 FFmpeg

brew install ffmpeg

FFmpeg 常用视频编辑功能

FFmpeg 使用参数:

ffmpeg {1} {2} -i {3} {4} {5}

上述参数说明:

{1}:全局参数 {2}:输入文件参数 {3}:输入文件 {4}:输出文件参数 {5}:输出文件

常见参数:

c:指定编码器 

-c copy:直接复制,不经过重新编码(这样比较快) 

-c:v:指定视频编码器 

-c:a:指定音频编码器 

-i:指定输入文件 

-an:去除音频流 

-vn:去除视频流 

-preset:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。 

-y:不经过确认,输出时直接覆盖同名文件。

1、使用FFmpeg【转换】视频格式

如将 .mkv 、.flv 等视频格式转化为 .mp4 格式,码率、分辨率、音频等等都不做改动。基本的命令是:

ffmpeg -i a.flv -codec copy a.mp4

下面是实际使用的核心命令(FLV 批量转 MP4):

find . -name "*.flv" -exec sh -c 'ffmpeg -i "$1" -c copy "${1%.flv}.mp4"' _ {} \;

包含以下特性

  • 批量处理相同格式的视频文件(如 .flv 格式);
  • 视频仅更改封装格式,其它保持不变(-c copy 参数);
  • 保留原文件名;
  • 输出文件在同路径下;

操作步骤及方法

1)打开 macOS 终端工具,进入保存待转化视频的目录;

cd 待转化视频文件路经

输入路径的小技巧:

技巧a:把目标路径中随便一个文件拖入「终端」工具中,就自动生成了路径(需要删除路径中包含的文件名); 

技巧b:使用 command + i 查看文件属性,复制「位置」那里的数值即可;

技巧c:选择文件夹按 command + C 复制,在终端中 command + V 粘贴即可。

2)输入批量转化指令(FLV 批量转 MP4,需要其它格式替换参数即可):

find . -name "*.flv" -exec sh -c 'ffmpeg -i "$1" -c copy "${1%.flv}.mp4"' _ {} \;

完成!

该指令有一个重要特性是:能够保持原文件名不变。

进行 MP4 格式的重新封装(解决格式不兼容问题),则运行如下代码:

find . -name "*.mp4" -exec sh -c 'ffmpeg -i "$1" -c copy "${1%}.mp4"' _ {} \;

2、使用FFmpeg【合并】多个同参数视频

直接将多个同参数的视频合并为一个视频,视频参数不做修改,用 FFmpeg 的 copy 命令。步骤及方法如下:

新建一个文件名为「filelist.txt」的文件,将需要合并的多个视频清单列出,例如:

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

注意:上面的待合并视频清单的视频文件需要放在同一个路径下,否则需要写出文件的绝对路径,如“/Users/xxx/Downloads/待上传/000/1.MP4”。

然后把这个 filelist.txt 文件以及需要合并的视频放在一个文件夹下面,例如:/Users/xxx/Downloads/待上传/000

终端命令也用 CD 命令到该目录下之后,运行下面的合并命令:

ffmpeg -f concat -i filelist.txt -c copy output.mp4

如果文件在不同的路径下,则使用如下的命令(相同路径下也可以用下面的指令):

ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4

结束。

3、使用FFmpeg【裁剪】视频

有时候我们需要裁剪(截取)视频中的某个片段,其它参数都保持不变,可以使用下面的命令:

ffmpeg -ss 00:00:00 -t 00:00:30 -i input.mp4 -vcodec copy -acodec copy output.mp4

-ss 00:00:00 -t 00:00:30 释义:-ss 开始时间 -t 持续时间

这个处理过程非常快。要注意后一个时间戳是「持续时间」,而不是结束时间。另外,由于「关键帧」的原因,会导致实际视频裁剪时,会有前后几秒的误差,如果需要消除前后几秒的误差,需要使用重新编码的方式进行裁剪,这样处理的速度就会慢很多。

评论

此博客中的热门博文

如何批量下载Twitter用户的原始图片

使用ADB不root删除小米MIUI系统自带应用

中国大陆正常收取 Gmail 邮件的方法