gpt4 book ai didi

bash - avconv : flac to ogg conversion with metadata kept

转载 作者:行者123 更新时间:2023-11-29 09:00:41 25 4
gpt4 key购买 nike

我目前正在编写一个命令行工具,用于将具有各种格式(flac/ogg/mp3/...)的输入音乐库转换为给定格式(flac/ogg/mp3)的输出音乐库。我将它基于 avconv(如果 avconv 不可用,则基于 ffmpeg),因为它是我发现的最完整的命令行转换器。我的脚本可以在这个 URL (GitHub) 上找到:

https://github.com/biapy/howto.biapy.com/blob/master/various/mussync-tools

我正在尝试将元数据从输入库文件传递到输出/转换后的库文件。

我想出了这段代码:

 local MAP_METADATA=' 0:g'
# Specific needs for some input formats/
case "${INPUT_FILE_MIMETYPE}" in
'application/ogg' )
# Get input metadata from first audio stream and direct it to global.
MAP_METADATA=' 0:s:0'
;;

* )
# Do nothing.
# MAP_METADATA=' 0:g'
;;
esac

# Specific needs for some output formats/
local OUTPUT_OPTIONS=""
case "${OUTPUT_FORMAT}" in
'flac' )
# No encoding options needed.
ENCODING_OPTIONS=""
;;

'ogg' )
# Set vorbis as default codec for ogg.
OUTPUT_OPTIONS="-codec:a libvorbis -f ${OUTPUT_FORMAT}"
# Map input metadata to all audio streams in ogg container.
MAP_METADATA=":s:a ${MAP_METADATA}"
;;

* )
# Do nothing.
# MAP_METADATA="${MAP_METADATA}"
OUTPUT_OPTIONS="-f ${OUTPUT_FORMAT}"
;;
esac

# Dangerous solution for mp3 cbr format:
# Write output on pipe and then directed to file.
# For cbr format for mp3 files. Harmless for other formats.
# See: http://ffmpeg.zeranoe.com/forum/viewtopic.php?f=7&t=377
#
# What about log output ? how to prevent it from being included in
# the resulting output file ?

if ! command ${AVCONV} -i "${INPUT_FILE}" \
-vn -sn \
-map_metadata${MAP_METADATA} \
-loglevel "${LOG_LEVEL}" \
${AVCONV_OPTIONS} \
${OUTPUT_OPTIONS} \
${ENCODING_OPTIONS} \
"${OUTPUT_TEMP_FILE}"; then
test "${QUIET}" != 'True' && echo "Failed."
test -e "${OUTPUT_TEMP_FILE}" && command rm "${OUTPUT_TEMP_FILE}"

return 1
else
test "${QUIET}" != 'True' && echo "Done."

# Test if fix for MP3 VBR is needed.
# See: http://ffmpeg.zeranoe.com/forum/viewtopic.php?f=7&t=377
if [ "${OUTPUT_FORMAT}" = 'mp3' -a "${ENCODING_MODE}" != 'CBR' ]; then
# Output file is MP3 and VBR. Apply header fix.
if [ "${VERBOSE}" = 'True' ]; then
command vbrfix "${OUTPUT_TEMP_FILE}" "${OUTPUT_FILE}"
else
command vbrfix "${OUTPUT_TEMP_FILE}" "${OUTPUT_FILE}"
fi
else
# Nothing to do but rename the file.
command mv "${OUTPUT_TEMP_FILE}" "${OUTPUT_FILE}"
fi

# Delete temporary file if it is still present.
test -e "${OUTPUT_TEMP_FILE}" && command rm "${OUTPUT_TEMP_FILE}"

# Fetch cover art from input file.
transfert_images "${INPUT_FILE}" "${OUTPUT_FILE}"
fi

我的问题是,当使用 Ubuntu 13.10 Saucy Salamander 上可用的 avconv 版本将 flac 转换为 ogg 时,元数据不会保留,尽管有此选项(将全局元数据从输入 flac 文件复制到输出 ogg 文件的所有音频流) :

--map_metadata:s:a 0:g

你们中有人知道在转换时将元数据从 flac 输入文件复制到 ogg 输出文件的正确 --map_metadata 选项吗?

ps: 附加问题:如何防止 avconv 生成的 CBR mp3 文件具有 VBR header ?

pps:我知道诸如 beets 之类的工具,但我还没有看到可以执行此任务的专门命令行工具。

最佳答案

在这里找到修复:

https://bugs.kde.org/show_bug.cgi?id=306895

好的 --map_metadata 选项是:

  • 对于 ogg 到任何:--map_metadata 0:s:0
  • 对于除 ogg 以外的任何 ogg :--map_metadata:s:a 0:s:0

注意--map_metadata选项在输出ogg和输入ogg时是一样的。

对于 CBR mp3 文件,此处提供了修复:http://ffmpeg.zeranoe.com/forum/viewtopic.php?f=7&t=37 (输出到管道)有效。 avconv 将日志信息输出到 &2。 &1 是免费的数据。编辑:此修复程序仅适用于 CBR mp3,它破坏了需要直接输出到文件的 VBR mp3。

我已经将更改集成到 mussync-tools 1.2.0:

https://github.com/biapy/howto.biapy.com/blob/master/various/mussync-tools

关于bash - avconv : flac to ogg conversion with metadata kept,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21489719/

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