Bialka / cokolwiek

0 stars 0 forks source link

Konwersja nie mp3 na mp3 #46

Closed Cosiek closed 3 years ago

Cosiek commented 3 years ago

Może się zdarzyć, że w katalogu zamiast plików mp3 mamy jakieś inne - flac, wav, ogg - jest dużo możliwości. Będziemy chcieli je przekonwertować na pliki mp3. O ile pewnie moglibyśmy pisać własny konwerter w pythonie, to trwało by to pewnie potwornie długo. Dlatego skorzystamy z gotowego programu który potrafi to zrobić - ffmpeg

Jest pewna szansa, że masz już ffmpeg zainstalowane. Spróbuj w terminalu wpisać ffmpeg -version - jeśli terminal powie że nie ma takiego programu, to trzeba go doinstalować.

Możesz to zrobić wykonując dwa polecenia:

sudo apt update
sudo apt install ffmpeg

Potem można przejść do kodzenia.

Wpisujemy nasz kod tam gdzie w kodzie jest odpowiedni komentarz - po usunięciu duplikatów plików. Trzeba przelecieć przez wszystkie katalogi w processing_dir, znaleźć pliki muzyczne nnie będące mp3-ójkami i je przekonwertować.

Konwertować będziemy przez taką funkcję:

subprocess.call(["ffmpeg", "-i", input_path, "-vn", "-ar", 44100, "-ac", 2, "-b:a", 142000, output_path],
                            stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE)

gdzie input_path to ścieżka do pliku muzycznego nie będącego mp3-ką, output_path to ścieżka do pliku mp3 który powstanie w wyniku konwersji

Po udanym przekonwertowaniu, trzeba będzie jeszcze usunąć oryginalny plik muzyczny.

Cosiek commented 3 years ago

Wypchąłem branch z testami i zrobiłem pull requesta.

Dokończ przenoszenie plików z "Do obróbki" do "Weryfikacja" na swoim branczu, a jak już będziesz gotowa zająć się konwersją, to przejdź na ten branch (git checkout master, git pull, git checkout konwersja_do_mp3).

Pierwszą kwestią jest to, że w danych testowych masz tylko pliki mp3. Dlatego zacznij pracę na tym branchu od wykonania skryptu:

python adjust_test_data.py

Jeżeli ffmpeg masz poprawnie zainstalowane, ten skrypt przekonwertowuje pliki z "tests/TestData/Do Obróbki/1917FYC/1917 (FYC)" na pliki flac i usunie oryginały. Oprócz tego, utworzy duplikat pliku z "How to Train Your Dragon - The Hidden World".

Testy zakładają, że w ogarniacz_mp3 będzie funkcja convert_to_mp3, która jako argument przyjmuje ścieżkę do katalogu "Do Obróbki". trzeba będzie taką funkcję napisać.

Bialka commented 3 years ago

Nie wychodzi druga część adjust_test_data.py - wywala się w tym miejscu:

Coś poszło nie tak przy konwersji na flac pliku: /home/katrzyna/Documents/cokolwiek/tests/TestData/Do Obróbki/How to Train Your Dragon - The Hidden World/01. Raiders Return to Busy, Busy Berk.mp3
Cosiek commented 3 years ago

Obstawiam, że nie masz pliku 01. Raiders Return to Busy, Busy Berk.mp3, ale to zgadywanie. Spróbuj zmienić kod w taki sposób:

def convert_to_flac(file_path):
    # get names and dirs
    dir_path = path.dirname(file_path)
    file_name = path.basename(file_path)
    new_file_name = file_name.replace(".mp3", ".flac")
    new_file_path = path.join(dir_path, new_file_name)
    # conversion
    proc = subprocess.run(["ffmpeg", "-i", file_path, "-b:a", "320000", new_file_path],
                          stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    if proc.returncode != 0:
        print(f"Coś poszło nie tak przy konwersji na flac pliku: {file_path}")
        print(str(proc.stderr))  # <<<<<<<<<<<<<<<<<<<<<<<<<<< TO WYPRINTUJE BŁĄD
        sys.exit(1)

if __name__ == "__main__":
    check_ffmpeg()
    # convert 1917 to flac
    _1917_dir = path.join(_current_dir, "tests/TestData/Do Obróbki/1917FYC/1917 (FYC)")
    for file_name in ("01. Meadow , First Trench.mp3", "02. Trench to Yorks.mp3"):
        file_path = path.join(_1917_dir, file_name)
        #convert_to_flac(file_path)  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Wykomentuj
        #os.remove(file_path)          <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Wykomentuj

    # create duplicate for How to train your dragon
    httyd_path = path.join(_current_dir, "tests/TestData/Do Obróbki/How to Train Your Dragon - The Hidden World",
                           "01. Raiders Return to Busy, Busy Berk.mp3")
    convert_to_flac(httyd_path)

    print("Zrobione")
Bialka commented 3 years ago

Plik jest, sprawdzałam. Błąd printuje taki:

b"ffmpeg version 4.2.4-1ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers\n  built with gcc 9 (Ubuntu 
9.3.0-10ubuntu2)\n  configuration: --prefix=/usr --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu 
--incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-
filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-
libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-
libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-
libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy 
--enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis 
--enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-
libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-
libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared\n  libavutil      
56. 31.100 / 56. 31.100\n  libavcodec     58. 54.100 / 58. 54.100\n  libavformat    58. 29.100 / 58. 29.100\n  libavdevice    58.  
57. 8.100 / 58.  8.100\n  libavfilter     7. 57.100 /  7. 57.100\n  libavresample   4.  0.  0 /  4.  0.  0\n  libswscale      5.  5.100 /  5.  
58. 5.100\n  libswresample   3.  5.100 /  3.  5.100\n  libpostproc    55.  5.100 / 55.  5.100\nInput #0, mp3, from '/home/katrzyna
59. /Documents/cokolwiek/tests/TestData/Do Obr\xc3\xb3bki/How to Train Your Dragon - The Hidden World/01. Raiders Return 
60. to Busy, Busy Berk.mp3':\n  Metadata:\n    title           : Raiders Return to Busy, Busy Berk\n    album           : How to Train Your 
61. Dragon: The Hidden World (Original Motion Picture Soundtrack)\n    publisher       : Back Lot Music\n    genre           : Score\n    
62. TrackTotal      : 18\n    track           : 01\n    disc            : 1\n    artist          : John Powell\n    AlbumArtist     : John Powell\n    
63. date            : 2019\n  Duration: 00:05:26.56, start: 0.025057, bitrate: 320 kb/s\n    Stream #0:0: Audio: mp3, 44100 Hz, stereo, 
64. fltp, 320 kb/s\n    Metadata:\n      encoder         : LAME3.98r\nFile '/home/katrzyna/Documents/cokolwiek/tests/TestData/Do 
65. Obr\xc3\xb3bki/How to Train Your Dragon - The Hidden World/01. Raiders Return to Busy, Busy Berk.flac' already exists. 
66. Overwrite ? [y/N] Not overwriting - exiting\n"
67. 
Cosiek commented 3 years ago

Tu jest napisane (ostatnie dwie linijki), że już masz flac - dlatego ffmpeg nie chce go nadpisywać. Usuń plik flac (nie wiem skąd go masz, więc pewniej będzie usunąć) i odpal skrypt od nowa.

Bialka commented 3 years ago

Okej, teraz wszystko wyszło. Wydaje mi się, że ten plik flac utworzyliśmy wtedy na działce.