本文用于记录使用FFmpeg
的记录,可当作笔记查阅。
FFmpeg
在运行时主要使用 CPU
资源来进行视频解码、编码、转换和处理等操作。通常情况下,默认情况下 FFmpeg
不会直接利用 GPU
进行处理。但是,如果您的系统支持 GPU
加速,并且您的 FFmpeg
编译版本启用了相关的 GPU
加速选项,那么您可以通过设置相应的参数来利用 GPU
进行加速。
目前,FFmpeg
支持通过 CUDA
、OpenCL
、VDPAU
、VA-API
等接口来利用GPU
进行加速。具体支持的接口取决于您使用的FFmpeg
版本以及所使用的硬件和驱动情况。
如果您想要使用GPU
进行加速,可以在编译FFmpeg
时启用相应的选项,然后通过命令行参数或者API
调用来指定使用GPU
进行加速。
要在 FFmpeg
中使用 CUDA
开启 GPU
加速,您需要确保以下几点:
安装 CUDA Toolkit
:首先,您需要安装 NVIDIA
的CUDA Toolkit
,您可以从 NVIDIA
官方网站下载并安装适用于您操作系统版本的 CUDA Toolkit
。
编译FFmpeg:在编译时您需要通过 --enable-cuda
参数启用CUDA支持。
PS:可与通过
ffmpeg -buildconf
命令查看你的FFmpeg
编译配置,如果出现--enable-cuda
相关配置,大都是支持 CUDA 加速的软件包。
CUDA
支持的 FFmpeg
,您可以使用 CUDA
加速来执行相应的命令。在执行命令时,FFmpeg
会自动识别 CUDA
支持,并且尝试使用 GPU
进行加速处理。以下是一个示例命令,演示了如何使用 CUDA
加速进行视频转码:bashffmpeg -i input.mp4 -c:v h264_nvenc -profile:v high -preset:v fast output.mp4
在这个示例中,使用了 h264_nven
c 编码器来利用 NVIDIA
的 CUDA
加速进行 H.264
视频编码。 -profile:v high
和 -preset:v fast
分别指定了编码器的配置参数。您可以根据需要调整参数来达到更好的性能和质量。
bashffmpeg -i input.mp4 -vf "crop=640:480" output.mp4
-vf "crop=640:480"
: 将视频裁剪为640x480
的分辨率。bashffmpeg -i input_low_quality.mp4 -c:v libx264 -b:v 2M -vf "scale=1280:720" -c:a aac -b:a 192k output_high_quality.mp4
-i input_low_quality.mp4
:指定输入文件,这里是一个低质量的 MP4 视频文件。-c:v libx264
:选择视频编码器为 libx264,这是一个 H.264 编码器。-b:v 2M
:设置视频比特率为 2 Mbps。这决定了视频的压缩率,值越高,视频质量越好,但文件大小也越大。-vf "scale=1280:720"
:使用视频滤镜进行缩放操作。这里将视频缩放到宽度为 1280 像素,高度为 720 像素。这可以用于改变视频的分辨率。-c:a aac
:选择音频编码器为 AAC。-b:a 192k
:设置音频比特率为 192 kbps。这决定了音频的压缩率,值越高,音频质量越好,但文件大小也越大。output_high_quality.mp4
:指定输出文件,这里是一个高质量的 MP4 视频文件。bashffmpeg -i input.mp4 -c:v libx264 -c:a aac -f hls -hls_time 10 -hls_list_size 0 -hls_segment_filename output%d.ts output.m3u8
这个命令将输入文件 input.mp4
转换为 HLS 格式,并生成一个名为 output.m3u8
的 M3U8
播放列表文件和一系列的 .ts
切片文件。以下是对命令中参数的解释:
-i input.mp4
:指定输入文件的路径。-c:v libx264
:指定视频编码器为libx264,用于视频编码。-c:a aac
:指定音频编码器为aac,用于音频编码。-f hls
:指定输出格式为HLS。-hls_time 10
:指定每个切片的时长,这里是10秒。-hls_list_size 0
:指定不限制播放列表的长度。-hls_segment_filename output%d.ts
:指定.ts
切片文件的命名模板为output%d.ts
,其中%d
表示数字序号,FFmpeg会根据序号生成一系列的.ts
切片文件bash# 使用GPU加速处理
ffmpeg -i input.mp4 -c:v h264_nvenc -b:v 10M -c:a aac -f hls -hls_time 10 -hls_list_size 0 -hls_segment_filename output%d.ts output.m3u8
-c:v h264_nvenc
:指定视频编码器为 h264_nvenc
,这是 NVIDIA GPU
加速的 H.264
编码器。使用这个编码器可以利用 NVIDIA GPU
进行视频编码,从而提高转码速度和效率。-b:v 5M
:指定视频的比特率为 5M
,这是视频的目标比特率,用来控制视频的质量和文件大小。PS: 当您在使用
FFmpeg
进行视频转码时,如果没有设置-b:v
参数来指定视频的目标比特率,FFmpeg
会尽可能地保留原始视频的质量和数据。所以,一些简单操作时无需使用-b:v
参数。
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental output.mp4
命令的解释:
-i video.mp4
:指定输入视频文件。-i audio.mp3
:指定输入音频文件。-c:v copy
:表示视频流直接复制,不重新编码。-c:a aac
:表示音频流使用 AAC
编码。-strict experimental
:允许使用实验性的 AAC
编码。output.mp4
:输出的文件名。其中音频文件可以是其他格式,如 audio.m4a
也是可以的。
bashffmpeg -i input.mp4 -vn -acodec copy output_audio.aac
-i input.mp4
: 指定输入文件。-vn
: 禁用视频流。-acodec copy
: 表示使用原始音频编解码器进行拷贝。output_audio.aac
: 是输出音频文件的名称。bashffmpeg -i input.mp4 -vn -acodec pcm_s16le -ar 44100 -ac 2 output_audio.wav
-i input.mp4
:指定输入文件。-vn
:禁用视频流。-acodec pcm_s16le
:选择音频编码器为 pcm_s16le,这是一个无损的音频编码器。-ar 44100
:设置音频采样率为 44.1 kHz。你可以根据需要调整采样率。-ac 2
:设置音频通道数为 2(立体声)。output_audio.wav
:指定输出音频文件的名称。bashffmpeg -i input1.wav -i input2.wav -filter_complex "[0:0][1:0]concat=n=2:v=0:a=1[out]" -map "[out]" output.wav
input1.wav
和 -i input2.wav
:指定两个输入文件。filter_complex "[0:0][1:0]concat=n=2:v=0:a=1[out]"
:使用 concat
滤镜将两个音频文件拼接在一起。n=2
表示有两个输入文件,v=0
表示没有视频流,a=1
表示有一个音频流。map "[out]"
:指定输出流。output.wav
:输出的拼接后的文件。本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!