Połącz audio i obraz -> Wyjście jako wideo za pomocą FFmpeg

8

Mam 1 obraz (jpg) i 1 plik audio (MP3) i chciałbym wydrukować to jako plik wideo (na przykład AVI).

Czy ktoś wie, jak użyć FFMPEG, aby dołączyć do tych dwóch? Chciałbym pokazać obraz na czas trwania dźwięku.

Jakieś pomysły?

użytkownik41559
źródło
Których OS używasz
subanki

Odpowiedzi:

6

Jeśli korzystasz z systemu Windows, możesz to zrobić również w programie Windows Movie Maker ... jeśli potrzebujesz instrukcji, zostaw komentarz

W przypadku FFmpeg użyj tego

ffmpeg -loop_input -vframes 14490 -i imagine.jpg -i audio.mp3 -y -r 30 
    -b 2500k -acodec ac3 -ab 384k -vcodec mpeg4 result.mp4
  • vframes 14490 to liczba ramek, które należy zapętlić, aby uzyskać ciągły obraz dla całego pliku audio.mp3

    Np .: przez 8 minut i 3 sekundy ((8m x 60s + 3s) x 30 fps = 14490 vf)

Zasoby stąd

subanki
źródło
Cześć Subanki - dziękuję za komentarz !! Nie rozumiem tego jednak ... Potrzebuję wyprowadzić plik wideo z audio i obrazu. Jak to działa?
user41559,
@nayrsllew Właśnie dowiedziałem się, że kod nie działa, przepraszam .. Cóż, podstawową rzeczą jest konwersja go do wideo za pomocą ffmpeg -f image2 -i image% d.jpg video.mpg, a następnie dołącz do wideo i audio
subanki
zaktualizowałem moją odpowiedź, było ciężko, ale moja 1-godzinna wyszukiwarka go znalazła, cieszę się :)
subanki
Odpowiedź jest prawidłowa, dlaczego w dół-głosowanie :(
subanki
Cześć Cant, możesz mi pomóc tutaj. Powstały film jest za duży. Potrzebuję wideo tego samego rozmiaru pliku mp3. Mój plik obrazu jest bardzo mały. Muszę też przesłać ten film na YouTube.
Parminder
7

Jest o wiele prostszy sposób niż sugerowany tutaj, który nie wymaga obliczania liczby ramek ani wprowadzania długości poszczególnych plików (szczególnie lepiej w przypadku przetwarzania wsadowego). W najnowszej wersji ffmpeg możesz użyć -shortestopcji, która przestaje kodować, gdy kończy się najkrótszy strumień - w tym przypadku input.mp3 (ponieważ obraz zapętla się na zawsze, ma nieskończoną długość):

ffmpeg -i input.mp3 -f image2 -loop 1 -r 2 -i input.jpg \
-shortest -c:a copy -c:v libx264 -crf 23 -preset veryfast output.mp4

Używa 2 klatek na sekundę dla obrazu / wideo, co powinno być w porządku, ale możesz ustawić bardziej standardową 25, jeśli chcesz.

zła
źródło
5

subanki prawie miały rację. Działający wiersz poleceń wygląda następująco;

ffmpeg -y -loop 1 -i image.jpg -i audio.mp3 -r 30 -b:v 2500k -vframes 14490 -acodec libvo_aacenc -ab 160k result.mp4
-y

zastępuj pliki wyjściowe bez monitowania

pętla 1

Opcja „-loop_input” jest przestarzała, należy użyć opcji -loop 1. Zobacz dokumentację ffmpeg .

-ja

pliki wejściowe

-r

Klatki na sekundę
Można również wyrazić jako: -r 30000/1001, co daje fps 29,97nnn

-b: v

szybkość transmisji wideo; im wyższa liczba, tym lepsza jakość i większy rozmiar pliku.

Ramki

Jak wyjaśniono powyżej; weź całkowity czas pliku audio w sekundach (np. 00:02:41 (2 minuty 41 sekund) to 161 całkowitych sekund (2 x 60) + 41). Następnie pomnóż całkowitą liczbę sekund przez liczbę klatek na sekundę określoną przez -r (np. 161 x 30 = 4830).

-vframe można zastąpić przez -t 161 (-t czas trwania zapisu lub transkodowania „czas trwania” sekund audio / wideo)

-acodec

Użyj właściwego kodeka audio dla typu tworzonego pliku. W przypadku .mp4 powinien to być format AAC. Kodek libvo_aacenc był poprawnym kodekiem dla mojego systemu Windows 7.

-ab

szybkość transmisji dźwięku

wynik.mp4

To jest nazwa pliku wyjściowego. Może to być dowolna legalna nazwa pliku dla twojego systemu. Rozszerzenie pomoże ffmpeg określić właściwy kodek wideo, jeśli nie określisz go za pomocą -vcodec.

Jon Hall
źródło
1

Ten prosty skrypt bash / cygwin, który AUTOMATYCZNIE koduje wszystkie pliki z rozszerzeniem $ AUDIO w katalogu do pliku wideo MP4 10FPS w katalogu z osadzonym obrazem folder.jpg,

przydatne do przesyłania na YouTube;)

AUDIO=m4a; 
$'\n'; for a in `ls -1 *.$AUDIO `; do ffmpeg -i $a &2> $a.info ; done;
cat '' > do.sh
IFS=$'\n'; 
for a in `ls -1 *.$AUDIO`; do D=`grep Duration $a.info | cut -d',' -f1 | cut -d' ' -f4 | cut -d'.' -f1 | head -n1 `; S=$(( $( echo $D | cut -d':' -f2 ) * 60 + 1 + ` echo $D | cut -d':' -f3  ` )) ; echo ffmpeg -loop_input -vframes $(( $S * 10 )) -i folder.jpg -i \"$a\" -y  -r 10 -b 2500k -ab 384k -vcodec mpeg4 \"$a.mp4\" >> do.sh;  done;
split -l5 do.sh
xa* &
użytkownik113368
źródło
0

Pobierz VirtualDub , a następnie wykonaj następujące czynności:

  1. Otwórz obraz tak, jakbyś otworzył normalny plik wideo.

  2. Obliczyć czas trwania dźwięku w sekundach i zaokrąglić w górę do najbliższej pełnej sekundy (np. 78,34 sek. To 79 sekund). Od tej chwili ta wartość nosi nazwę x.

  3. Przejdź do „wideo> liczba klatek na sekundę” wybierz „zmień na liczbę klatek na sekundę (fps)” i wpisz „1 / x” jako wartość. Dodatkowo, jeśli chcesz mieć normalną liczbę klatek na sekundę w wynikowym pliku, np. 25 fps, wybierz „Konwertuj na fps” i wprowadź tam żądaną liczbę klatek na sekundę.

  4. Wybierz „wideo> kompresja” i wybierz swój ulubiony smak. Może być konieczne dostosowanie rozmiaru obrazu za pomocą filtra zmiany rozmiaru.

  5. Przejdź do „audio> audio z innego pliku” i tam wybierz swój dźwięk. W razie potrzeby wybierz kompresję dźwięku.

  6. Zapisz plik.

Źródło: stephanV

Grumpy ol 'Bear
źródło
Dzięki StephanV .. Muszę użyć FFMpeg, ale to dobra sugestia .. dzięki
user41559