Jak przekonwertować cały katalog / folder za pomocą ffmpeg za pomocą wiersza polecenia lub skryptu wsadowego?
ffmpeg
batch-processing
Eugene
źródło
źródło
i was unexpected at this time.
do name=`echo "${i%.*}"`;
będzie działać na nazwach plików z kropkami (i spacjami) w nich..bat
Windows?W systemach Linux i macOS można to zrobić w jednym wierszu, używając rozszerzenia parametrów do zmiany rozszerzenia nazwy pliku wyjściowego:
źródło
ffmpeg
nie można wejść i wyjść do tego samego pliku. 2) Nie jestem pewien, czy polecenia Bash działają w systemie Windows 10 natywnie. Może powinienem dodać do odpowiedzi, że jest on skierowany do systemów, które mogą natywnie używać Basha, takich jak Linux i macOS. lxs dostarczył odpowiedź Windows na to pytanie.for f in *.mkv; do ffmpeg -i "$f" -map 0 -movflags faststart -c:v libx264 -c:a copy -c:s copy "${f/x265/x264}"; done
A w systemie Windows:
źródło
FOR /F "tokens=*" %G IN ('dir /b *.mp3') DO ffmpeg -i "%G" -map_metadata -1 -c:v copy -c:a copy "%~nG .mp3"
Jednoliniowy skrypt bash byłby łatwy do zrobienia - zamień na
*.avi
swój typ pliku:źródło
-qscale
. Usuń go i użyj ustawień domyślnych lub użyj-crf
zamiast tego (domyślnie jest-crf 23
).basename
podpowłoka wsteczna nie jest cytowana. Właśnie dlatego bash ma zamiast tego rozszerzenie powłoki: dla i w * .avi; do ffmpeg -i "$ i" -qscale 0 "$ (basename" $ i ".avi)" mov; gotoweAby przekonwertować za pomocą podkatalogów użyj np
źródło
find -name "*.vtt" -exec ffmpeg -i {} {}.srt \;
find *.mp4 -exec ffmpeg -i {} {}.mp3 \;
find . -name *.ogg -or -name *.wma -exec ffmpeg -i {} {}.mp3 \;
find . -name *.wma -exec ffmpeg -i {} {}.mp3 \; -exec rm {} \;
Dla Windowsa:
Tutaj przekształcam wszystkie pliki (.mp4) w pliki (.mp3).
Po prostu otwórz cmd, przejdź do żądanego folderu i wpisz polecenie.
Skrót: (opcjonalnie)
1. Przejdź do folderu, w którym znajdują się pliki (.mp4)
2. Naciśnij Shift i kliknij lewym przyciskiem myszy i wybierz „Otwórz okno PowerShell tutaj”
lub „Otwórz okno wiersza polecenia tutaj”
3. Wpisz „cmd” [UWAGA : Pomiń ten krok, jeśli bezpośrednio otworzy cmd zamiast PowerShell]
4. Uruchom polecenie
Jeśli chcesz umieścić to w pliku wsadowym w systemie Windows 10, musisz użyć %% i.
źródło
Dla każdego, kto chce wsadowo przekonwertować cokolwiek za pomocą ffmpeg, ale chciałby mieć wygodny interfejs Windows, opracowałem ten interfejs:
https://sourceforge.net/projects/ffmpeg-batch
Dodaje do ffmpeg interfejs mody okna, paski postępu i informacje o pozostałym czasie, funkcje, których zawsze brakowało podczas korzystania z ffmpeg.
źródło
Jeśli masz GNU równolegle, możesz konwertować wszystkie pliki .avi poniżej
vid_dir
na mp4 równolegle, używając wszystkich oprócz jednego rdzenia procesora zAby przekonwertować z / do różnych formatów, zmień
'*.avi'
lub.mp4
w razie potrzeby. GNU równoległe jest wymienione w repozytoriach większości dystrybucji Linuksa w pakiecie, który jest zwykle nazywanyparallel
.źródło
!
na końcu jednego z linijek bash?Wiem, że to może być zbędne, ale używam tego skryptu do grupowej konwersji plików.
Aby uczynić go bardziej elastycznym, potrzeba 2 argumentów:
Tworzę dla niego alias, ale możesz go również użyć ręcznie w następujący sposób:
Spowodowałoby to konwersję wszystkich
mkv
plików namp4
pliki.Jak widać, jest to nieco bardziej wszechstronne. Tak długo, jak
ffmpeg
można go przekonwertować, można określić dowolne dwa rozszerzenia.źródło
Trochę przypomina kod golfa, ale ponieważ prawie wszystkie dotychczasowe odpowiedzi są bash (z wyjątkiem jednego samotnego cmd), oto polecenie systemu
Windows dlawielu platform, które używa PowerShell (ponieważ niesamowite):Możesz zmienić * .avi na cokolwiek, co pasuje do twojego materiału źródłowego.
źródło
Oczywiście pojawił się teraz PowerShell, specjalnie zaprojektowany, aby uczynić coś dokładnie tak niezwykle łatwym.
I tak, PowerShell jest również dostępny w innych systemach operacyjnych niż tylko Windows, ale jest fabrycznie zainstalowany w systemie Windows, więc powinien być przydatny dla wszystkich.
Najpierw będziesz chciał wymienić wszystkie pliki w bieżącym katalogu, więc zaczniemy od:
Możesz także użyć,
ls -Recurse
jeśli chcesz rekurencyjnie przekonwertować wszystkie pliki w podkatalogach.Następnie przefiltrujemy je do typu pliku, który chcemy przekonwertować - np. „Avi”.
Następnie przekażemy te informacje do FFmpeg za pośrednictwem
ForEach
.Do danych wejściowych FFmpeg użyjemy
FullName
- to jest cała ścieżka do pliku. I na wyjściu FFmpeg będziemy używaćName
- ale zastępując.avi
na koniec z.mp3
. Będzie to wyglądać mniej więcej tak:Połączmy to wszystko razem i oto wynik:
Spowoduje to konwersję wszystkich plików „.avi” do plików „.mp3” za pomocą FFmpeg, wystarczy zastąpić trzy cytaty, aby zdecydować, jakiego rodzaju konwersję chcesz, i możesz dodać dowolne inne argumenty do FFmpeg w pliku
ForEach
.Możesz pójść o krok dalej i dodać
Remove-Item
do końca, aby automatycznie usunąć stare pliki.Jeśli
ffmpeg
nie znajduje się na twojej ścieżce i rzeczywiście znajduje się w katalogu, w którym aktualnie się znajdujesz, napisz./ffmpeg
tam zamiast po prostuffmpeg
.Mam nadzieję, że to pomoże każdemu.
źródło
.ps1
pliku, a nie w.bat
pliku. Musisz uruchomićSet-ExecutionPolicy RemoteSigned
jako administrator, jeśli nigdy wcześniej nie uruchamiałeś skryptu PS.Przetwarzaj
flac
pliki wsadowo wmp3
(bezpieczny dla nazw plików ze spacjami) przy użyciu [1] [2]źródło
Windows:
jest to zmienna przepływność o jakości 2, możesz ustawić ją na 0, jeśli chcesz, ale jeśli nie masz naprawdę dobrego systemu głośników, nie warto
źródło
Jeśli chcesz, aby interfejs graficzny przetwarzał wsadowo za pomocą ffmpegX, wypróbuj Quick Batcher . To nic nie kosztuje i zajmie ostatnie ustawienia ffmpegX w celu konwersji plików, które do niego upuścisz.
Pamiętaj, że nie możesz przeciągać folderów do Szybkiego Batchera. Wybierz pliki, a następnie przeprowadź je przez Quick Batcher.
źródło
Tylko ten działał dla mnie, proszę zauważyć, że trzeba ręcznie utworzyć folder „newfiles”, w którym znajduje się plik ffmpeg.exe.
Konwersja . pliki do .wav audio Kod:
tzn. jeśli chcesz przekonwertować wszystkie pliki .mp3 na .wav zmień
("*.*")
na("*.mp3")
.Autorem tego skryptu jest:
https://forum.videohelp.com/threads/356314-How-to-batch-convert-multiplex-any-files-with-ffmpeg
mam nadzieję, że to pomogło 🙏.
źródło
Spowoduje to utworzenie wideo MP4 ze wszystkich plików JPG z bieżącego katalogu.
źródło
W przypadku systemu Windows to nie działa
nawet jeśli podwoję te
%
.Sugerowałbym nawet:
również:
źródło
Tego właśnie używam do wsadowej konwersji avi na 1280x mp4
Działa dobrze jako plik cmd, uruchom go, pętla znajdzie wszystkie pliki avi w tym folderze.
wywołuje MY (zmień dla twojego) ffmpeg, przekazuje nazwę wejściową, ustawienia dotyczą skalowania z wyostrzaniem. I probs nie potrzebują CRF i „
-b:v 1024k
” ...Plik wyjściowy to plik wejściowy minus rozszerzenie, z mp4 jako nowym rozszerzeniem.
źródło
Używam tego jednowierszowego linuksa do konwersji plików (zwykle H265) na coś, co mogę odtwarzać na Kodi bez problemów:
Konwertuje to na plik tymczasowy, a następnie zastępuje oryginał, dzięki czemu nazwy pozostają takie same po konwersji.
źródło
Także jeśli chcesz taką samą konwersję w podfolderach. oto kod rekurencyjny.
źródło
mały skrypt php, aby to zrobić:
źródło
escapeshellarg()
i działa zarówno na systemie Windows, jak i Linux. zgadzam się jednak, że jest to przypadek skrajny.Innym prostym rozwiązaniem, które nie zostało jeszcze zasugerowane, byłoby użycie
xargs
:ls *.avi | xargs -i -n1 ffmpeg -i {} "{}.mp4"
Drobną pułapką jest niewygodne nazewnictwo plików wyjściowych (np
input.avi.mp4
.). Możliwym obejściem tego problemu może być:ls *.avi | xargs -i -n1 bash -c "i={}; ffmpeg -i {} "\${i%.*}.mp4"
„źródło
ls
sięprintf '%s\n'
tutaj.