gpt4 book ai didi

function - ffmpeg - 如何分别处理视频和音频 URL 的流?

转载 作者:行者123 更新时间:2023-12-04 23:18:13 27 4
gpt4 key购买 nike

我正在尝试创建一个 zsh使用 youtube-dl 的函数和 ffmpeg下载 YouTube 视频的一部分。我确实通过以下功能实现了这个目标:

# $1 - youtube URL
# $2 - start position in hh:mm:ss.msms format (ms=miliseconds)
# $3 - final position in hh:mm:ss.msms format (ms=miliseconds)
# $4 - output file name (optional)
function youtubedl_snippet()(
local url_stream=$(youtube-dl -f best --get-url $1)
local output_name=$(youtube-dl --get-title $1)

ffmpeg -ss $2 -to $3 -i $url_stream -c:v copy -c:a copy ${4:-"$output_name.mp4"}
)
命令 youtube-dl -f best --get-url $1返回具有最佳质量的单个 URL。为了更好地理解 ffmpeg工作,我试图创建另一个具有相同目标但采用不同方法的函数:
# $1 - youtube URL
# $2 - start position in hh:mm:ss.msms format (ms=miliseconds)
# $3 - final position in hh:mm:ss.msms format (ms=miliseconds)
# $4 - output file name (optional)
# $5 - output video codec type (optional, for instance: libx264)
# $6 - output audio codec type (optional, for instance: aac)
function youtubedl_snippet2()(
local url_streams=$(youtube-dl --get-url $1)
local output_name=$(youtube-dl --get-title $1)

local url_array=(${(f)url_streams}) # expand urls by lines url_array[1] -> video stream url_array[2] -> audio stream

ffmpeg -ss $2 -to $3 -i ${url_array[1]} -ss $2 -to $3 -i ${url_array[2]} -map 0:v -map 1:a -c:v ${5:-copy} -c:a ${6:-copy} ${4:-"$output_name.mp4"}
)
我想这是怎么回事:
  • url_streams是一个行分隔的 URL。 url_array[1]是视频 URL 和 url_array[2]是音频 URL。
  • 我将音频和视频设置为相同的间隔。
  • 我将第一个流映射到视频,第二个映射到音频
  • 如果 $5$6不给出不同的编解码器,ffmpeg只需从原始来源复制。

  • 好吧,似乎一切都很好。但是当我尝试
    start=$SECONDS; youtubedl_snippet2 'https://www.youtube.com/watch?v=g-_hVXzkn0o' 00:00:05.00 00:00:15.00; echo "it takes $(( SECONDS - start )) seconds"
    这将需要 368 秒。此外,我无法在我的 android 中打开它(仅音频有效)
    enter image description here
    另一方面,
    start=$SECONDS; youtubedl_snippet 'https://www.youtube.com/watch?v=g-_hVXzkn0o' 00:00:05.00 00:00:15.00; echo "it takes $(( SECONDS - start )) seconds"
    只需 40 秒,视频可以在 Android 上播放。
    Hereyoutubedl_snippet日志文件。和 hereyoutubedl_snippet2日志文件。

    最佳答案

    第一个视频是 720P,第二个是 4K。这就是为什么复制后者需要更长的时间。
    至于为什么“无法播放视频。不支持视频编解码器”。如果你看日志,4K 视频是用 VP9 编码的。虽然 MP4 可以携带 VP9 流,但它不是标准的,Android 播放器要么不支持 MP4 中的 VP9,要么不附带 VP9 解码器。尝试将第二个输出文件名更改为 $output_name.mkv看看 Android 播放器是否可以处理 matroska-vp9 组合。否则,您需要探索不同的 YouTube 视频流选项并选择以 h264 编码的最高分辨率。

    关于function - ffmpeg - 如何分别处理视频和音频 URL 的流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72221704/

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