Używam ffmpeg, aby dodać plik JPG do MP4, aby utworzyć MP4.
Ponieważ jest tylko jeden obraz do zrobienia filmu, zastanawiam się, czy istnieje sposób na zmniejszenie jego rozmiaru?
Komenda:
$ ffmpeg -loop 1 -i image.jpg -i audio.mp3 -shortest -c:a copy output.mp4
Wyniki:
image.jpg
= 26,7 K (obraz nie jest tak wyraźny)audio.mp3
= 64,6 mln (54 minut)output.mp4
= 80,6 mln (wynik wideo nie jest tak wyraźny, muzyka nadal dobra)
Czy jest to rozsądny rozmiar dla MP4?
Odpowiedzi:
Do przesłania do YouTube
H.264: najmniejsze pliki
Ta metoda wykorzystuje libx264 do kodowania wideo H.264. Jest wolniejszy niż poniższa metoda kopiowania strumieniowego, ale potencjalnie może wygenerować mniejszy rozmiar pliku.
Kopiowanie strumieniowe: najszybszy proces
Ta metoda po prostu przesyła strumieniowo kopie (bez kodowania) obrazu do kontenera MKV. Jest super szybki, ale jeśli rozmiar jest ważny, to powyższa metoda może spowodować utworzenie mniejszego pliku.
YouTube akceptuje prawie wszystko, więc te polecenia wykorzystują kilka sztuczek, aby przyspieszyć kodowanie lub zmniejszyć rozmiar pliku i utrzymać wysoką jakość, ponieważ YouTube ponownie zakoduje wszystko, co mu dasz. Twojemu odtwarzaczowi prawdopodobnie się to nie spodoba, ale YouTubeowi się spodoba.
W tych przykładach zastosowano bardzo niską liczbę klatek na sekundę, która powinna przetwarzać się szybciej niż domyślnie 25 fps.
Największa kompatybilność z każdym odtwarzaczem
Powinno to działać na prawie wszystkim oprócz bardzo starych urządzeń (zmień
-profile:v main
na,-profile:v baseline
jeśli tak jest).Jeśli wejście audio AAC jest już wtedy zmienić
-c:a aac
aby-c:a copy
uniknąć niepotrzebnego ponownego kodowania.Czas kodowania będzie dłuższy, a rozmiar pliku większy niż powyższe polecenia YouTube.
Aby uzyskać więcej informacji, zobacz FFmpeg Wiki: H.264 .
źródło
Unrecognized option 'preset'. Error splitting the argument list: Option not found
ffmpeg
polecenie i pełne dane wyjściowe konsoli z polecenia, a następnie podaj link w komentarzu.Jedynie informacje, które podałeś, są tym, co mogę wymyślić.
Chodźmy na kawałki:
Mówisz o klatkach na sekundę (fps), a nie bitrate. I masz rację w koncepcji. Beign tylko jedno zdjęcie 1 fps nie byłoby problemem.
W tym przypadku rozmiar obrazu nie miałby znaczącej wagi, ponieważ mamy do czynienia tylko z jednym zdjęciem. Jeśli był to film wysokiej jakości, to jest inny problem.
Rozdzielczość, o której mówisz, to 1280x720.
Nie widzę sensu w
-loop 1
opcji tutaj, to tylko spowolni proces. Czy użyłeś,-shortest
ponieważ plik ma więcej niż 1 strumień wejściowy? Jeśli nie, to nie ma powodu, aby z niego korzystać. Ponieważ używałeś-acodec copy
, będę musiał założyć, że nie chcesz go ponownie kodować.W przypadku wyjścia 720p 1 kl./s bez ponownego kodowania i bez dotykania szybkości transmisji:
ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 output.mp4
Zaznacz przypadek, że ma więcej niż jeden strumień wejściowy i chcesz, aby ffmpeg zakończył kodowanie w najkrótszym strumieniu:
ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 -shortest output.mp4
Teraz, jeśli musisz zmienić bitrate (powiedzmy 1024k jako przykład);
ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -b:v 1024k -bufsize 1024k -s 1280x720 output.mp4
Zobacz: Ogranicz wyjściową przepływność
Pamiętaj, że jeśli nadal chcesz mieć mniejszy rozmiar wideo, będziesz musiał poświęcić jakość, aby to osiągnąć. Inne sposoby na to polegają na ponownym kodowaniu z kompresją stratną.
Z tego, co mówisz, informacje, które podajesz i co próbujesz zrobić, wydaje mi się, że Twoim celem jest osadzenie okładki albumu w formacie mp3. Jeśli taki jest twój cel, lepiej spełni twoje wymagania:
ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3
Jeśli nic nie odpowiada Twoim żądaniom, podaj więcej informacji.
źródło
-framerate
jako opcji wprowadzania i usunięciem danych wyjściowych-r
: w przeciwnym razie zostanie użyta domyślna liczba klatek na sekundę wynosząca 25, a następnieffmpeg
zostaną odrzucone klatki w celu osiągnięcia-r 1
. Jeśli tylko zadeklarujesz wejściową liczbę klatek na sekundę, wówczas dane wyjściowe będą używać tej samej częstotliwości klatek.