Sprawnie działający przykład konwertujący plik mp4 do mp3.

0

Cześć:)

Zacznę od wywodu wstępnego ;) Tak, wiem miałem ruszyć dupsko z programowaniem i wieloma projektami, ale znów źle dziele sobie wolny czas i nie umiem przestawić się na ślęczenie jak kiedyś nad Delphi i mniej PHP a także nadal nie umiem być uzależniony od chęci bawienia się jednak lepiej poznanym Delphi 7 - niż nowszymi środowiskami. Może kolejna pomoc od Was zmotywuje mnie by ruszyć jeden od dawna już zaplanowany projekt który ułatwił by pewne sprawy niewidomym Znajomym a go Im obiecałem. Także do rzeczy :)

Chciałem poprosić Was o jakiś sprawnie działający przykład kodu z kompletem plików za równo bibliotek jak i unitów albo opis co i jak, by dokonać konwersji będącego na dysku pliku mp4 do pliku mp3 gdzie zachowujemy bitrate źródłowy i inne parametry a najszybciej jak się da uzyskujemy z pliku filmowego same audio. A nie chcę kombinować tak jakby na około z uruchamianiem ffmpeg.exe w konsoli komponentem typu TDosCommand.

Tylko tak prosto jak się da, pobrać czas pliku mp4 i jak konwersja chwile trwa, pokazać postęp w procentach. Bo takowe będzie najprostsze ale wiem ze są w sieci kontrolki w zestawie. Ostatnio kombinowałem na szybko jakąś dłuższą chwilę z tym co znalazłem ale dllki wyszukiwałem ręcznie i nie udało się mi z użyciem libavutil. Może coś jest stricte do ffmpeg podobne a może coś innego co się sprawdzi tak jak FFMPEG konsolowy, a będzie niezawodne.

Tak, idę nieco na łatwiznę prosząc o gotowca. Nieco kiedyś ambitnej ślęczałem nad tematem, ale na szybko grzebiąc z paczką przykładów i plikami libavutil - nie udało się mi wiele wskórać. Jeśli się nie uda z Waszą pomocą to może będę musiał "polecieć po najniższej linii" oporu i się posiłkować konsolą z narzędziami w plikach zewnętrznych, ale mało to eleganckie. A szukałem w sieci jednak być może i źle. Także nadal stoję w punkcie wyjścia. Nie mając pożądanych konkretów.

Z góry dziękuję za wszelkie przykłady kodów i cenne wskazówki jak podejść poprawnie do tematu.

2

ffmpeg.exe to frontend dla składowych bibliotek: libavcodec, libavfilter, libavformat itp.
Źródła wszystkiego są dostępne.
Z pewnością dałoby się wykorzystać te biblioteki w Delphi i przeprowadzić operację taką, jaką robi ffmpeg.exe z konkretnymi parametrami.

mp4 do pliku mp3 gdzie zachowujemy bitrate źródłowy i inne parametry

Nie ma wielkiego sensu „zachowywanie bitrate” bo mp4 to kontener mogący przechowywać dźwięk w dowolnym formacie (choć zwykle jest to AAC) a mp3 to goły strumień MPEG-1 Layer 3. Bitrate jednego nie jest równoważny bitrate'owi drugiego: MP3 potrzebuje większego bitrate od AAC dla zachowania tej samej jakości (która i tak będzie trochę niższa przez sam fakt rekodowania strumienia).

2

Weź sobie źródła ffmpeg, przetłumacz na pascala i już masz

[edit]
Niektórzy nie rozumieją, uściślam. Nie trzeba tłumaczyć na Delphi całego ffmpeg i wszystkich dll. Warto jednak zajrzeć w źródła exeka ffmoeg, bo to gotowy przykład jak skorzystać z ich api (ffmpeg.exe woła funkcje z dll), inaczej nawet mając nagłówki w Delphi nie będzie to oczywiste.

0

Hej. Nie mam takowej wiedzy o C/C++ i na to czasu. Chyba jednak pokątne wywoływanie ffmpeg.exe będzie najprostsze. Niestety tylko część przykładów w Pascalu działa, ale nie działa konwersja, którą ciężko jest ogarnąć. Wykrywa np. 2 strumienie. Jeśli miałbym czas i wiedza na przetłumaczenie być może sprawnie działających kodów z innych języków gdzie będą niuanse składni itp na których polegnę nie pytał bym o to, ponieważ wiem że wielu tutaj z masterów Delphi ;) klepało dla siebie czy pisało porządnie nie jedno i myślałem że też takowy temat rozpracowywali skutecznie, to pozostało im w zapiskach. Ale jeśli coś może ktoś znajdzie jeszcze to się zechce podzielić :)

1

Jeśli dobrze zrozumiałem to chcesz wyciągnąć z mp4 tylko audio?
Ja robię to tak
ffmpeg -i film.mp4 -vn audio.mp3

0

O tego nie znałem, dzięki sprawdzę, bo pewnie szybsze niż konwersja pliku. Nadal jednak pozostaje kwestia jak to zrobić bardziej elegancko poprzez biblioteki jakieś a nie wywoływanie ffmpeg.exe bo na razie na takiej metodzie się chyba niestety muszę skupić.

2

Jeżeli juz chcesz się bawić w ffmpeg to zrób to po ludzku a nie wywołaniem polecenia z linii komend.
Masz nagłówki bibliotek w Delphi a w przykładach z tego co widzę demuxing więc o ile się nie mylę to powinno zrobić rozłożenie pliku na video i audio tylko czy to obsługuje MP4 i daje możliwość zapisu audio w MP3 to już sprawdź sam.
https://github.com/DelphiForBroadcasting/ffmpeg-delphi

