FFMPEG e libav-tools conflito de pacotes OpenSuse [RESOLVIDO]

1. FFMPEG e libav-tools conflito de pacotes OpenSuse [RESOLVIDO]

Tiago de Jesus
tiago4171

(usa Arch Linux)

Enviado em 28/03/2017 - 12:58h

Olá jovens.
Tô no OpenSuse 42.2 e estou tentando fazer rodar o Spotify Downloader by Ritiek
https://github.com/Ritiek/Spotify-Downloader
Deu uma trabalheira maldita pra fazer o Spotify Downloader reconhecer que o beatifulsoap4 estava instalado, agora é a vez do libav-tools

Eu instalei já tinha instalado o FFMPEG pelo Pakcman e ativei o repostiório do "home:Simmphonie"
https://software.opensuse.org/package/libav-tools?search_term=libav-tools
Para então instalar o libav-tools.
Mas ele conflita com o FFMPEG, ou seja. Ou eu instalo o FFMPEG ou o LIBAV-TOOLS
O libav-tools é necessário para que o spotify downloader faça a conversão de .m4a para .mp3, mas mesmo instalando somente libav-tools ele não converte nada.
[ACHISMO MODE ON]
Eu ACHO que pode ele precisa dos dois para funcionar, até porque no meu Notebook com Lubuntu 16.04 eu testei o mesmo e está funcionando
[ACHISMO MODE OFF]

O que é estranho é que isso ocorre eu outras distros também como Fedora e Gentoo.

Alguns Prints, demonstrando o erro
http://imgur.com/vzKspxi
http://imgur.com/GW7GZpy
http://imgur.com/aAqQ73W


  


2. MELHOR RESPOSTA

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 06/04/2017 - 15:19h

Abre o código fonte e troca toda ocorrência de "avconv" por "ffmpeg". Depois disso o código vai funcionar de boa com o ffmpeg.
--
Dino®
Vi veri universum vivus vici
Public GPG signature: 0x246A590B
Só Slackware é GNU/Linux e Patrick Volkerding é o seu Profeta
Mensagem do dia: Satã representa conhecimento sem limites e não auto-ilusão hipócrita. 


3. Re: FFMPEG e libav-tools conflito de pacotes OpenSuse [RESOLVIDO]

Ulrich Beckmann
Bequimao.de

(usa openSUSE)

Enviado em 28/03/2017 - 14:03h

Porquê você não instalou o pacote spotify-installer diretamente do packman?


4. Re: FFMPEG e libav-tools conflito de pacotes OpenSuse

Tiago de Jesus
tiago4171

(usa Arch Linux)

Enviado em 28/03/2017 - 15:15h

Bequimao.de escreveu:

Porquê você não instalou o pacote spotify-installer diretamente do packman?


>>README.md
"Spotify-Downloader

Download songs from YouTube in an MP3 format by using Spotify's HTTP link.

Can also download a song by entering its artist and song name (in case if you don't have the Spotify's HTTP link for some song).

Downloading a song using a Spotify link will automatically fix meta-tags and add a nice albumart to the song."

https://github.com/Ritiek/Spotify-Downloader/blob/master/README.md


5. Re: FFMPEG e libav-tools conflito de pacotes OpenSuse [RESOLVIDO]

Tiago de Jesus
tiago4171

(usa Arch Linux)

Enviado em 03/04/2017 - 20:43h

Consegui fazer ele funcionar compilando o libav manualmente. Eu deixei todo o log do processo no meu Blog privado, não sei se posso divulgar os dados porque acredito que tenha dados sensíveis.

Eu quero colocar como eu fiz isso lá no github do projeto para ajudar a documentar isso.
O único problema que enfrentei foi ter que criar links simbólicos manualmente de /usr/local/bin/avconv para /usr/bin/avconv.
Será que foi por causa do local da onde eu compilei? ou foi porque eu fiz uma compilação local?

O ponto é, está funcionando perfeitamente mas gostaria de documentar.
Obrigado


