AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1360827
Accepted
user2671688
user2671688
Asked: 2021-08-30 14:19:43 +0800 CST2021-08-30 14:19:43 +0800 CST 2021-08-30 14:19:43 +0800 CST

在 Ubuntu 20.04 上安装最新稳定 ffmpeg (>= 4.3) 的最安全方法(ppa 不工作)?

  • 772

我正在尝试使用ffmkv,它需要支持 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更新”的方法是什么?

20.04
  • 5 5 个回答
  • 10054 Views

5 个回答

  • Voted
  1. Best Answer
    N0rbert
    2021-08-30T21:16:31+08:002021-08-30T21:16:31+08:00

    还有其他具有较新 ffmpeg 的 PPA。最新的是来自 Rob Savory的FFmpeg 4 媒体工具(Xenial 和更新版本)。要将此 PPA 添加到您的系统,请使用以下命令:

    sudo add-apt-repository ppa:savoury1/ffmpeg4
    sudo apt-get update
    sudo apt-get install ffmpeg
    

    结果,您将获得带有--enable-libzimg编译标志的版本,并且ffmkv不会抱怨“HDR 到 SDR 转换或分辨率更改”。

    注意:您可以使用名为Y PPA Manager的特殊本地应用程序自行搜索 PPA。

    • 8
  2. llogan
    2021-08-31T09:14:31+08:002021-08-31T09:14:31+08:00

    简单的解决方案

    1. ffmpeg从johnvansickle.com下载已经编译好的。包括 zscale 支持。
    2. 通过将下载的内容移动到或(如果将其移动到,请重新登录或运行)将下载的内容ffmpeg放入您的。PATHffmpeg/usr/local/bin~/binsource ~/.profile~/bin

    这不会干扰任何系统文件或其他软件包。要卸载只需删除ffmpeg文件。

    我不是 PPA 的忠实粉丝。它们可能很混乱,通常是矫枉过正的,并且可能通过干扰包管理系统而导致问题。

    • 7
  3. andrew.46
    2021-08-31T01:14:20+08:002021-08-31T01:14:20+08:00

    获得 FFmpeg 和 zscale 过滤器副本的最佳方法可能是使用,但稍作修改,优秀的 FFmpeg trac编译指南。本指南不会干扰系统库。

    这只需两个简单的步骤即可完成:

    1.安装zimg:

    在安装指南中的一长串依赖项时,还要添加以下内容来安装zimage:

       mkdir -p ~/ffmpeg_sources && \
       cd ~/ffmpeg_sources && \
       wget https://github.com/sekrit-twc/zimg/archive/refs/tags/release-3.0.2.tar.gz && \
       tar xvf release-3.0.2.tar.gz && \
       cd zimg-release-3.0.2 && \
       ./autogen.sh && \
       ./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
       make && \
       make install
    

    zimg这会安装FFmpeg 在编译时获取的本地副本。

    2.编译FFmpeg:

    遵循完整的FFmpeg 跟踪指南,当您到达编译 FFmpeg 的部分时,只需将以下内容添加到./configure字符串中:

       --enable-libzimg
    

    这足以启用 zscale 过滤器。

    3.测试,测试...

    可以测试 FFmpeg 本身是否存在 zscale 过滤器:

    andrew@ithaca:~$ ffmpeg -filters 2> /dev/null |grep zscale
     ..C zscale            V->V       Apply resizing, colorspace and bit depth conversion.
    andrew@ithaca:~$ 
    

    我ffmkv用一个大的高档尺寸测试了自己:

    andrew@ithaca:~$ ffmkv --preset 'Up to 4K, original audio, 4GB per hour VBR, HDR' input.mkv output.mkv
    Audio is Stream Copy VBR, filesize will be greater than estimated.
    Processing pass 1 of VBR video, remaining time is remaining time for pass 1 only.
    Process will sit on 100% while ffmpeg closes out functions.
    ffmpeg conversion of input.mkv started on 08/30/21 7:53:05 PM
    input.mkv has 1248 frames, now converting
    ffmpeg: 1253 of 1248 frames at 24 fps, progress: 100% and ETA: 0h 0m 0s     
    ffmpeg stopped on 08/30/21 7:54:06 PM
    
    Processing pass 2 of VBR video, remaining time is total remaining time.
    Process will sit on 100% while ffmpeg closes out functions.
    ffmpeg conversion of input.mkv started on 08/30/21 7:54:06 PM
    input.mkv has 1248 frames, now converting
    ffmpeg: 1253 of 1248 frames at 23 fps, progress: 100% and ETA: 0h 0m 0s     
    ffmpeg stopped on 08/30/21 7:55:06 PM
    andrew@ithaca:~$ 
    

    一切都很好:)

    • 2
  4. Philipp Wendler
    2021-08-31T01:55:27+08:002021-08-31T01:55:27+08:00

    ffmpeg有一个snap 包。“稳定”频道中的当前版本是 4.3.1,但未--enable-zimg在其构建配置中列出打印的版本-version,因此它可能无法正常工作。但是,该快照包的“边缘”通道包含基于 ffmpeg 4.4 的版本,带有--enable-zimg. 所以安装就像

    snap install ffmpeg --channel edge
    
    • 2
  5. Teocci
    2021-11-17T02:38:38+08:002021-11-17T02:38:38+08:00

    添加外部 PPA 的风险很大,而且通常它们可能会导致当前安装出现问题。

    如果您正在部署应用程序并且需要特定版本,则可以使用此方法。

    首先,我们将从官方构建器之一 BtbN下载最新的 gpl 静态构建。然后我们将提取文件中的文件并在目录中/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'
    
    • 0

相关问题

  • 如何在 18.04..20.04 上设置本地通配符 (127.0.0.1) 域解析?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve