Tworzenie wideo z dźwiękiem i nieruchomym obrazem na YouTube


23

Korzystam z następującego polecenia:

ffmpeg -i audio.mp3 -ar 44100 -f image2 -i logo.jpg -r 15 -b 1800 -s 640x480 foo.mov

Które z powodzeniem wyświetla wideo z moim nagranym dźwiękiem i obrazem na nim.

Podczas próby przesłania tego do YouTube nie można przetworzyć, niezależnie od formatów, które próbuję: .mov, .avi, .flv, .mp4

Czy w powyższym opisie brakuje jakiegoś ustawienia, które wygenerowałoby format akceptowany przez Youtube? Próbowałem przejrzeć dokumentację ffmpeg, ale jestem nad głową.

Zrobiłem eksperyment, umieszczając 2-sekundowe wideo z 30-sekundowym plikiem mp3. Po przesłaniu do youtube powstały film miał tylko 2 sekundy. Może być tak, że YouTube patrzy tylko na ścieżkę wideo na długość, a ponieważ zdjęcie ma tylko ramkę lub cokolwiek innego, być może to go rozwala.

Odpowiedzi:


13

Oto, co zadziałało:

ffmpeg -i audio.mp3 -f image2 -loop 1 -i logo.jpg 
-r 15 -s 640x480 \
-c:v libx264 -crf 18 -tune stillimage -preset medium \
-shortest foo.mov

W szczególności loopopcja, która powieli obraz jako klatki. Będzie również potrzebowała shortestopcji, aby plik nie rosł i nie powiększał się (w ten sposób przycina go do długości najkrótszego strumienia - tutaj plik audio).

Ta ropcja zmienia częstotliwość klatek i crf 18ustawia jakość (użyj tutaj wyższej wartości, aby uzyskać niższą jakość wideo). Aby uzyskać więcej informacji, zobacz tutaj: FFmpeg: najlepsze narzędzie do manipulacji audio i wideo


2
Nie działa dla mnie Dostaję jeden film.
Pavel Vlasov

Teraz pracuję dla mnie.
molnarg

4

Fragment kodu, który działa dla mnie z innego forum:

ffmpeg -loop 1 -r ntsc -i image.jpg -i song.mp3 -c:a copy -c:v libx264 -preset fast -threads 0 -shortest output.mkv 

2

Wziąłem kod Pavla, który również dla mnie działał, i skróciłem go, przycinając niepotrzebne opcje:

ffmpeg -loop 1 -shortest -i <audio file> -i <image file> <output video file>

jest to ogólna forma, która działa z dowolnym plikiem obrazu i audio jako wejściem i tworzy plik wideo jako wyjście.

To powiedziawszy, ponieważ ponieważ strumień wideo będzie składał się z jednego obrazu powtarzanego w nieskończoność, możesz ustawić niską liczbę klatek na sekundę (czyli liczbę obrazów, która pojawia się w ciągu sekundy) za pomocą -r. Należy pamiętać, że nie wszystkie pojemniki wyjściowe umożliwiają niskie liczby klatek na sekundę. Jednym z nich jest avi, więc możesz zrobić:

ffmpeg -loop 1 -shortest -r 0.1 -i <audio file> -i <image file> output.avi

spowoduje to utworzenie pliku wideo z częstotliwością klatek 0,1 (tj. jeden obraz co 10 sekund) zamiast domyślnej 25. Wpłynie to na rozmiar pliku, ale nie na jakość wideo. W końcu możesz ustawić bitrate audio, aby uzyskać lepszą jakość dźwięku -ab. Oto polecenie, którego faktycznie używam do tworzenia tego rodzaju filmów na youtube:

ffmpeg -loop 1 -shortest -r 0.1 -i <audio file> -i <image file> -ab 128k output.avi

Dzięki. Pobiegłem, ffmpeg -loop 1 -shortest -r 0.1 -i audio.mp3 -i image.jpg output.aviale dostałem „Nie znaleziono pętli opcji”. Jakieś pomysły?
Pułkownik Panika

@col Jeśli nadal jesteś zainteresowany: potrzebujesz opcji pętli przed wejściem obrazu, a nie przed dźwiękiem.
slhck

to działało dla mnie:ffmpeg -i <audio file> -loop 1 -i <image file> -shortest <output video file>
Karolinger

2

z avconv:

avconv -i input.mp3 -loop 1 -f image2 -i logo.png -r 30 -s 640x480 -ab 128k -ar 44100 -ac 1 -ss 00:00:00.000 -t 01:02:03.123 foo.ogv

Witamy w SuperUser i dziękuję za odpowiedź. Więcej szczegółów na temat tego, co proponujesz i dlaczego byłby pomocny.
Brad Patton,

1
odpowiedź wynika z faktu, że ffmpeg jest przestarzałe
ZiTAL

2
Nie trwa projekt ffmpeg. Był spór, który doprowadził do przestarzałej wiadomości. Zobacz stackoverflow.com/questions/9477115/…
Brad Patton

2
Użyj -shortestopcji wyjściowych zamiast ręcznie deklarować czasy (użyj też ffmpegzamiast, avconvjeśli to możliwe).
llogan 22.04.16

2
Popełnił skrypt bash w przypadku gdy ktoś jest zainteresowany
Dallaylaen

0

Mam to do pracy po wielu eksperymentach: https://www.youtube.com/watch?v=qjlDT819Q3s

  1. Konwertuj obrazy na wideo zgodnie z https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images :

    ffmpeg -framerate 1/20 -i png/img-%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" png.mp4

    Tutaj używam kilku zdjęć i zmieniam je co 20s.

  2. Połącz wystarczającą liczbę kopii powyższego filmu, aby objąć czas trwania twojego dźwięku zgodnie z https://trac.ffmpeg.org/wiki/Concatenate . Inne rozwiązania, takie jak oczekiwanie, że ffmpeg -i wav.wav -i png.mp4 youtube.mp4zrobią coś dobrego, ostatecznie zostały odrzucone przez YouTube (również gracze tacy jak VLC są zdezorientowani i nie mogą właściwie szukać). Domyślam się, że pozycje czasowe muszą być korygowane w kopiach, co ffmpegnie jest możliwe, chyba że zostaną połączone:

    ffmpeg -f concat -i pngs.txt -c copy pngs.mp4

    (gdzie plik pngs.txtjest ręcznie robiony, aby zawierał tyle kopii, ile potrzeba: kopie = długość audio / długość wideo)

  3. Miksuj swoje audio z wideo uzyskanym w 2 zgodnie z https://www.virag.si/2015/06/encoding-videos-for-youtube-with-ffmpeg/ :

    ffmpeg -i pngs.mp4 -i wav.wav -shortest -codec:v libx264 -crf 21 -bf 2 -flags +cgop -pix_fmt yuv420p -codec:a aac -strict -2 -b:a 384k -r:a 48000 -movflags faststart youtube.mp4

Teraz plik youtube.mp4powinien zostać zaakceptowany przez YT.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.