6. Re: FFMPEG e libav-tools conflito de pacotes OpenSuse [RESOLVIDO]

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 03/04/2017 - 21:57h

Vc pode documentar no github seu, ou ainda, vc pode publicar como Artigo ou Dica aqui.
libav e FFMPEG conflitam mesmo... em muitos pacotes e muitas distros.
em Sabayon, Gentoo, dá para instalar os dois, geralmente e ainda controlar as dependências.
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: Sabayon, Gentoo, openSUSE, Mageia e OpenMandriva.


7. Re: FFMPEG e libav-tools conflito de pacotes OpenSuse [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 04/04/2017 - 14:49h

tiago4171 escreveu:

Consegui fazer ele funcionar compilando o libav manualmente. Eu deixei todo o log do processo no meu Blog privado, não sei se posso divulgar os dados porque acredito que tenha dados sensíveis.

Eu quero colocar como eu fiz isso lá no github do projeto para ajudar a documentar isso.
O único problema que enfrentei foi ter que criar links simbólicos manualmente de /usr/local/bin/avconv para /usr/bin/avconv.
Será que foi por causa do local da onde eu compilei? ou foi porque eu fiz uma compilação local?

O ponto é, está funcionando perfeitamente mas gostaria de documentar.
Obrigado


Cara, para ter o lixo do libav e o tesouro do ffmpeg na mesma máquina (nem dá pra ver qual é minha preferência, né?) é preciso fazer desse jeito aí que você fez, porque como fork do segundo, a porcaria do libav normalmente sobrescreve os arquivos do ffmpeg, e por isso as distros marcam esses dois pacotes como conflitantes. Mas vem a minha pergunta: por que você quer ter os dois ao mesmo tempo? O ffmpeg faz tudo que o libav faz, faz ainda mais coisa que ele e ainda por cima tem mais correção de bugs e atualizações que o libav.

--
Dino®
Vi veri universum vivus vici
Public GPG signature: 0x246A590B
Só Slackware é GNU/Linux e Patrick Volkerding é o seu Profeta
Mensagem do dia: Satã representa conhecimento sem limites e não auto-ilusão hipócrita. 



8. Re: FFMPEG e libav-tools conflito de pacotes OpenSuse [RESOLVIDO]

Tiago de Jesus
tiago4171

(usa Arch Linux)

Enviado em 04/04/2017 - 19:37h

lcavalheiro escreveu:

Cara, para ter o lixo do libav e o tesouro do ffmpeg na mesma máquina (nem dá pra ver qual é minha preferência, né?) é preciso fazer desse jeito aí que você fez, porque como fork do segundo, a porcaria do libav normalmente sobrescreve os arquivos do ffmpeg, e por isso as distros marcam esses dois pacotes como conflitantes. Mas vem a minha pergunta: por que você quer ter os dois ao mesmo tempo? O ffmpeg faz tudo que o libav faz, faz ainda mais coisa que ele e ainda por cima tem mais correção de bugs e atualizações que o libav.

--
Dino®
Vi veri universum vivus vici
Public GPG signature: 0x246A590B
Só Slackware é GNU/Linux e Patrick Volkerding é o seu Profeta
Mensagem do dia: Satã representa conhecimento sem limites e não auto-ilusão hipócrita. 


Opa lcavalheiro, bom demais?
Bom o programa é o que eu citei ele pega o link do Spotify e procura no Youtube, faz uma loucura com algumas bibliotecas de Python e baixa as tags e o "cover" da música. E no final mistura tudo num .mp3 prontinho.
Porque a mula do developer resolveu fazer isso usando o libav eu não sei, até porque faço conversões do Youtube para mp3(e outros formatos) com [*****] + FFMPEG numa boa.

Daí tu me fala que é uma P*ta duma viadagem, eu até concordo mas que facilita pra caramba facilita. As vezes nem preciso de ter o link do spotify é só saber o nome da música e o proprio script baixa para mim. O que seria do mundo sem automatizações? hehehe
Como não entendo nada de python, não sei se conseguiria fazer um patch para o script usar o ffpmeg instead libav.

Espero que me entendam, mas mesmo assim vou tentar dar um help ao developer do software e tentar descobrir porque cacetes ele tá usando o libav.
Thank You...

PS.: NUNCA "BULE" NA ASSINATURA DO lcavalheiro


9. Re: FFMPEG e libav-tools conflito de pacotes OpenSuse [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 04/04/2017 - 23:37h

Procura no script uma linha que contenha o comando avconv e posta ela aqui pra gente analisar.
--
Dino®
Vi veri universum vivus vici
Public GPG signature: 0x246A590B
Só Slackware é GNU/Linux e Patrick Volkerding é o seu Profeta
Mensagem do dia: Satã representa conhecimento sem limites e não auto-ilusão hipócrita. 



10. Re: FFMPEG e libav-tools conflito de pacotes OpenSuse [RESOLVIDO]

Tiago de Jesus
tiago4171

(usa Arch Linux)

Enviado em 05/04/2017 - 01:00h

lcavalheiro escreveu:

Procura no script uma linha que contenha o comando avconv e posta ela aqui pra gente analisar.
--
Dino®
Vi veri universum vivus vici
Public GPG signature: 0x246A590B
Só Slackware é GNU/Linux e Patrick Volkerding é o seu Profeta
Mensagem do dia: Satã representa conhecimento sem limites e não auto-ilusão hipócrita. 



Eu até queria que fosse tão simples. Mas tive que criar links simbólicos para mais coisas do que o avconv
Vou tentar citar todas aqui:
Segue abaixo os links simbólicos criados:

ln -s /usr/local/bin/avconv /usr/bin/avconv

ln -s /usr/local/lib/libavfilter.so.7 /usr/lib/libavfilter.so.7

ln -s /usr/local/lib/libavformat.so.58 /usr/lib/libavformat.so.58

ln -s /usr/local/lib/libavcodec.so.58 /usr/lib/libavcodec.so.58

ln -s /usr/local/lib/libavresample.so.4 /usr/lib/libavresample.so.4

ln -s /usr/local/lib/libswscale.so.5 /usr/lib/libswscale.so.5

ln -s /usr/local/lib/libavutil.so.56 /usr/lib/libavutil.so.56
# Lembrando que linkei para /usr/lib E /usr/lib64 só pra desencargo de consciência


E aqui o código fonte da parada:

............
Para os preguiçosos que não gostam de clicar(Brinks), tá aqui o código(O mesmo do link acima)

#!/usr/bin/env python

from bs4 import BeautifulSoup
import spotipy
import eyed3
import requests
import pafy
import shutil
import os
import sys
import argparse
#import spotipy.util as util

os.chdir(sys.path[0])

if not os.path.exists("Music"):
os.makedirs("Music")
open('list.txt', 'a').close()

spotify = spotipy.Spotify()

parser = argparse.ArgumentParser()
parser.add_argument("-n", "--no-convert", help="skip the conversion process and meta-tags", action="store_true")
parser.add_argument("-m", "--manual", help="choose the song to download manually", action="store_true")
args = parser.parse_args()

if args.no_convert:
print("-n, --no-convert skip the conversion process and meta-tags")
if args.manual:
print("-m, --manual choose the song to download manually")

def searchYT(number):
items = (requests.request(method='GET', url=URL)).text
items_parse = BeautifulSoup(items, "html.parser")
check = 1
if args.manual:
links = []
if isSpotify():
print((content['artists'][0]['name'] + ' - ' + content['name']).encode('utf-8'))
print('')
for x in items_parse.find_all('h3', {'class':'yt-lockup-title'}):
if not x.find('channel') == -1 or not x.find('googleads') == -1:
print((str(check) + '. ' + x.get_text()).encode('utf-8'))
links.append(x.find('a')['href'])
check += 1
print('')
while True:
try:
the_chosen_one = int(raw_input('>> Choose your number: '))
if the_chosen_one >= 1 and the_chosen_one <= len(links):
break
else:
print('Choose a valid number!')
except KeyboardInterrupt:
graceQuit()
except:
print('Choose a valid number!')
print('')
first_result = links[the_chosen_one-1]
else:
first_result = items_parse.find_all(attrs={'class':'yt-uix-tile-link'})[0]['href']
while not first_result.find('channel') == -1 or not first_result.find('googleads') == -1:
first_result = items_parse.find_all(attrs={'class':'yt-uix-tile-link'})[check]['href']
check += 1
del check
full_link = "youtube.com" + first_result
global video
video = pafy.new(full_link)
global raw_title
raw_title = (video.title).encode("utf-8")
global title
title = ((video.title).replace("\\", "_").replace("/", "_").replace(":", "_").replace("*", "_").replace("?", "_").replace('"', "_").replace("<", "_").replace(">", "_").replace("|", "_").replace(" ", "_")).encode('utf-8')
if not number == None:
print(str(number) + '. ' + (video.title).encode("utf-8"))
else:
print(video.title).encode("utf-8")

def checkExists(islist):
if os.path.exists("Music/" + title + ".m4a.temp"):
os.remove("Music/" + title + ".m4a.temp")
global extension
if args.no_convert:
extension = '.m4a'
else:
if os.path.exists("Music/" + title + ".m4a"):
os.remove("Music/" + title + ".m4a")
extension = '.mp3'
if os.path.isfile("Music/" + title + extension):
if extension == '.mp3':
audiofile = eyed3.load("Music/" + title + extension)
if isSpotify() and not audiofile.tag.title == content['name']:
os.remove("Music/" + title + extension)
return False
if islist:
return True
else:
prompt = raw_input('Song with same name has already been downloaded. Re-download? (y/n/play): ')
if prompt == "y":
os.remove("Music/" + title + extension)
return False
elif prompt == "play":
if not os.name == 'nt':
os.system('mplayer "' + 'Music/' + title + extension + '"')
else:
print('Playing ' + title + extension)
os.system('start ' + 'Music/' + title + extension)
return True
else:
return True

def getLyrics():
if not title == '':
if song == '':
link = 'https://duckduckgo.com/html/?q=' + raw_title.replace(' ', '+') + '+musixmatch'
else:
link = 'https://duckduckgo.com/html/?q=' + (content['artists'][0]['name'] + ' - ' + content['name']).replace(' ', '+') + '+musixmatch'
page = requests.request(method='GET', url=link).text
soup = BeautifulSoup(page, 'html.parser')
link = soup.find('a', {'class':'result__url'})['href']
page = requests.request(method='GET', url=link).text
soup = BeautifulSoup(page, 'html.parser')
for x in soup.find_all('p', {'class':'mxm-lyrics__content'}):
print(x.get_text()).encode('utf-8')
else:
print('No log to read from..')

def fixSong():
print('Fixing meta-tags')
audiofile = eyed3.load("Music/" + title + '.mp3')
audiofile.tag.artist = content['artists'][0]['name']
audiofile.tag.album = content['album']['name']
audiofile.tag.title = content['name']
albumart = (requests.get(content['album']['images'][0]['url'], stream=True)).raw
with open('last_albumart.jpg', 'wb') as out_file:
shutil.copyfileobj(albumart, out_file)
albumart = open("last_albumart.jpg", "rb").read()
audiofile.tag.images.set(3,albumart,"image/jpeg")
audiofile.tag.save(version=(2,3,0))

def playSong():
if not title == '':
if not os.name == 'nt':
os.system('mplayer "' + 'Music/' + title + extension + '"')
else:
print('Playing ' + title + '.mp3')
os.system('start ' + 'Music/' + title + extension)

def convertSong():
print('Converting ' + title + '.m4a to mp3')
if not os.name == 'nt':
os.system('avconv -loglevel 0 -i "' + 'Music/' + title + '.m4a" -ab 192k "' + 'Music/' + title + '.mp3"')
else:
os.system('Scripts\\avconv.exe -loglevel 0 -i "' + 'Music/' + title + '.m4a" -ab 192k "' + 'Music/' + title + '.mp3"')
os.remove('Music/' + title + '.m4a')

def downloadSong():
a = video.getbestaudio(preftype="m4a")
a.download(filepath="Music/" + title + ".m4a")

def isSpotify():
if (len(raw_song) == 22 and raw_song.replace(" ", "%20") == raw_song) or (raw_song.find('spotify') > -1):
return True
else:
return False

def trimSong():
with open('list.txt', 'r') as fin:
data = fin.read().splitlines(True)
with open('list.txt', 'w') as fout:
fout.writelines(data[1:])

def trackPredict():
global URL
if isSpotify():
global content
content = spotify.track(raw_song)
song = (content['artists'][0]['name'] + ' - ' + content['name']).replace(" ", "%20").encode('utf-8')
URL = "https://www.youtube.com/results?sp=EgIQAQ%253D%253D&q=" + song
else:
song = raw_song.replace(" ", "%20")
URL = "https://www.youtube.com/results?sp=EgIQAQ%253D%253D&q=" + song
song = ''

def graceQuit():
print('')
print('')
print('Exitting..')
exit()

title = ''
song = ''

while True:
x = 0
y = 0
try:
for m in os.listdir('Music/'):
if m.endswith('.m4a.temp'):
os.remove('Music/' + m)
print('')
print('')
raw_song = raw_input('>> Enter a song/cmd: ').decode('utf-8').encode('utf-8')
print('')
if raw_song == 'exit':
exit()
elif raw_song == 'play':
playSong()

elif raw_song == 'lyrics':
getLyrics()

elif raw_song == 'list':
f = open('list.txt', 'r').read()
lines = f.splitlines()
for raw_song in lines:
if not len(raw_song) == 0:
x = x + 1
print('Total songs in list = ' + str(x) + ' songs')
for raw_song in lines:
try:
if not len(raw_song) == 0:
trackPredict()
print('')
y = y + 1
searchYT(number=y)
if not checkExists(islist=True):
downloadSong()
print('')
if not args.no_convert:
convertSong()
if isSpotify():
fixSong()
trimSong()
except KeyboardInterrupt:
graceQuit()
except:
lines.append(raw_song)
trimSong()
with open('list.txt', 'a') as myfile:
myfile.write(raw_song)
print('Failed to download song. Will retry after other songs.')
else:
try:
trackPredict()
searchYT(number=None)
if not checkExists(islist=False):
downloadSong()
print('')
if not args.no_convert:
convertSong()
if isSpotify():
fixSong()
except KeyboardInterrupt:
graceQuit()
except KeyboardInterrupt:
graceQuit()


PS.: NUNCA "BULE" NA ASSINATURA DO lcavalheiro


11. Re: FFMPEG e libav-tools conflito de pacotes OpenSuse [RESOLVIDO]

Tiago de Jesus
tiago4171

(usa Arch Linux)

Enviado em 08/04/2017 - 20:08h

lcavalheiro escreveu:

Abre o código fonte e troca toda ocorrência de "avconv" por "ffmpeg". Depois disso o código vai funcionar de boa com o ffmpeg.
--
Dino®
Vi veri universum vivus vici
Public GPG signature: 0x246A590B
Só Slackware é GNU/Linux e Patrick Volkerding é o seu Profeta
Mensagem do dia: Satã representa conhecimento sem limites e não auto-ilusão hipócrita. 


Concerteza irei "tentar" Luiz, mas vou ter que "perder" um bom tempo nas man pages dos dois. Mas acho que vai valer a pena


12. Re: FFMPEG e libav-tools conflito de pacotes OpenSuse [RESOLVIDO]

Tiago de Jesus
tiago4171

(usa Arch Linux)

Enviado em 18/05/2017 - 10:48h

Realmente o openSUSE não é um sistema muito adequado para mim, coisas simples como esta estão nos repos do Debian e ali tenho que compilar no braço e depois criar links simbólicos pra ver se vai funcionar.

O Yast é fantástico, mas pequenos detalhes para mim fazem a diferença.

Obg!!

RESUMO: Ao meu ver não compensa arrumar este problema






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts