FFmpeg压缩音视频

FFmpeg压缩视频

FFmpeg尽可能保持画质的同时有效地压缩视频文件大小

使用 ffmpeg 压缩视频时,可以通过调整各种参数来在保持画质的同时减少文件大小。以下是一些技巧和示例命令,帮助你实现这一点:

使用CRF(Constant Rate Factor): CRF 是一个非常方便的选项,用于在压缩视频时权衡文件大小和画质。CRF 的值范围是 0 到 51,其中 0 表示无损压缩,23 是默认值,51 表示最差质量。一般来说,18 到 23 是一个很好的范围,数值越小,画质越好,文件也会越大。

ffmpeg -i input.mp4 -vcodec libx264 -crf 23 output.mp4

调整比特率: 手动设置目标比特率可以直接控制视频的输出大小和质量。你可以使用 -b:v 参数来设置视频比特率。

ffmpeg -i input.mp4 -b:v 1000k -bufsize 2000k output.mp4

使用预设(Presets): FFmpeg 提供了一些预设,这些预设会影响编码速度和压缩效率。常见的预设有 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow 和 placebo。预设越慢,压缩效率越高,文件越小,但编码时间也会更长。

ffmpeg -i input.mp4 -vcodec libx264 -preset slow -crf 23 output.mp4

调整分辨率: 如果你愿意降低视频的分辨率,这也会显著减少文件大小,同时对画质的影响相对较小。

ffmpeg -i input.mp4 -vf "scale=1280:720" -crf 23 output.mp4

音频压缩: 同时压缩音频也能减少文件大小。你可以使用 AAC 编码器并设置比特率。

ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -acodec aac -b:a 128k output.mp4

结合使用上述方法:

你可以结合上述所有方法来最大化压缩效果,同时尽可能保持较好的画质。

ffmpeg -i input.mp4 -vcodec libx264 -preset slow -crf 22 -vf "scale=1280:720" -acodec aac -b:a 128k output.mp4

通过这些方法,你可以找到一个适合你需求的平衡点,在尽可能保持画质的同时有效地压缩视频文件大小。

ffmpeg -y -i "{input_file}" -c:a copy -c:v libx264 -profile:v high -crf 48 "{output_file}"

这条命令会将 {input_file} 转换为 {output_file}:

音频部分直接复制,不进行重新编码。
视频部分使用 H.264 编码器(libx264)进行压缩。
编码配置档次为 high。
使用 CRF 48(非常低的画质)进行视频压缩。
如果输出文件已存在,则自动覆盖。
需要注意的是,CRF 值为 48 通常会导致非常差的画质,建议根据实际需求调整这个值以在文件大小和画质之间找到合适的平衡点。

Python调用FFmpeg命令压缩视频

import argparse
import os
import subprocess

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="compress video")
    parser.add_argument('--input', type=str, help='input dir path')
    args = parser.parse_args()
    if args.input is None:
        args.input = input("input dir path: ")
    input_dir_path = args.input
    file_path_list = [file for file in os.listdir(input_dir_path) if file.endswith('.mp4')]
    for file_path in file_path_list:
        output_dir = os.path.join(input_dir_path, 'out')
        print(output_dir)
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)
        input_file = os.path.join(input_dir_path, file_path)
        output_file = os.path.join(output_dir, file_path)
        if os.path.exists(output_file):
            continue
        # 构造FFmpeg命令
        command = f"/usr/bin/ffmpeg -y -i '{input_file}' -crf 36 '{output_file}'"
        subprocess.call(command, shell=True)

FFmpeg从视频中提取音频

ffmpeg -i input.m4a -f segment -segment_time 600 -c:a pcm_s16le -ar 44100 -ac 1 output.wav

sox从视频中提取音频

#Linux音频转换工具包
yum -y install sox
sox -t raw -c 1 -e signed-integer -b 16 -r 16000 input.m4a output.wav
-b, --bits BITS	每个编码样本占用的数据位数
-c, --channels CHANNELS	音频文件包含的通道数
-e, --encoding ENCODING	音频文件的编码类型
-r, --rate RATE	音频文件的采样率
-t, --type FILE-TYPE	音频文件的文件类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值