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)
Search for duplicated files

This will be short (but hopefully I will find more time to show entire process to search duplicated files together with some examples). In case you are searching for duplicated files I can recommend two software which actually rocks in openSource world

Linux
2
“Gaming laptop”, steam link and rustdesk.

Not really related to this article, but just wanted to describe the situation.  Most of the time I am working on Linux or Mac. Not a big deal, but last year we bought my daughter a kind of gaming laptop. I am saying kind of, because IMHO there is no …

Azure
NFS issue, cannot be mounted or is not visible

The same kind of issue I have encountered numerous times while working across different environments and with various customers. The problem with NFS mounts connected from remote locations is so common. This issue extends beyond communication solely over WAN and also include connections between datacenters (DC) where we lack control …