我正在尝试使用韓國,这需要支持zscale的ffmpeg版本。
他们的 README 说这是 18.04 下的默认设置,但我的 20.04 下的版本是 4.2.4-1ubuntu0.1,似乎不包含 zscale 支持。
如果我运行apt-get install ffmpeg
,它会说,ffmpeg is already the newest version (7:4.2.4-1ubuntu0.1).
但从 ffmpeg.org 可以清楚地看出,当前的稳定版本是4.3.2-0。
我尝试添加ppa:jonathonf/ffmpeg-4
以获取最新版本,但更新失败(“没有发布文件”)。
最安全的更新方法是什么?理想情况下,有一个可以使用的 PPA,而我在谷歌上搜索没有找到。或者,我应该下载该ffmpeg_4.3.2-0+deb11u2ubuntu1_amd64.deb
文件并使用 dpkg 安装它吗?
我总是对侧信道安装任何东西都很担心,尤其是当它涉及与视频有关的东西时。安装当前稳定的 ffmpeg 的最佳“不会破坏未来系统 APT 更新”方法是什么?
答案1
还有其他 PPA 带有较新的 ffmpeg。最新的是FFmpeg 4 - 媒体工具(Xenial 及更新版本)作者:Rob Savoury。要将此 PPA 添加到您的系统,请使用以下命令:
sudo add-apt-repository ppa:savoury1/ffmpeg4
sudo apt-get update
sudo apt-get install ffmpeg
因此你将获得以下版本--enable-libzimg
编译标志,ffmkv
不会抱怨“HDR 到 SDR 的转换或分辨率变化”。
答案2
简单的解决方案
- 下载已经编译
ffmpeg
好的johnvansickle.com.包括 zscale 支持。 - 将下载的内容移入 或 ,将下载的内容放入您的
ffmpeg
(如果移入 ,请重新登录或运行)。PATH
ffmpeg
/usr/local/bin
~/bin
source ~/.profile
~/bin
这不会干扰任何系统文件或其他软件包。要卸载,只需删除该ffmpeg
文件即可。
我不太喜欢 PPA。它们可能很混乱,而且往往有点过度,可能会引起问题通过干扰包管理系统。
答案3
有一个ffmpeg 的 snap 包。“稳定”频道中的当前版本是 4.3.1,但其构建配置中未列出--enable-zimg
带有 的版本-version
,因此可能无法使用。但是,该 snap 包的“edge”频道包含一个基于 ffmpeg 4.4 的版本,带有--enable-zimg
。因此安装非常简单
snap install ffmpeg --channel edge
答案4
添加外部 PPA 非常危险,它们通常可能会导致您当前安装出现问题。
如果您正在部署您的应用程序并且需要特定版本,您可以使用此方法。
首先,我们将从以下网站之一下载最新的 gpl 静态构建版本:官方建设者 BtbN。然后我们将提取文件/usr/local/ffmpeg
并创建符号链接将二进制文件放入/usr/bin
目录中。
这是一个手动安装过程。您可以按照此处提到的所有步骤创建脚本:
1. 删除之前使用 apt 安装的软件包
sudo apt remove --purge --auto-remove -y ffmpeg
2. 创建临时目录并移动到该目录
mkdir -vp ~/tmp
cd ~/tmp
3.获取文件名和版本
## Define repository name
REPO_NAME='BtbN/FFmpeg-Builds'
## Define the URL of the latest release
LR_URL="https://api.github.com/repos/${REPO_NAME}/releases/latest"
## Get the latest version
version=$(curl -s "${LR_URL}" \
| grep -m 1 ffmpeg-n \
| cut -d ':' -f2 \
| cut -d '-' -f2 \
| tr -d 'n' \
| { read v; echo ${v::-2}; })
## Get the filename
dl_filename=$(curl -s "${LR_URL}" \
| grep "name.*linux64-gpl-${version}.tar.xz" \
| cut -d ':' -f2 \
| { read n; echo ${n:1:-2}; })
dl_name="${dl_filename::-7}"
4.下载文件
## Download the latest tar.xz
curl -s "${LR_URL}" \
| grep "browser_download_url.*linux64-gpl-${version}.tar.xz" \
| cut -d ':' -f 2,3 \
| tr -d '"' \
| wget -qi - -O $dl_filename
5. 定义包安装路径
pkg_path='/usr/local/ffmpeg'
pkg_lib_path='/usr/lib/ffmpeg'
6. 解压并安装下载的版本
sudo rm -rf $pkg_path && tar -xvf $dl_filename
sudo mv -v $dl_name $pkg_path
7. 将二进制文件添加到系统二进制文件和库目录中
sudo ln -sv "${pkg_path}" "${pkg_lib_path}"
sudo ln -sv "${pkg_lib_path}/bin/ffmpeg" '/usr/bin/ffmpeg'
sudo ln -sv "${pkg_lib_path}/bin/ffplay" '/usr/bin/ffplay'
sudo ln -sv "${pkg_lib_path}/bin/ffprobe" '/usr/bin/ffprobe'
8. 测试您的新版本。
ffmpeg -version | grep 'ffmpeg version'
现在您可以创建一个名为的脚本ffmpeg-install-latest.sh
:
#!/bin/bash
## Define package name
PKG_NAME='ffmpeg'
## Define system local path
LOCAL_PATH='/usr/local'
## Define system library path
LIB_PATH='/usr/lib'
## Define system binary path
BIN_PATH='/usr/bin'
## Define user home dir
USER_HOME_DIR=$(getent passwd ${SUDO_USER:-$USER} | cut -d: -f6)
## Define repository name
REPO_NAME='BtbN/FFmpeg-Builds'
## Define URL releases
RELEASES_URL="https://api.github.com/repos/${REPO_NAME}/releases"
## Define URL of the latest release
## LR_URL="https://api.github.com/repos/${REPO_NAME}/releases/latest"
LR_URL="${RELEASES_URL}/latest"
## Define temporal directory
TMP_DIR='tmp'
## Move to the temporal directory
tmp_path="${USER_HOME_DIR}/${TMP_DIR}"
mkdir -vp $tmp_path
cd $tmp_path
## Get the latest version and build
full_version=$(curl -s "${LR_URL}" \
| grep -m 1 ffmpeg-n \
| cut -d ':' -f2 \
| cut -d '-' -f2 \
| tr -d 'n')
version="${full_version::-2}"
build="${full_version:4:1}"
echo 'Latest version: '$full_version
## Get the filename
dl_filename=$(curl -s "${LR_URL}" \
| grep "name.*linux64-gpl-${version}.tar.xz" \
| cut -d ':' -f2 \
| { read n; echo ${n:1:-2}; })
dl_name="${dl_filename::-7}"
echo 'File to download: '$dl_filename
## Download the latest
## Base on: echo $(curl -s "${LR_URL}"" | grep "browser_download_url.*ffmpeg-n4\.4\.1.*linux64-gpl-4\.4\.tar.xz" | cut -d ':' -f 2,3 | tr -d '"')
curl -s "${LR_URL}" \
| grep "browser_download_url.*linux64-gpl-${version}.tar.xz" \
| cut -d ':' -f 2,3 \
| tr -d '"' \
| wget -qi - -O $dl_filename
## Remove previous package installed using apt
status="$(dpkg-query -W --showformat='${db:Status-Status}' ${PKG_NAME} 2>&1)"
if [ $? = 0 ] || [ "${status}" = installed ]; then
sudo apt remove --purge --auto-remove -y "${PKG_NAME}"
fi
## Define package installation paths
pkg_path="${LOCAL_PATH}/${PKG_NAME}"
pkg_lib_path="${LIB_PATH}/${PKG_NAME}"
## Extract and install the downloaded version
sudo rm -rf $pkg_path && tar -xvf $dl_filename
sudo mv -v $dl_name $pkg_path
## Add binary files to system binary and library directories
sudo ln -sv "${pkg_path}" "${pkg_lib_path}"
sudo ln -sv "${pkg_lib_path}/bin/ffmpeg" "${BIN_PATH}/ffmpeg"
sudo ln -sv "${pkg_lib_path}/bin/ffplay" "${BIN_PATH}/ffplay"
sudo ln -sv "${pkg_lib_path}/bin/ffprobe" "${BIN_PATH}/ffprobe"
## Test your new version.
ffmpeg -version | grep 'ffmpeg version'