Ahoi zusammen.
Die Ausgangslage ist folgende:
Ich habe mir eine Extension für Chrome-ähnliche Browser gebastelt.
Ziel ist es, von einer beliebigen Video/Audio Seite eine mp3 zu erzeugen.
Das funktioniert mit
NativeMessagingHosts.
Mein Host ist ein Python-Script, welches
youtube.dl einbindet und darüber die videos/audios ergattert.
In Chrome/Chromium/Opera funktioniert der Spaß auch wie er sollte, in Vivaldi nicht ganz.
Hier mal der Host:
#!/usr/bin/env python
from __future__ import unicode_literals
import youtube_dl
import struct
import sys
import threading
# Thread that reads messages from the webapp.
def read_thread_func(queue):
message_number = 0
while 1:
# Read the message length (first 4 bytes).
text_length_bytes = sys.stdin.read(4)
if len(text_length_bytes) == 0:
sys.exit(0)
# Unpack message length as 4 byte integer.
text_length = struct.unpack('i', text_length_bytes.encode('utf-8'))[0]
# Read the text (JSON object) of the message.
text = sys.stdin.read(text_length)
# start download function
ytdl()
def logit(msg):
f = open('logfile', 'a')
f.write(msg+"\n")
f.close()
def ytdl():
url = "https://www.youtube.com/watch?v=B7bqAsxee4I"
# Logger Class to know what happens
class MyLogger(object):
def debug(self, msg):
logit("[debug]"+msg)
def warning(self, msg):
logit("[warning]"+msg)
def error(self, msg):
logit("[error]"+msg)
# youtube-dl parameter
path = "/home/user/Downloads/"
ydl_opts = {
'format': 'bestaudio',
'noplaylist' : True,
'outtmpl': path+'%(title)s.%(ext)s',
'verbose': True,
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
'progress_hooks': [my_hook],
'logger': MyLogger(),
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([url])
def Main():
read_thread_func(None)
sys.exit(0)
if __name__ == '__main__':
Main()
Videos werden geladen, aber er hängt sich auf, wenn es ans Extrahieren von Audio geht:
[download] 100% of 873.61KiB in 00:00
[debug][ffmpeg] Correcting container in "/home/user/Downloads/videotitle.m4a"
[debug][debug] ffmpeg command line: ffmpeg -y -i 'file:/home/user/Downloads/videotitle.m4a' -c copy -f mp4 'file:/home/user/Downloads/videotitle.m4a'
[error]ERROR: Did you mean file:file:/home/user/Downloads/videotitle.m4a?
[error]Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 1942, in post_process
files_to_delete, info = pp.run(info)
File "/usr/lib/python3.6/site-packages/youtube_dl/postprocessor/ffmpeg.py", line 530, in run
self.run_ffmpeg(filename, temp_filename, options)
File "/usr/lib/python3.6/site-packages/youtube_dl/postprocessor/ffmpeg.py", line 208, in run_ffmpeg
self.run_ffmpeg_multiple_files([path], out_path, opts)
File "/usr/lib/python3.6/site-packages/youtube_dl/postprocessor/ffmpeg.py", line 204, in run_ffmpeg_multiple_files
raise FFmpegPostProcessorError(msg)
youtube_dl.postprocessor.ffmpeg.FFmpegPostProcessorError: Did you mean file:file:/home/user/Downloads/videotitle.m4a?
Ich vermute, das hängt damit zusammen, dass irgendwo ein zweites "file:" in die Befehlszeile rutscht, was in den anderen Browsern nicht passiert.
Nun ist die Frage, warum.
Das Vivaldi-Forum scheint wenig Interesse daran zu haben und die youtube-dl community hat mein Issue geschlossen ohne groß drauf einzugehen.
Findet sich hier jemand, der sich mit der Materie auskennt?
Hat Vivaldi besondere Umgebungsvariablen, die dafür verantwortlich sind?
Ich weiß nicht so recht, wo ich anfangen soll zu suchen.