0

Hej.

Faktycznie ten przykład działa i po zmianie może by nie dekodował czy tam wydobywał też czystego video co wydłuża proces. Ale właśnie słowo "RAW" jest tutaj kluczowego bo do tego co wydobyte jest z pliku jest odtwarzalne wedle podawanej komendy przykładowej poprzez ffplay. I z przykładowej mp4ki zajmującej 96 MB same audio ma 251 MB. Mi zależało by raczej znaleźć taki przykład albo z Waszą pomocą przerobić istniejące aby wykonywało się bez użycia ffmpeg.exe to samo co dokonać można poleceniem, które podał mi tu powyżej pelsta.

0
olesio napisał(a):

Hej. Nie mam takowej wiedzy o C/C++ i na to czasu. Chyba jednak pokątne wywoływanie ffmpeg.exe będzie najprostsze. Niestety tylko część przykładów w Pascalu działa, ale nie działa konwersja, którą ciężko jest ogarnąć. Wykrywa np. 2 strumienie. Jeśli miałbym czas i wiedza na przetłumaczenie być może sprawnie działających kodów z innych języków gdzie będą niuanse składni itp na których polegnę nie pytał bym o to, ponieważ wiem że wielu tutaj z masterów Delphi ;) klepało dla siebie czy pisało porządnie nie jedno i myślałem że też takowy temat rozpracowywali skutecznie, to pozostało im w zapiskach. Ale jeśli coś może ktoś znajdzie jeszcze to się zechce podzielić :)

No ale jak nie masz czasu, to nie ma drogi na skróty, musisz sobie to napisać, skoro nikt tego nie zrobił w Delphi jak dotąd. A jak masz naprawdę mało czasu i duże ciśnienie, to zleć to komuś. To nie są takie trywialne tematy, że od ręki i jest. Łatwiej ci będzie parsować output ffmpega, takie jest moje zdanie. Na moje oko z 80% wypaśnych konwerterów/edytorów wideo i audio tak działa, że wywołuje pod spodem ffmpeg.exe i w ten sposób konwertuje formaty, przekierowując progress z konsoli do swojego gui. To nie jest trudne (ok, przyznaję sie że nie wiem, w Delphi może jednak trudne, ale chyba nie aż tak bardzo)

P.S. co to za gadanie "oo tego nie znałem"? Wystarczy poczytać np to: https://linux.die.net/man/1/ffmpeg (windows - analogicznie) i masz opis parametrów ffmpeg, jakie przyjmuje. A teraz to wygląda na to, że chcesz przyjść na gotowca, a sam nie zadajesz sobie minimum trudu, czyli robisz to, za co moderacja tu gani użytkowników.

3

tutaj możesz pobrać przetłumaczone nagłówki wraz z przykładami: http://www.delphiffmpeg.com/headers/
a tutaj potrzebne biblioteki: http://www.delphiffmpeg.com/downloads/

1

Tu jest w miarę fajny tutorial do ffmpega jakby ktoś chciał, http://dranger.com/ffmpeg/

1

Hej.

Nie ma to jak się przebudzić w nocy stwierdzić że nie chce się spać i przysiąść nad problemem raz jeszcze. Kajam się, za lenistwo moje i to na serio :) Teraz mam działający FFMPEG pod Delphi 7. Na szybko skompilowałem przykłady i będę je analizował. Ale może nim dojdę co jest nie tak scalając działający z ubogim kodem i wklejając to czego jest więcej w drugim może mi podpowiecie dlaczego przykładowy projekt w ścieżce Demos\SimplePlayer elegancko mi wszystkie pliki z dysku odtwarza i to wraz z dźwiękiem.

Natomiast mający zawarte więcej opcji i na nie wyciszonych ani nie ściszonych ustawieniach projekt w Demos\Player odtwarza mi elegancko pliki ale zarówno filmowe jak i mp3 nie emitują dźwięku, gdzie w skromniejszym przykładzie emitują. Pobrałem to wszystko w paczce nazwanej dokładnie FFVCL_Lite.v7.1a_DCU-Encoder-Player a dorzuciłem skądś już pobrany LIBAV z bibliotekami w większości w wersji 5.8 i jedynie avutil tam wnioskując z nazwy jest w wersji 5.6.

Ale takich plików oczekuje owe przykładowe DEMO. I teraz super. Bo odpowiednio popatrzeć co mi potrzebne. Być może to popakować UPX i posprawdzać z czasem i mamy zgrabny Player czy to lokalnie czy do plików online do wielu celów, pod odtwarzanie czy docelowo jakiś prosty konwerter lub odczyt meta danych, czyli to wszystko na co pozwala FFMPEG w tym pakiecie lite. A nie trzeba do jakichś celów zapodawać całą opasłą kobyłę VLC :)

Z góry dzięki za sugestie. Może ktoś miał podobne objawy. Ja muszę, jak wspominałem nauczyć się dzielić czas wolny pomiędzy nową pasję i stare niekorzystne dla wagi i zdrowia wielogodzinne czy nawet wielodniowe ślęczenie przy projektach. Fakt, wtedy mogłem na tym Forum odciążać FP ale cóż najwyżej On zajada to co ja sobie zgubiłem, a obrotniej sobie radzi w wyszukiwaniu przykładów i troll mu nie zarzuci lenistwa chyba ;P

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.