ffmpeg, działania na plikach

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

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Free(BSD)
yt-dlp – download your data from youtube

Hi, this short article only to mention that there is a wonderful application that exists for a years for the purpose to download YOUR or maybe some other movies from youtube. I don’t want to go in to legal aspect too much, what can be downloaded from youtube, what not …

Linux
Migrate WordPress site to another hosting service.

IntroductionThis article details the migration of WordPress site (exactly this site you are now on) from one service provider to Amazon Lightsail. There might be various reason to do that (mine is outlined below) but in general I hope to share the message that especially with WordPress, migration can be …

Free(BSD)
Convert pdf file to jpeg – with imagemagic

Short article just to write down not-so frequently (for me) task: remove /opt/homebrew/bin from that command where using on other system than macOs Options: cheers