ffmpeg设置多个headers参数

使用ffmpeg的过程中发现,有些音视频链接需要携带特定的headers参数才能访问,比如B站,否则会报错Error opening input files: Server returned 403 Forbidden (access denied)
只需要指定一个headers的时候还好办,直接-headers后面加参数就好。可是有时候需要指定多个,要怎么写呢?寻找解决方法的过程中也踩了一些坑,这里记录一下。

在命令行终端运行

参考:【ffmpeg】ffmpeg如何设置header信息亲测
试了网上的各种方法连接headers各参数,都不行,后来才发现因为用的终端是Windows PowerShell,换成Git Bash这种支持Linux命令的就可以了。
解决方法:多个参数用$'\r\n'连接。
示例:

ffmpeg -headers "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36"$'\r\n'"Referer: https://www.bilibili.com/video/BV1gG41117jr/" -i "https://xy61x147x214x12xy.mcdn.bilivideo.cn:4483/upgcxcode/37/64/1370336437/1370336437-1-30216.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1703229953&gen=playurlv2&os=mcdn&oi=975668002&trid=00000e260b88ef4b4dc5a48bb148bd04c8c3u&mid=0&platform=pc&upsig=485579f34c1f346d149e22f05052ff62&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&mcdnid=2003587&bvc=vod&nettype=0&orderid=0,3&buvid=&build=0&f=u_0_0&agrr=0&bw=5626&logo=A0000002" -c copy test.m4a

在代码中使用

在代码中运行ffmpeg时,上面的方法又失效了,可以把多个参数之间的连接改成\r\n试看看。

Tips

上面示例中的源链接和headers,可以通过you-get或者yt-dlp获取(个人觉得yt-dlp速度比you-get快),B站的视频源链接获取后过一段时间会失效,所以每次使用都需要实时获取。
you-get:

import subprocess
import json
url = 'https://www.bilibili.com/video/BV1UN411V7qk/'
cmd = 'you-get --json ' + url
json_obj = json.loads(subprocess.check_output(cmd, shell=True))
print(json_obj)

yt-dlp:

import yt_dlp
ydl = yt_dlp.YoutubeDL()
url = 'https://www.bilibili.com/video/BV1UN411V7qk/'
video_info = ydl.extract_info(url, download=False)
pprint(video_info['formats'])

当然,如果只是需要下载视频到本地,这两个工具直接可以一行命令完成,不需要ffmpeg。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用ffmpeg设置h264参数时,可以通过调用x264_param_apply_profile函数来设置profile。\[1\]另外,如果你在Ubuntu 16.04上安装了libx264库,可以使用以下命令来安装libx264的库:sudo apt install libx264-148和sudo apt install libx264-dev。\[2\] 在设置x264参数时,你可以使用AVCodecContext结构体来设置编码器参数。首先,你需要找到对应的编码器,然后创建编码器上下文。接下来,你可以准备编码器参数,并使用avcodec_open2函数来设置编码器参数。\[2\] 如果你想设置preset参数,可以在准备编码器参数设置。\[2\] 如果你想设置profile参数,可以使用AVDictionary结构体来设置。你可以创建一个AVDictionary对象,并使用av_dict_set函数来设置profile参数的值。然后,将该AVDictionary对象作为第三个参数传递给avcodec_open2函数。\[2\]\[3\] 总结起来,你可以使用x264_param_apply_profile函数来设置profile参数,使用AVCodecContext结构体来设置编码器参数,使用AVDictionary结构体来设置preset和profile参数。 #### 引用[.reference_title] - *1* *2* [【FFmpeg设置H264参数](https://blog.csdn.net/u010168781/article/details/107497953)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [ffmpeg 编码h264设置参数](https://blog.csdn.net/qq_32642107/article/details/109668619)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值