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.

Linux
podcast

All podcast applications I have tested were quite OK(ish) – but I have always struggled with organizing podcasts, creating playlists, etc. It has always been challenging. Therefore, for me, it is more convenient to download podcasts as MP3s and manage them myself (in VLC, for example). There are many ways to do that, but my favorite …

Linux
jellyfin configuration in lxc container

Jellyfin is extremely useful software providing home streaming system. I am using it since a while for streaming my old ripped DVD, which I love to watch again and again. Jellyfin is opensource, cross platform as a server and as a client, including client for android and iOS. It is …

Linux
Various helpful Linux commands for file manipulations

Change file name for all files that contains “[any text]” substring to the same name without that.