ffmpeg使用记录
## 简介 本文用于记录使用`FFmpeg`的记录,可当作笔记查阅。
渲染中...
## 简介 本文用于记录使用`FFmpeg`的记录,可当作笔记查阅。 <!-- more --> ## 处理加速 `FFmpeg` 在运行时主要使用 `CPU` 资源来进行视频解码、编码、转换和处理等操作。通常情况下,默认情况下 `FFmpeg` 不会直接利用 `GPU` 进行处理。但是,如果您的系统支持 `GPU` 加速,并且您的 `FFmpeg` 编译版本启用了相关的 `GPU` 加速选项,那么您可以通过设置相应的参数来利用 `GPU` 进行加速。 目前,`FFmpeg` 支持通过 `CUDA`、`OpenCL`、`VDPAU`、`VA-API`等接口来利用`GPU`进行加速。具体支持的接口取决于您使用的`FFmpeg`版本以及所使用的硬件和驱动情况。 如果您想要使用`GPU`进行加速,可以在编译`FFmpeg`时启用相应的选项,然后通过命令行参数或者`API`调用来指定使用`GPU`进行加速。 ### CUDA加速 要在 `FFmpeg` 中使用 `CUDA` 开启 `GPU` 加速,您需要确保以下几点: - 安装 `CUDA Toolkit`:首先,您需要安装 `NVIDIA` 的`CUDA Toolkit`,您可以从 `NVIDIA` 官方网站下载并安装适用于您操作系统版本的 `CUDA Toolkit`。 - 编译FFmpeg:在编译时您需要通过 `--enable-cuda` 参数启用CUDA支持。 > PS:**可与通过 `ffmpeg -buildconf` 命令查看你的 `FFmpeg` 编译配置,如果出现 `--enable-cuda` 相关配置,大都是支持 CUDA 加速的软件包。** - 运行FFmpeg命令:一旦您编译并安装了 `CUDA` 支持的 `FFmpeg` ,您可以使用 `CUDA` 加速来执行相应的命令。在执行命令时,`FFmpeg` 会自动识别 `CUDA` 支持,并且尝试使用 `GPU` 进行加速处理。以下是一个示例命令,演示了如何使用 `CUDA` 加速进行视频转码: ```bash ffmpeg -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` 分别指定了编码器的配置参数。您可以根据需要调整参数来达到更好的性能和质量。 ## 视频 ### 视频裁剪 ```bash ffmpeg -i input.mp4 -vf "crop=640:480" output.mp4 ``` - `-vf "crop=640:480"`: 将视频裁剪为`640x480`的分辨率。 ### 视频优化 ```bash ffmpeg -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 视频文件。 ### MP4转M3U8 ```bash ffmpeg -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` 也是可以的。 ## 音频 ### 视频分离音频 ```bash ffmpeg -i input.mp4 -vn -acodec copy output_audio.aac ``` - `-i input.mp4`: 指定输入文件。 - `-vn`: 禁用视频流。 - `-acodec copy`: 表示使用原始音频编解码器进行拷贝。 - `output_audio.aac`: 是输出音频文件的名称。 ### 音频格式直接转换为wav ```bash ffmpeg -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`:指定输出音频文件的名称。 ### 音频文件合并 ```bash ffmpeg -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`:输出的拼接后的文件。
END
评论
登录后查看和发表评论
前往登录