本文用于记录使用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_nvenc 编码器来利用 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 许可协议。转载请注明出处!