Puncte:11

Cum să ștergeți ultimele 4 secunde ale fișierului MP3?

drapel cn

Am un set de fișiere MP3 pe care aș dori să le șterg în ultimele 4 secunde. Știu că, dacă știu durata fiecărui fișier, pot face:

ffmpeg -t ${1} -i inputfilename -acodec copy -vcodec copy outputfilename

Unde $1 este durata fișierului minus cele 4 secunde.

Mi-ar plăcea foarte mult ceva care să taie ultimele 4 secunde, indiferent de lungimea fișierului. O „oprire cu 4 secunde înainte de EOF”.

Notă: m-am chinuit să descopăr această linie de comandă, dacă există o versiune mai ușoară, îmi place să o văd.

andrew.46 avatar
drapel in
Dacă acestea sunt simple mp3-uri audio, FFmpeg ar putea fi exagerat pentru nevoile dvs.? Sox va face treaba bine: `sox input.mp3 output.mp3 trim 0 -4`. Pot scrie asta dacă ești interesat să folosești Sox în acest fel...
LarryM avatar
drapel cn
Asta arată bine, dar... Am făcut „sudo apt install sox” și când rulez comanda primesc „sox FAIL formats: no handler for file extension ‘mp3’”?
LarryM avatar
drapel cn
Bine, a făcut: sudo apt-get install libsox-fmt-mp3 și acum tăierea finalului funcționează bine - mulțumesc! Dar aș dori, de asemenea, să reduc 2 secunde de la început de la alte fișiere. Am încercat: sox input.mp3 output.mp3 trim =2 (și alte variante), dar asta nu pare să reușească. Sugestii?
Puncte:7
drapel in

Sometimes when dealing with audio files, rather than audio plus video, a more nuanced application than FFmpeg is SoX. Install a fully featured SoX on Ubuntu as follows:

sudo apt-get install sox libsox-fmt-all

And to trim 4 seconds from the end of your mp3 file the following very simple command is required:

sox input.mp3 output.mp3 trim 0 -4

In this example '0' is the starting position at the beginning of the file while '-4' establishes the end position of the required segment: 4 seconds from the end.

Multiple variations on this, with multiple positions and saved segments, are possible. For example, as you have mentioned in the comments, if you only wanted to remove 2 seconds at the beginning of your file the command line would be:

sox input.mp3 output.mp3 trim 2

In this example no end position is required. The SoX man pages contain many more examples of the trim command if you want more complex usage...

LarryM avatar
drapel cn
Perfect, multumesc!
andrew.46 avatar
drapel in
@LarryM Vești grozave că a funcționat pentru tine :). Puteți „Accepta” răspunsul făcând clic pe bifa sau marcajul de lângă răspuns și astfel viitorii cititori ai acestei întrebări vor ști că acesta este cel mai bun răspuns. Și să aveți o zi minunată!
Puncte:5
drapel jp

Luat din Tăiați videoclipul cu ffmpeg:

ffmpeg -i input.mp3 -ss 4 -i input.mp3 -c copy -map 0:a -map 1:a -cel mai scurt -f nut - | ffmpeg -y -f nut -i - -c copy -map 0:0 output.mp3

Ceea ce face aceasta este că folosește aceeași intrare de două ori într-o metodă giratorie pentru a tăia fără a fi nevoie să cunoaștem durata și fără re-codificare.

  1. A doua intrare are 4 secunde întrerupte de la început.
  2. The -cel mai scurt opțiunea folosește cea mai scurtă durată de intrare pentru a determina durata ieșirilor. Acest lucru duce la întreruperea ultimelor 4 secunde de la prima intrare pentru a se potrivi cu durata celei de-a doua intrări trunchiate.
  3. Pentru că ambele fluxuri sunt necesare pentru -cel mai scurt pentru a funcționa, sunt conectate la un alt ffmpeg pentru a elimina a doua intrare.
drapel in
Ar trebui să fie `-map 0 -map -0:1` sau `-map 0:0`
LarryM avatar
drapel cn
Acest lucru a tăiat primele patru secunde din fișier, nu ultimele patru.
llogan avatar
drapel jp
@LarryM A existat o greșeală de tipar așa cum a subliniat Gyan și de data aceasta am testat de fapt rezultatul.
Puncte:2
drapel am

Poți să folosești ffprobe care ar trebui să vină cu ffmpeg pentru a obține durata.

dur=$(($(ffprobe -loglevel error -show_entries format=duration -of default=nk=1:nw=1 inputfilename | xargs printf %.0f)-4))
ffmpeg -t ${dur} -i inputfilename -c copy outputfilename

Prima linie folosește ffprobe pentru a obține durata minus 4 secunde apoi o pune într-un var numit dur.

am folosit si eu xargs a rotunji numărul deoarece bash acceptă numai numere întregi atunci când faceți operații matematice.

Poți să folosești bc dacă aveți nevoie de mai multă precizie.

dur=$(ffprobe -loglevel error -show_entries format=duration -of default=nk=1:nw=1 inputfilename)
dur=$(bc <<< ${dur}-4)
ffmpeg -t ${dur} -i inputfilename -c copy outputfilename
qwr avatar
drapel kr
qwr
soluție exagerată
llogan avatar
drapel jp
Nu este nevoie de `sed`, deoarece durata poate fi preluată direct doar cu `ffprobe`. Consultați [Cum adaug un efect de fade out de 1 secundă la sfârșitul unui videoclip cu ffmpeg?](https://askubuntu.com/a/1128909/) pentru o abordare similară. `-acodec copy -vcodec copy` poate fi scurtat la `-c copy`.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.