ffmpeg 的使用
本文最后更新于 450 天前,其中的信息可能已经有所发展或是发生改变。

之前下载的一些电影,剧集,在手机上观看不是很友好(体积占用太大了),就萌发出了压缩一下的想法,就去搜了一下FFmpeg的简单用法:
首先输入

lspci -k | grep -EA3 'VGA|3D|Display'

确认一下显卡(uhd6630)驱动安装与否
如果输出有“Kernel driver in use: i915” 那么说明Intel的i915驱driver(支持UHD 630)正在使用。
安装FFmpeg:

sudo apt update
sudo apt install ffmpeg

然后,为了利用你的UHD 630显卡进行硬件加速编码,你需要确保你的ffmpeg支持VA-API(Video Acceleration API)。这是Intel图形硬件所使用的API。

#检查ffmpeg是否支持VA-API:

如果输出中包含"vaapi",那么你的ffmpeg就支持VA-API。
使用以下命令来进行硬件加速编码:

ffmpeg -vaapi_device /dev/dri/renderD129 -i input.mp4 -vf 'format=nv12,hwupload' -c:v h264_vaapi output.mp4

我最终想要实现的是自动压缩某个目录下的所有的mp4文件,并且输入到这个目录下的720p文件夹内,最终写好的批量代码为:

#!/bin/bash

input_dir="/data/other/001"
output_dir="${input_dir}/720p"

mkdir -p "${output_dir}"

find "${input_dir}" -type f -name "*.mp4" | while read file; do
    filename=$(basename "$file")
    ffmpeg -vaapi_device /dev/dri/renderD128 -i "${file}" \
        -vf 'format=nv12,hwupload' \
        -f mp4 -movflags faststart \
        -c:v h264_vaapi -preset veryfast -tune:v ssim -crf 20 -qmin 15 -qmax 25 -keyint_min 10 \
        -c:a copy \
        -sn -timestamp now -map_metadata -1 -map_chapters -1 -vsync cfr \
        "${output_dir}/${filename}"
done

该脚本的作用是将位于指定目录(/data/other/001)下的所有 .mp4 格式视频文件转换为 H.264 编码、720p 分辨率(1280x720)、音频编码不变的新视频文件,输出到与原始文件相同的目录下。具体实现方式如下:

创建一个存储输出文件的目录 720p,并确保它在输入文件所在目录的路径下。

使用 find 命令查找所有 .mp4 格式的文件,并将它们传递给 while 循环进行处理。

对于每个输入文件,使用 ffmpeg 命令将其转换为 H.264 编码的 .mp4 格式视频文件,输出到先前创建的存储目录中。

-vaapi_device /dev/dri/renderD129 :使用 VA-API 加速进行视频编码。
-vf 'format=nv12,hwupload' :将输入文件转换为 YUV420p 格式,并启用硬件加速上传。
-f mp4 -movflags faststart :将输出格式设置为 MP4,并启用快速启动标志以使文件可以流式传输。
-c:v h264_vaapi :设置 H.264 视频编码器和 VA-API 加速。
-preset veryfast -tune:v ssim -crf 20 -qmin 15 -qmax 25 -keyint_min 10:设置视频编码器参数,以达到较高的视频质量和压缩率。
-c:a copy :将音频轨道复制到输出文件中,不进行重新编码。
-sn -timestamp now -map_metadata -1 -map_chapters -1 -vsync cfr :设置一些常规选项,如禁用字幕、设置时间戳、禁用元数据和章节信息等。

-sn :禁用所有字幕流。这意味着在输出文件中不会包含任何字幕。

-timestamp now :设置输出文件中视频和音频流的时间戳为当前时间。这样做可以确保输出文件中的时间戳与输入文件中的时间戳不同,以避免一些播放器可能会出现的问题。

-map_metadata -1 :从输出文件中删除所有元数据。这将删除输入文件中可能存在的所有元数据(如作者、标题、描述等)。

-map_chapters -1 :从输出文件中删除所有章节信息。

-vsync cfr :指定帧率控制模式。cfr 表示“恒定帧率”,它将输出视频的帧率设置为输入的帧率。

-preset veryfast :选择预设编码速度和质量的选项。veryfast 表示编码器将快速处理视频,但输出质量可能会稍微降低。

-tune:v ssim :根据 SSIM(结构相似性)算法进行编码,以提高视频质量。SSIM 算法是一种衡量两个图像之间结构相似性的方法。

-crf 20 :使用 Constant Rate Factor(CRF)方法进行视频压缩。20 是 CRF 值,表示编码器将尝试以较高的质量进行编码。CRF 值越低,输出视频的质量越好,但文件大小也越大。

-qmin 15 -qmax 25 :设置视频质量的最小和最大值。这个参数与 CRF 值一起使用,可以使编码器尽可能地接近输入质量,但又不会产生过大的输出文件大小。

-keyint_min 10 :设置关键帧之间的最小时间间隔。关键帧是视频中的一个完整帧,可以作为可独立解码的单元。在编码期间,编码器会在某些帧中插入关键帧,以确保视频可以按照正确的顺序播放。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