菜鸟科技网

Linux转码命令有哪些?

核心工具:FFmpeg

FFmpeg 是一个开源、跨平台的音视频处理工具集,被誉为“音视频领域的瑞士军刀”,它几乎可以处理所有格式的音视频文件。

Linux转码命令有哪些?-图1
(图片来源网络,侵删)

安装 FFmpeg

在大多数 Linux 发行版中,都可以通过包管理器轻松安装。

  • Debian / Ubuntu:

    sudo apt update
    sudo apt install ffmpeg
  • CentOS / RHEL / Fedora:

    # CentOS/RHEL 7/8
    sudo yum install epel-release
    sudo yum install ffmpeg
    # Fedora
    sudo dnf install ffmpeg
  • Arch Linux:

    Linux转码命令有哪些?-图2
    (图片来源网络,侵删)
    sudo pacman -S ffmpeg

安装后,可以检查版本:

ffmpeg -version

FFmpeg 基本语法和核心概念

理解基本语法是转码的关键。

ffmpeg -i [输入文件] [选项] [输出文件]
  • -i: 指定输入文件。
  • [选项]: 用于设置编码器、比特率、分辨率、帧率等参数。
  • [输出文件]: 指定转码后的输出文件名。FFmpeg 会根据输出文件的扩展名自动选择封装格式和默认编码器.mp4 会默认使用 H.264 视频编码和 AAC 音频编码。

核心概念:

  • 编码器: 将音视频数据压缩成特定格式(如 H.264, H.265/HEVC, AAC)的算法。
  • 解码器: 将压缩的音视频数据解压成原始数据。
  • 容器格式: 封装音视频流、字幕、元数据的“外壳”,如 .mp4, .mkv, .avi, .flv 等。
  • 比特率: 控制文件大小和质量的参数,比特率越高,质量越好,文件越大,单位通常是 k (千比特/秒)。

常见转码场景与命令示例

视频格式转换(最常见)

目标:将 .mkv 文件转换为 .mp4 文件。

ffmpeg -i input.mkv output.mp4

说明

Linux转码命令有哪些?-图3
(图片来源网络,侵删)
  • FFmpeg 会自动检测 input.mkv 中的视频流(如 H.264)和音频流(如 AAC),并将它们封装进 output.mp4 容器中,如果输入流的编码与 MP4 容器兼容,这个过程非常快,几乎是“重新封装”(remuxing)。

调整视频分辨率(缩放)

目标:将视频分辨率从 1920x1080 降为 1280x720(同时保持原格式)。

# 方法1:指定固定输出尺寸
ffmpeg -i input.mp4 -vf "scale=1280:720" output_720p.mp4
# 方法2:指定宽度,高度自动保持比例
ffmpeg -i input.mp4 -vf "scale=1280:-1" output_1280w.mp4
# 方法3:指定高度,宽度自动保持比例
ffmpeg -i input.mp4 -vf "scale=-1:720" output_720h.mp4

说明

  • -vf-filter:v 的缩写,表示应用视频滤镜。
  • scale 是缩放滤镜。
  • 使用 -1 可以让 FFmpeg 自动计算另一个维度的值,以保持视频的宽高比,避免画面变形。

调整视频比特率(控制文件大小)

目标:将视频的比特率降低到 1500 kbps,以减小文件体积。

# 使用 CRF (Constant Rate Factor) 控制质量 (推荐,H.264/H.265)
# CRF 范围: 0-51,值越小质量越好,18-28 是常用范围。
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output_small.mp4
# 使用比特率 控制大小
# -b:v 指定视频比特率
ffmpeg -i input.mp4 -b:v 1500k output_small.mp4

说明

  • -c:v libx264: 明确指定使用 H.264 编码器,如果不指定,FFmpeg 可能会选择其他编码器。
  • CRF (Constant Rate Factor) 是更现代、更智能的质量控制方式,它会在保持视觉质量相对恒定的前提下,动态调整比特率。23 是 H.264 的默认值,提供了很好的质量/大小平衡。
  • -b:v (或 -video_bitrate) 是传统的比特率控制,直接指定一个平均比特率。

只提取音频或视频

目标:从视频中提取音频。

