gpt4 book ai didi

bash - 如何使用 shell 脚本将多个文件从 mp4 转换为 flv

转载 作者:行者123 更新时间:2023-12-04 23:05:08 25 4
gpt4 key购买 nike

假设我在目录 /home/user/videos/awaiting_conversion 中有一堆视频我将如何使用 cron 运行与此类似的脚本以将每个视频批量转换为不同的格式?
/bin/sh -c $'nice /usr/bin/ffmpeg -i \044'\'$'/home/user/videos/awaiting_conversion/video_file_1.mp4'\'$' -s \044'\'$'480x320'\'$' -vcodec libx264 -acodec libmp3lame -ab \044'\'$'64k'\'$' -vpre fast -crf \044'\'$'30'\'$' -ar \044'\'$'22050'\'$' -f flv -y \044'\'$'/home/user/videos/converted/video_file_1.flv'\'$''
上面的脚本适用于单次转换,但是:

  • 它假定视频的名称是静态的/已知的(批量转换时不会出现这种情况)。
  • 它假设只有一个视频要转换(可能是也可能不是),即没有“循环”。
  • 它将原始文件保留在原处而不是删除它(这是我希望发生的事情以防止重复转换)。

  • 最终的问题是如何为 /home/user/videos/awaiting_conversion 中存在的每个视频运行该脚本,将文件名作为变量传递?

    最佳答案

    尝试这样做:

    #!/bin/bash

    checkFile(){
    [[ -s $1 && -f $1 ]] && return 0 || return 1
    }

    mp42flv(){
    for arg; do
    checkFile "$arg" || continue
    /usr/bin/ffmpeg \
    -i "$arg" \
    -s '480x320' \
    -vcodec libx264 \
    -acodec libmp3lame \
    -ab '64k' \
    -vpre fast \
    -crf '30' \
    -ar '22050' \
    -f flv \
    -y "${arg%.*}.flv" ||
    echo >&2 "Error treating $arg"
    done
    }

    if [[ -t 0 ]]; then
    mp42flv "$@"
    else
    while IFS= read -r a; do
    checkFile "$a" || continue
    mp42flv "$a"
    done
    fi

    用法
  • 带着一团 ./script.sh /home/user/videos/converted/video_file*.mp4
  • 带有文件名 ./script.sh /home/user/videos/converted/video_file_01.mp4
  • 通过管道 find /home/user/videos/converted -type f -name '*video*mp4' |./script.sh (脚本检测到 STDIN 的使用)
  • 关于bash - 如何使用 shell 脚本将多个文件从 mp4 转换为 flv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15672101/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com