Od czasu do czasu potrzebuję przeprowadzać operacje na plikach muzycznych/video typu łączenie kilku plików w jeden, wyodrębnienie z pliku video samego audio czy obcięcie pliku. ffmpeg jest wszechstronnym narzędziem jak najbardziej radzącym sobie z takimi prostymi operacjami. Możliwości narzędzia są o wiele, wiele większe. ffmpeg łatwo daje się oskryptować dzięki czemu może być używany dla wielu plików jednocześnie.
Przykładowe operacje:
Konkatenacja wielu plików mp3:
ffmpeg -i “concat:plik1.mp3|plik2.mp3” -c copy plik_wynikowy.mp3
Wyodrębnienie z pliku vidio audio i zapisanie do mp3, skracając plik o 28 początkowych sekund:
ffmpeg -i video.mp4 -ss 00:00:28 -q:a 0 -map a plik_wynikowy.mp3
Załóżmy, że chcemy obciąć pliki zawsze X sekund od końca. ffmpeg nie ma wbudowanej takiej opcji. Należy w takiej sytuacji obliczyć długość pliku, odjąć wartość która nas interesuje i od takiej wartości obciąć koniec pliku.
!/bin/bash
for filename in *
do
echo $filename
bb=ffmpeg -i $filename 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'
echo $bb
cc=expr $bb - 56
echo $cc
ffmpeg -ss 00:00:29 -i $filename -t $cc -c copy cut_$filename
done
W kolejnym przykładzie załóżmy, że mamy stronę na której linki są “zamaskowane” w jakimś javascript albo innym języku. Takie linki nie pozwalają wget na dowolne ściąganie stron w trybie rekurencyjnym. Załóżmy też, że na podstronach są pliki pdf i mp3 które chcielibyśmy pobrać. Wówczas można pobrać źródło strony i spróbować wydobyć z niego linki w następujący sposób:
cat zrodlo_strony.txt | grep “/en/tekstZLinkuKtorySiePowtarza” > linki_t.txt
cut -d ‘”‘ -f2 < linki_t.txt | sed ‘s/^/https\:\/\/www.domena.com/’ > linki.txt
while read p; do wget -nd -r -A .pdf,.mp3 –mirror –wait=3 –random-wait -e robots=off $p; done < linki.txt
Jeśli linki mamy w pliku i chcemy pobrać je wszystkie (każdy link w osobnej linii) to:
wget -nd -r -A .pdf,.mp3 –mirror –wait=3 –random-wait -e robots=off –input ./lista4.txt
Another example is converting file downloaded from the Internet in wbem format, you can use the following format:
find . -maxdepth 1 -type f -iname "*.webm" | xargs -I % ffmpeg -i “%” -c:v libx264 -c:a aac “%”.mp4
No Comments