Closed Cosiek closed 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ć.
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
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")
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.
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.
Okej, teraz wszystko wyszło. Wydaje mi się, że ten plik flac utworzyliśmy wtedy na działce.
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:
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ę:
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.