我想将视频中的音频放到另一个没有音频的视频中(在一个命令中):
ffmpeg.exe -i video1_noAudio.mov -i video2_wAudio.mov -vcodec copy -acodec copy video1_audioFromVideo2.mov
Run Code Online (Sandbox Code Playgroud)
我猜"-map"是正确的方法,但我对此感到困惑.
你能建议如何解决吗?
我试图使用Gorilla工具包的mux包来路由Go Web服务器中的URL.利用这个问题为导向,我有以下Go代码:
func main() {
r := mux.NewRouter()
r.Handle("/", http.FileServer(http.Dir("./static/")))
r.HandleFunc("/search/{searchTerm}", Search)
r.HandleFunc("/load/{dataId}", Load)
http.Handle("/", r)
http.ListenAndServe(":8100", nil)
}
Run Code Online (Sandbox Code Playgroud)
目录结构是:
...
main.go
static\
| index.html
| js\
| <js files>
| css\
| <css files>
Run Code Online (Sandbox Code Playgroud)
Javascript和CSS文件的引用方式index.html如下:
...
<link rel="stylesheet" href="css/redmond/jquery-ui.min.css"/>
<script src="js/jquery.min.js"></script>
...
Run Code Online (Sandbox Code Playgroud)
当我http://localhost:8100在我的Web浏览器中访问index.html内容成功传递时,所有js和cssURL都返回404.
如何让程序从static子目录中提供文件?
我可以GET使用mux访问参数:
import (
"github.com/gorilla/mux"
)
func main(){
rtr := mux.NewRouter()
rtr.HandleFunc("/logon", logonGet).Methods("GET")
}
func logonGet(w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
login := params["login"]
}
Run Code Online (Sandbox Code Playgroud)
但无法弄清楚如何访问 POST params
func main(){
rtr := mux.NewRouter()
rtr.HandleFunc("/logon", logonPost).Methods("POST")
}
func logonPost(w http.ResponseWriter, r *http.Request) {
// how to get POST parameters from request
}
Run Code Online (Sandbox Code Playgroud) 我想知道我是否应该创建一个新的ServeMux并将其注册到http.Server或者我应该调用http.HandleFunc和http.Handler直接?
我认为使用ServeMux的路由更好,因为http.HandleFunc显然会混淆HTTP包的全局状态,这在Go中被认为是不好的做法.然而,在许多教程中,即使是官方教程,我经常看到http.HandleFunc正在使用的路线.
这让我很奇怪:为什么一个人http.HandleFunc在有人的时候会使用ServeMux?我知道ServeMux有一些优点(例如你可以嵌套它而不必一直重复前缀)但我想知道为什么我应该选择http.HandleFunc多路复用器,特别是因为内部HandleFunc使用ServeMux.
编辑:正如评论中所承诺的那样,我已经要求在Golang-dev上弃用额外的(和无用的IMO函数),他们说没有(好吧,有人说没有).链接在这里.
我一直在用gorilla/mux我的路由需求.但我注意到一个问题,当我嵌套多个Subrouters时,它不起作用.
这是一个例子:
func main() {
r := mux.NewRouter().StrictSlash(true)
api := r.Path("/api").Subrouter()
u := api.Path("/user").Subrouter()
u.Methods("GET").HandleFunc(UserHandler)
http.ListenAndServe(":8080", r)
}
Run Code Online (Sandbox Code Playgroud)
我想使用这种方法,所以我可以委托将路由器填充到其他包中 user.Populate(api)
然而,这似乎不起作用.它只在我在链中使用单个Subrouter时才有效.
有任何想法吗?
我只是不能让这个NotFoundHandler工作.我想在每个get请求上提供一个静态文件,只要它存在,否则请提供index.html.这是我目前简化的路由器:
func fooHandler() http.Handler {
fn := func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Foo"))
}
return http.HandlerFunc(fn)
}
func notFound(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "public/index.html")
}
func main() {
router = mux.NewRouter()
fs := http.FileServer(http.Dir("public"))
router.Handle("/foo", fooHandler())
router.PathPrefix("/").Handler(fs)
router.NotFoundHandler = http.HandlerFunc(notFound)
http.ListenAndServe(":3000", router)
}
Run Code Online (Sandbox Code Playgroud)
/ foo工作正常
/ file-that-exists工作正常
/ file-that-doesnt-exist 不起作用 - 我找不到404页面而不是index.html
那么我在这里做错了什么?
我有一个表,其中表的每一行包含状态(寄存器).有逻辑选择一个特定的行.只有一行接收"选定"信号.然后访问该选定行的状态.状态的一部分作为输出连接到模块的IO,或者IO的一部分用作输入以更新状态.
如果我用电路实现这个,我会使用传递门.所选信号将导通一组传输门,这将把行的寄存器连接到总线.然后总线将连接到IO捆绑包.这是快速,小面积和低能量.
在Chisel中有一种直接的实现方法.它将所选行编码为二进制数,然后将该数字应用于传统多路复用器的选择输入.不幸的是,对于具有20到50行的表以及数百位的状态,这种实现可能非常慢,并且在面积和能量上浪费.
这个问题有两个部分:1)有没有办法在Chisel中指定总线,这样你就有传输门或传统的三态驱动器都挂在总线上?
2)如果不这样做,Chisel中有一个快速,小面积,低能量的方式吗?
谢谢
我是Go的新手,我现在用它构建一个简单的API:
package main
import (
"encoding/json"
"fmt"
"github.com/gorilla/mux"
"github.com/gorilla/handlers"
"log"
"net/http"
)
func main() {
port := ":3000"
var router = mux.NewRouter()
router.HandleFunc("/m/{msg}", handleMessage).Methods("GET")
router.HandleFunc("/n/{num}", handleNumber).Methods("GET")
headersOk := handlers.AllowedHeaders([]string{"Authorization"})
originsOk := handlers.AllowedOrigins([]string{"*"})
methodsOk := handlers.AllowedMethods([]string{"GET", "POST", "OPTIONS"})
fmt.Printf("Server is running at http://localhost%s\n", port)
log.Fatal(http.ListenAndServe(port, handlers.CORS(originsOk, headersOk, methodsOk)(router)))
}
func handleMessage(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
message := vars["msg"]
response := map[string]string{"message": message}
w.Header().Set("Content-Type", "application/json") // this
json.NewEncoder(w).Encode(response)
}
func handleNumber(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
number …Run Code Online (Sandbox Code Playgroud) 我一直在研究Go项目,其中使用gorilla/mux作为路由器.
我需要能够拥有与路由关联的查询值,但这些值应该是可选的.这意味着我想要捕获两者/articles/123并/articles/123?key=456在同一个处理程序中.
为了做到这一点,我尝试使用r.Queries接受键/值对的方法:路由器.
Path("/articles/{id:[0-9]+}").Queries("key", "{[0-9]*?}")
Run Code Online (Sandbox Code Playgroud)
但这只使value(456)可选,但不是key.因此,无论/articles/123?key=456和/articles/123?key=是有效的,但不是/articles/123.
编辑:另一个要求是,在注册路由后,我想以编程方式构建它们,r.Queries即使文档特别指出它是可能的,我似乎无法弄清楚如何使用(https://github.com/gorilla/mux #registered-urls).
@jmaloney回答有效,但不允许从名称构建URL.
我在GAE中使用gorilla mux时遇到了一些问题.
当我尝试它时,我'找不到404页'.不调用rootHandler函数(不生成任何跟踪)
以下是我的代码的一部分,任何想法?
提前
...
func init() {
r := mux.NewRouter()
r.HandleFunc("/",rootHandler)
}
func rootHandler(w http.ResponseWriter, r *http.Request) {
var functionName = "rootHandler"
c := appengine.NewContext(r)
c.Infof(functionName+"-start")
defer c.Infof(functionName+"-end")
...
Run Code Online (Sandbox Code Playgroud)