# 提取为 MP3 格式
ffmpeg -i input.mp4 -vn -ab 192k output.mp3
# 提取为 AAC 格式
ffmpeg -i input.mp4 -vn -acodec copy output.aac

说明

  • -vn: 表示 "disable video"(禁用视频流)。
  • -ab 192k: 设置音频比特率为 192 kbps。
  • -acodec copy: 表示直接复制音频流,不进行重新编码,速度最快,且质量无损。

目标:从视频中提取视频画面(无声音)。

# 提取为 H.264 编码的 MP4
ffmpeg -i input.mp4 -an -c:v copy output_video.mp4
# 转换为 GIF (需要额外工具支持)
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1" output.gif

说明

  • -an: 表示 "disable audio"(禁用音频流)。
  • -c:v copy: 直接复制视频流。

修改帧率

目标:将视频帧率从 30fps 降为 15fps。

ffmpeg -i input.mp4 -r 15 output_15fps.mp4

说明

  • -r 15: 设置输出视频的帧率为 15,这会通过丢弃或复制帧来实现,可能会影响视频流畅度。

高级组合 - 多参数转码

目标:将一个 .mkv 文件转换为 .mp4,同时将分辨率缩放到 720p,使用 CRF 20 保证高质量,并保持音频不变。

ffmpeg -i input.mkv -vf "scale=1280:-1" -c:v libx264 -crf 20 -c:a copy output_high_quality.mp4

说明

  • 这个命令非常强大且实用:
    • -vf "scale=1280:-1": 先缩放视频。
    • -c:v libx264 -crf 20: 用 H.264 编码视频,质量设为较高水平(CRF 20)。
    • -c:a copy: 直接复制原始音频流,避免再次编码导致的音质损失和耗时。

FFmpeg 参数速查表

参数 全称 说明 示例
-i input_file 指定输入文件 -i video.mkv
-c codec 指定编码器(可以是视频或音频) -c:v libx264, -c:a aac
-c:v video_codec 仅指定视频编码器 -c:v libx265
-c:a audio_codec 仅指定音频编码器 -c:a libopus
-b:v video_bitrate 设置视频比特率 -b:v 2000k
-b:a audio_bitrate 设置音频比特率 -b:a 128k
-crf constant_rate_factor 设置视频质量(H.264/H.265) -crf 23
-r fps 设置帧率 -r 30
-s size 设置分辨率(宽x高) -s 1920x1080
-vf video_filters 应用视频滤镜 -vf "scale=1280:-1"
-af audio_filters 应用音频滤镜 -af "aformat=sample_rates=44100"
-an disable_audio 禁用音频流 -an
-vn disable_video 禁用视频流 -vn
-y overwrite 覆盖已存在的输出文件,不提示 -y output.mp4
-n never_overwrite 不覆盖已存在的输出文件 -n output.mp4

其他相关工具

虽然 ffmpeg 是最强大的,但有时也需要一些轻量级工具。

avconv

libav 项目下的工具,曾是 ffmpeg 的一个分支,但现在已独立发展,其语法和 ffmpeg 非常相似,在很多场景下可以互换,如果你的系统上只有 avconv,它的用法基本通用。

iconv

这个工具不用于音视频,而是用于文本编码的转换,例如将 GBK 编码的中文文件转换为 UTF-8

# 将 gbk.txt 从 GBK 编码转换为 utf-8.txt
iconv -f gbk -t utf-8 gbk.txt -o utf-8.txt

总结与最佳实践

  1. 先测试:对于大文件或重要文件,先用一小段视频测试转码参数是否满意。
  2. 使用 -c:a copy:如果输入音频的编码(如 AAC)与目标容器兼容,尽量复制音频流,可以节省大量时间并保证音质。
  3. CRF 优于 -b:v:对于追求质量而非精确大小的场景,优先使用 CRF。
  4. 善用 -vf:分辨率、裁剪、加水印等操作都通过滤镜实现,非常灵活。
  5. 查看流信息:在不确定输入文件格式时,使用 ffprobe 查看,它是 ffmpeg 套件的一部分。
    ffprobe -v quiet -print_format json -show_streams input.mp4 | jq '.streams[] | {codec_type: .codec_type, codec_name: .codec_name}'

希望这份详细的指南能帮助你掌握 Linux 下的转码技巧!

分享:
扫描分享到社交APP
上一篇
下一篇