FFmpeg 是一款开源的音视频处理工具,可以处理各种格式的音视频文件,并且可以进行格式转换、剪切、合并、添加水印等多种操作。下面是 FFmpeg 的一些常用命令及其用法:
视频转码
将一个视频文件转换为另一种格式:
ffmpeg -i input.mp4 output.avi
剪切视频
将视频剪切成指定长度,以秒为单位:
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 -c copy output.mp4
其中,-ss 指定起始时间,-t 指定截取长度,-c copy 表示直接复制不重新编码。
视频截图
将视频的一帧作为图片保存下来:
ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 output.jpg
其中,-vframes 1 表示只取一帧。
视频拼接
将多个视频文件拼接成一个:
ffmpeg -i "concat:input1.mp4|input2.mp4|input3.mp4" -c copy output.mp4
其中,"concat:input1.mp4|input2.mp4|input3.mp4" 表示要拼接的文件列表,| 表示分隔符,-c copy 表示直接复制不重新编码。
音频提取
从视频文件中提取音频:
ffmpeg -i input.mp4 -vn -acodec copy output.aac
其中,-vn 表示不处理视频流,-acodec copy 表示直接复制音频流。
视频加水印
在视频上添加一个图片或文字作为水印:
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
其中,-i watermark.png 指定水印图片,-filter_complex "overlay=10:10" 表示在视频的左上角添加水印图片。
去水印
-vf delogo 是使用 FFmpeg 自带的滤镜来进行水印去除的方式。该滤镜可以通过指定水印的位置和大小来去除视频中的水印。使用 -vf delogo 的基本步骤如下:
在命令行中运行以下命令,使用 FFmpeg 自带的 delogo 滤镜进行水印去除:
ffmpeg -i input.mp4 -vf "delogo=x=100:y=50:w=200:h=100" -c:a copy output.mp4
其中,-i input.mp4 指定输入文件名,-vf "delogo=x=100:y=50:w=200:h=100" 指定使用 delogo 滤镜进行水印去除,x、y、w、h 分别指定水印在视频中的位置和大小。-c:a copy 表示直接复制音频流,不重新编码。
需要注意的是,使用 -vf delogo 进行水印去除需要手动指定水印的位置和大小,因此需要先对视频进行分析和调试,以确定水印的具体参数。同时,不同的视频可能需要不同的参数设置,需要进行适当的调整。
delogo 是一个能够自动检测和去除视频中的水印的开源工具,基于 FFmpeg 和 OpenCV 开发。delogo 主要的优点是可以自动检测水印位置和大小,无需手动指定参数。使用 delogo 的基本步骤如下:
下载并安装 delogo 工具,可以参考官方文档:https://github.com/nowsecure/delogo
在命令行中运行以下命令,使用 delogo 进行水印去除:
delogo -i input.mp4 -o output.mp4
其中,-i input.mp4 指定输入文件名,-o output.mp4 指定输出文件名。delogo 会自动检测并去除视频中的水印,输出一个没有水印的视频文件。
需要注意的是,delogo 的去水印效果可能会受到视频质量和水印位置的影响,因此需要根据实际情况进行测试和调整。此外,delogo 的使用需要遵守开源许可协议。
合并音频和视频
ffmpeg -i video.mp4 -i audio.mp3 -c copy -map 0:v:0 -map 1:a:0 videoWithAudio.mp4
9. 改变音频流
-bsf:a 是 FFmpeg 工具中用于指定音频比特流过滤器的选项,可以在音频编解码过程中对音频比特流进行过滤和修改,以达到特定的处理目的。常用的音频比特流过滤器包括 aac_adtstoasc、aac_fixed、aac_latm、flv_aac等。
下面是 -bsf:a 的一些常见用法:
将 AAC 比特流格式转换为 MPEG-4 Audio 比特流格式:
ffmpeg -i input.mp4 -c:v copy -c:a aac -bsf:a aac_adtstoasc output.mp4
转换 AAC 音频流为 FLV 格式:
ffmpeg -i input.mp4 -c:v copy -c:a copy -bsf:a aac_adtstoasc -f flv output.flv
将音频采样率转换为指定值:
ffmpeg -i input.mp4 -c:v copy -c:a aac -bsf:a aac_adtstoasc -ar 44100 output.mp4
转换 MP3 音频流为 WAV 格式:
ffmpeg -i input.mp3 -c:v copy -c:a pcm_s16le -bsf:a aac_adtstoasc output.wav
需要注意的是,-bsf:a 选项需要与具体的音频比特流过滤器名称一起使用。不同的过滤器适用于不同的音频编码格式和处理需求,需要根据实际情况进行选择和调整。
10. 添加属性
要向视频中添加 title 等元数据属性,可以使用 FFmpeg 工具中的 -metadata 选项。该选项可以设置任意类型的元数据,包括 title、author、description 等等。
下面是使用 -metadata 选项添加 title 属性的基本命令格式:
ffmpeg -i input.mp4 -metadata title="My Video Title" -c:v copy -c:a copy output.mp4
其中,-i input.mp4 表示输入文件名,-metadata title="My Video Title" 表示添加 title 属性,并将属性值设置为 "My Video Title"。-c:v copy -c:a copy 表示对视频和音频流进行直接复制,不进行重新编码。output.mp4 表示输出文件名。
除了 title 属性外,也可以添加其他属性,例如:
ffmpeg -i input.mp4 -metadata title="My Video Title" -metadata author="John Doe" -metadata description="My video description" -c:v copy -c:a copy output.mp4
执行以上命令后,FFmpeg 会将 title、author 和 description 等元数据属性添加到输出文件中。
需要注意的是,不同的视频播放器和编辑软件支持的元数据属性类型和格式可能有所不同,因此需要根据实际需求进行选择和调整。
11. 容器格式
'mp4'、'webm' 和 'mkv' 都是常见的视频容器格式,它们的主要区别在于其特性和兼容性:
mp4:是一种流行的视频格式,由 MPEG-4 标准定义。它是一种通用格式,适用于多种设备和平台,包括电视、手机、平板电脑和计算机。 mp4 通常可以存储多个视频和音频流,支持高质量视频和音频编码,同时还具有较高的压缩效率和较小的文件大小。
webm:是一种用于 Web 的开放式多媒体格式,由谷歌主导开发。它是一种免费开源的格式,适用于 HTML5 视频播放器,并且支持 VP8 和 VP9 视频编码以及 Vorbis 和 Opus 音频编码。由于使用开源技术,webm 的实现成本相对较低。
mkv:是一种免费、开源的通用多媒体容器格式,可以容纳多种视频、音频和字幕流。它支持高质量视频编码,如 H.264、H.265 和 VP9,以及高质量音频编码,如 AC3 和 DTS。由于其灵活性和多功能性,mkv 被广泛用于高清视频的存储和分享。
总的来说,mp4 是一种通用格式,适用于多种设备和平台;webm 是一种开源格式,适用于 HTML5 视频播放器;而 mkv 则是一种免费、开源的通用多媒体格式,具有较高的灵活性和多功能性。在选择视频格式时,需要根据具体需求和兼容性要求进行选择。
12. 指定编码器
在 FFmpeg 中,-c:v libxvid 表示使用 Xvid 编码器对视频流进行编码。Xvid 是一种开源的 MPEG-4 视频编码器,它具有高质量视频编码和较小的文件大小,被广泛用于数字视频的压缩和传输。
-vtag XVID 选项表示为 Xvid 编码器添加标记(tag),用于指定视频流的编码格式。在 Xvid 编码器中,XVID 标记指定了视频流的 FourCC 编码格式,它是一种用于标识视频编解码器的四个字母的代码。在 Xvid 编码器中,XVID 标记表示使用 Xvid 编码格式进行视频编码。
需要注意的是,如果在使用 FFmpeg 进行视频编码时没有显式指定编码器和标记,FFmpeg 将会根据输出格式和默认选项自动选择编码器和标记。因此,如果需要使用特定的编码器和标记进行编码,应该在命令行中显式指定。
-c:s mov_text 表示使用 mov_text 子标题编解码器对视频流进行编码或解码。mov_text 是一种用于 QuickTime 和 MP4 视频容器格式的字幕格式,它可以存储文本字幕和样式信息,支持多种语言和字符集。
在 FFmpeg 中,-c:s 选项用于指定字幕编解码器,mov_text 是其中一种常见的字幕编解码器之一。通过指定 -c:s mov_text,FFmpeg 将会使用 mov_text 编解码器对视频流中的字幕进行编码或解码。
13. 字幕
在 FFmpeg 中,-map 选项用于指定输入文件中的流映射关系,其中 -0:s 表示禁用输入文件中的所有字幕流。具体来说,-0:s 表示禁用第一个输入文件中的所有字幕流,其中 -0 表示第一个输入文件,:s 表示字幕流类型。
这个选项通常用于从一个或多个输入文件中选择需要处理的流,而忽略其他不需要处理的流。在这种情况下,可以使用 -map 选项来指定需要处理的流,以及它们在输出文件中的顺序和位置。而通过 -map -0:s,可以将所有字幕流禁用,仅处理需要的流。