Jak używać FFMPEG do konwersji wielu plików multimediów jednocześnie w Linux

Jak używać FFMPEG do konwersji wielu plików multimediów jednocześnie w Linux

Cel

Napisz prosty skrypt bash dla konwersji plików wsadowych FFMPEG.

Rozkłady

Będzie to działać na wszystkich dystrybucjach Linux.

Wymagania

Działający instalacja Linux z zainstalowanym FFMPEG.

Konwencje

  • # - Wymaga, aby podane polecenia Linux są wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda
  • $ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny

Wstęp

FFMPEG niezwykle potężny, jeśli chodzi o manipulowanie i przekształcanie plików multimedialnych, ale brakuje mu jednej ważnej funkcji. FFMPEG nie ma możliwości obsługi wielu plików jednocześnie. Więc co możesz z tym zrobić? Jesteś użytkownikiem Linuksa. Nie będziesz tam siedzieć i ręcznie pisać w tym samym poleceniu w kółko, jesteś?

FFMPEG jest całkowicie podlegający scenariuszowi. Możesz więc napisać prosty skrypt bash, aby zapętlić zawartość określonego katalogu i wykonać konwersję, którą chcesz na każdym pliku. Chociaż może to brzmieć bardzo, tak naprawdę nie jest. Skrypt będzie mniej niż 20 wierszy Bash.

Skonfiguruj plik

Zacznij od skonfigurowania pliku. Zrób to gdziekolwiek lubisz.

$ Touch Ffmpeg Batch.cii

Następnie spraw, aby był wykonywalny.

$ chmod +x ffmpeg partia.cii

Otwórz plik i skonfiguruj go, aby rozpocząć pisanie.

#! /bin/bash

Zaplanuj swoje zmienne

Będziesz musiał przekazać wiele argumentów do swojego skryptu, jeśli chcesz, aby był wystarczająco elastyczny, aby obsłużyć większość scenariuszy, do których używałbyś FFMPEG. Z tego powodu będziesz potrzebować sporo zmiennych. Jasne, możesz użyć surowych wejść, ale będzie o wiele trudniej śledzić.

srcext = 1 $ vestext = 2 $ srcdir = 3 $ destdir = 4 $ opts = 5 $

W sumie masz pięć zmiennych; rozszerzenie źródła, miejsce docelowe lub wynikowe, katalog źródłowy, katalog docelowy i opcje. Opcje to dowolne opcje, które chcesz w swoim poleceniu FFMPEG. Istnieją inne sposoby, aby to zrobić, ale po prostu przekazanie ich jako sznurek działa i jest to bardzo proste.

Pętla

Ten skrypt koncentruje się wokół Do pętla iteracja nad zawartością określonego katalogu. Musisz stworzyć tę pętlę. Zacznij od konfiguracji pomysłu.

dla nazwy pliku w folderze; gotowe

Oczywiście, TECZKA jest niczym. Musisz skonfigurować pętlę, aby iterować nad zawartością katalogu, a ten katalog jest przechowywany w srcdir. Musisz także powiedzieć, że musi to zapętlać tylko przez pliki z określonym rozszerzeniem, srcext. Więc kombinacja, której szukasz, wygląda tak:

„$ srcdir”/*.$ srcext

Wieloznaczna karta (*) mówi to wszystkim plikom, a następnie .$ srcext Daje mu pełne rozszerzenie, które należy szukać. Cytaty są niezbędne $ srcdir Aby zapobiec traktowaniu całości jako sznurek i nie działa prawidłowo.

Cała sprawa razem wygląda tak:

dla nazwy pliku w „$ srcdir”/*.$ srcext; gotowe

Twoje polecenie FFMPEG

Znasz podstawową składnię FFMPEG, ale to nie idzie za daleko. Cała sprawa składa się ze zmiennych. Mówiąc o zmiennych, będziesz potrzebować jeszcze kilku. Aby uzyskać prawidłowe elementy dla folderu docelowego i plików, oryginalne nazwy plików należy posiekać i zreorganizować.

Najpierw utwórz nową zmienną, BasePath i ustaw go równe temu wyrażeniem regularnym: $ nazwa pliku%.*.

BasePath = $ nazwa pliku%.*

Wyrażenie pasuje wszystko po . ze ścieżki, co oznacza rozszerzenie.

Teraz musisz pozbyć się samej ścieżki. Aby to zrobić, ustaw Basename równy $ Basepath ##*/.

Basename = $ Basepath ##*/

To dba o wszystko inne, aż do samej nazwy pliku.

Możesz teraz zebrać elementy, aby sformułować połączenie do FFMPEG.

ffmpeg -i „$ filename” $ opts "$ destdir"/"$ basename".„$ vestext”

Jak widać, jest to takie samo jak normalne wywołanie FFMPEG, ale używając zmiennych. Najbardziej skomplikowanym elementem jest miejsce docelowe, ale po prostu łączy poszczególne kawałki miejsca docelowego, tworząc całą ścieżkę z nazwą pliku i rozszerzeniem.

Owinięcie

Jeśli chcesz, możesz przyczynić się do komunikatu sukcesu po zakończeniu konwersji. Rzuć go na koniec swojego skryptu po Do pętla.

echo „Konwersja z $ srcext na $ vestext kompletne!"

Cała sprawa powinna wyglądać mniej więcej tak:

#! /bin/bash srcext = 1 $ vestext = 2 $ srcdir = 3 $ destdir = 4 $ opts = 5 $ dla nazwy pliku w „$ srcdir”/*.$ srcext; Do Basepath = $ nazwa pliku%.* basename = $ Basepath ##*/ ffmpeg -i „$ filename” $ opts "$ destdir"/"$ basename".„$ vestext” DODE Echo ”Konwersja z $ srcext na $ vestext kompletne!"

Uruchom swój skrypt

Na koniec możesz teraz uruchomić swój skrypt, aby wykonać konwersje plików wsadowych. Spójrz na ten przykład, aby zobaczyć, jak wygląda składnia.

$ Ffmpeg Batch.sh flac mp3/ścieżka/do/pliki/ścieżka/do/dest '-AB 320K'

To nie jest o wiele więcej niż zwykle. Dopiero teraz przekształcasz cały katalog plików, zamiast jednego.

Zamykanie myśli

Ten skrypt powinien być wystarczająco elastyczny w przypadku większości sytuacji, w tym wideo. Możesz dodać skrypt do lokalnego lub szerokiego systemu kosz ścieżka, aby była łatwiej dostępna spoza jego katalogu.

Powiązane samouczki Linux:

  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Ubuntu 20.04 Instalacja FFMPEG
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
  • Polecenia Linux: Top 20 najważniejsze polecenia, które musisz…
  • Jak przeliczyć pliki muzyczne z FFMPEG
  • Pobierz Linux
  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Najlepszy Linux Distro dla programistów
  • Podstawowe polecenia Linux
  • Linux Pliki konfiguracyjne: Top 30 Najważniejsze