Posted on June 28, 2020
更新:我在 reddit 上发了个贴,知道了这部电影是 Jacques Demy 导演的 Lola。我说的镜头是可以在这里看到。下面描述的有很多和事实对不上的地方。我搜索的方法也有一些问题。
大约是2014年看过一部电影,里面有一个男主角开车兜风的镜头,有一两分钟。
忘记了电影讲的是什么,忘记了男主角为什么要出去兜风,忘记了一个寻常的场景为什么要拍这么久。只记得其背景音乐是贝多芬某一交响曲。
心情低落的时候,这个耳朵虫就会爬出来。
尝试了一下寻找这个也许已经永远失去的记忆。
首先,我尝试了使用 Parsons code 在 musipedia 上找这到底是第几交响曲。输入了半天,总是错误的 Parsons code.
后来在 whosampled 确定了这是第七交响曲第二乐章。
把 250.took.nl 上所有电影在 imdb 上的 soundtrack 都爬下来,只有 Mr. Holland’s Opus 原声带中有贝多芬第七交响曲,我没看过这部电影。
把知名的意大利电影爬下来也没有找到。我看的可能是 Federico Fellini 导演的,或者是 Marcello Mastroianni 主演的一部电影。试了一下,没找到。
imdb 可以搜索 soundtrack,但是结果太多了。改天再爬。
更新:又有了两次失败的尝试。我的记忆里这是一部意大利电影,并且应该是一部好电影。我的记忆应该不会有错,应该是 imdb 的 soundtrack 列表不全。
我把 movieo 上1950年到1980年的电影意大利弄了下来,我把 5000best moives 弄了下来, 使用下面的程序爬取了 imdb 的 soundtrack,最终发现了 10 多部含有贝多芬第七交响曲的电影,都不符合我的记忆。
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
"strings"
"sync"
"github.com/avast/retry-go"
log "github.com/sirupsen/logrus"
"github.com/stavia/imdbsoundtracks/pkg/scraping"
)
const (
NUM_OF_WORKERS = 10
)
func main() {
items := getItems(os.Args[1])
c := make(chan string, len(items))
var wg sync.WaitGroup
wg.Add(NUM_OF_WORKERS)
for i := 0; i < NUM_OF_WORKERS; i++ {
go worker(i, c, &wg)
}
for _, item := range items {
c <- item
}
close(c)
wg.Wait()
}
func worker(i int, c chan string, wg *sync.WaitGroup) {
for {
if item, ok := <-c; ok {
retry.Do(
func() (err error) {
defer func() {
r := recover()
if r != nil {
err = fmt.Errorf("Panicked while processing %v: %v", item, r)
}
}()
process(item)
return
},
retry.OnRetry(func(n uint, err error) {
log.WithFields(log.Fields{
"n": n,
"err": err,
}).Warn("Retrying fetching data")
}),
)
} else {
break
}
}
wg.Done()
log.WithFields(log.Fields{
"i": i,
}).Info("Worker has done its job")
}
func getItems(path string) []string {
var bytes, err = ioutil.ReadFile(path)
check(err)
return strings.Split(string(bytes), "\n")
}
func process(item string) {
scraper := new(scraping.Service)
soundtracks := scraper.Soundtracks(item)
bytes, err := json.MarshalIndent(soundtracks, "", " ")
check(err)
log.WithField(
"result", string(bytes),
).Debug("Obtained soundtrack data from imdb")
err = ioutil.WriteFile(item+".json", bytes, 0644)
check(err)
}
func check(e error) {
if e != nil {
log.WithField(
"err", e,
).Panic("Checking for error")
}
}