gpt4 book ai didi

bash - ffmpeg:通过 bash 从数组构建命令时没有此类文件错误

转载 作者:行者123 更新时间:2023-12-04 23:10:22 26 4
gpt4 key购买 nike

我正在尝试将我所有的 srt 文件集成到 mkv 容器中。
为此,我编写了一个脚本,它获取一个 mkv 文件(来自另一个脚本)作为 $1,在同一目录中查找 srt 文件(与视频文件具有相同的基本名称),然后构建一个 ffmpeg 命令。
脚本(我知道没有安全性 - 现在我需要让它工作......):

filename="$1"
medianame=${filename//'.mkv'/}
searchpattern=${medianame}\*
directory="$(dirname "${filename}")"
regex=".*\.(\w{2})(\.srt)$"

declare -A langcode
langcode[de]=ger
langcode[en]=eng
langcode[nl]=nld
langcode[ro]=ron

mapcount=0
args_subfiles=()
args_map=()
args_meta=()

while read line
do
if [[ $line =~ $regex ]]
then
mapcount=$((mapcount+1))
args_map+=("-map ${mapcount}:s" )
medianame=${filename//'.mkv'/}
args_subfiles+=( ' -i '"$line" )
lang=${BASH_REMATCH[1]}
echo $lang
args_meta+=('-metadata:s:s:'$mapcount' language='${langcode[$lang]} )
fi

done <<< "$(find "$directory" -wholename "$searchpattern")"
echo "${args_subfiles[@]}"
echo "${args_map[@]}"
echo "${args_meta[@]}"

# subarg=$(echo "${args_subfiles[@]}")
ffmpeg -i "$filename" "${args_subfiles[@]}" -map 0 ${args_map[@]} -c copy ${args_meta[@]} "$out"

ffmpeg 输出:
    ffmpeg version 5.0 Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 11 (GCC)
configuration: --prefix=/root/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/root/ffmpeg_build/include --extra-ldflags=-L/root/ffmpeg_build/lib --extra-libs=-lpthread --extra-libs=-lm --bindir=/root/bin --enable-gpl --enable-libfdk_aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libx264 --enable-cuda-nvcc --enable-cuvid --enable-nvenc --enable-libass --enable-opencl --cpu=native --enable-openssl --extra-libs='-lpthread -lm -lz' --enable-nonfree
libavutil 57. 17.100 / 57. 17.100
libavcodec 59. 18.100 / 59. 18.100
libavformat 59. 16.100 / 59. 16.100
libavdevice 59. 4.100 / 59. 4.100
libavfilter 8. 24.100 / 8. 24.100
libswscale 6. 4.100 / 6. 4.100
libswresample 4. 3.100 / 4. 3.100
libpostproc 56. 3.100 / 56. 3.100
Input #0, matroska,webm, from '/media/tv/La Brea/Season 1/La.Brea.S01E05.mkv':
Metadata:
encoder : libebml v1.4.2 + libmatroska v1.6.4
creation_time : 2021-10-27T04:01:38.000000Z
Duration: 00:43:02.59, start: 0.000000, bitrate: 7750 kb/s
Stream #0:0(eng): Video: h264 (High), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn (default)
Metadata:
BPS : 7107896
DURATION : 00:43:02.580000000
NUMBER_OF_FRAMES: 61920
NUMBER_OF_BYTES : 2294588959
_STATISTICS_WRITING_APP: mkvmerge v62.0.0 ('Apollo') 64-bit
_STATISTICS_WRITING_DATE_UTC: 2021-10-27 04:01:38
_STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
Stream #0:1(eng): Audio: eac3, 48000 Hz, 5.1(side), fltp, 640 kb/s (default)
Metadata:
BPS : 640000
DURATION : 00:43:02.592000000
NUMBER_OF_FRAMES: 80706
NUMBER_OF_BYTES : 206607360
_STATISTICS_WRITING_APP: mkvmerge v62.0.0 ('Apollo') 64-bit
_STATISTICS_WRITING_DATE_UTC: 2021-10-27 04:01:38
_STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
Stream #0:2(eng): Subtitle: subrip
Metadata:
title : English
BPS : 72
DURATION : 00:42:33.899000000
NUMBER_OF_FRAMES: 800
NUMBER_OF_BYTES : 23018
_STATISTICS_WRITING_APP: mkvmerge v62.0.0 ('Apollo') 64-bit
_STATISTICS_WRITING_DATE_UTC: 2021-10-27 04:01:38
_STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
-i /media/tv/La Brea/Season 1/La.Brea.S01E05.nl.srt: No such file or directory

最佳答案

在行中:

args_subfiles+=( ' -i '"$line" )
它附加了一个类似于以下内容的数组元素: ' -i file.srt' .
然后将元素传递给 ffmpeg作为单个字符串 -i file.srt ,
不是 -i选项后跟 file.srt .相反,请将该行修改为:
args_subfiles+=( '-i' "$line" )
然后将命令行选项传递给 ffmpeg适本地。 (请注意
之间的空白。将两个单独的元素附加到数组中。)

关于bash - ffmpeg:通过 bash 从数组构建命令时没有此类文件错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70980713/

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