Ffmpeg nu scrie mereu fisierul de output pe disk

Salut,

Pentru comanda

ffmpeg -i /cache/file.mp3 -threads 4 /cache/file.webm

nu este mereu scris fisierul /cache/file.webm pe disk.

Procesul de ffmpeg merge pana la capat, nu am nicio eroare, output-ul procesului este acelasi si cand fisierul este scris pe disk si cand nu este. Rulez manual comanda.

Mai jos info despre build:

ffmpeg version 3.3.4-1~16.04.york0 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
  configuration: --prefix=/usr --extra-version='1~16.04.york0' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  libavutil      55. 58.100 / 55. 58.100
  libavcodec     57. 89.100 / 57. 89.100
  libavformat    57. 71.100 / 57. 71.100
  libavdevice    57.  6.100 / 57.  6.100
  libavfilter     6. 82.100 /  6. 82.100
  libavresample   3.  5.  0 /  3.  5.  0
  libswscale      4.  6.100 /  4.  6.100
  libswresample   2.  7.100 /  2.  7.100
  libpostproc    54.  5.100 / 54.  5.100

Idei?

Multumesc!

Procesul întoarce codul de eroare zero, sau altceva?

Da, intoarce zero.

E mereu pe acelasi fisier, sau fisiere diferite?

Fisiere diferite.
Acelasi fisier poate sa nu mearga, apoi sa mearga.

Incearca cu -loglevel debug sa vezi mai in detaliu ce se intampla. E destul de bizar.

Desigur ca am incercat. Output-ul este acelasi si pentru o conversie in care fisierul asta fost scris pe disk, si pentru una fara scriere.

Poti sa incerci cu un flag de overwrite(-y) in caz ca ffmpeg se supara ca e un fisier deja acolo, desi nu ar mai incerca sa faca conversia si ti-ar da un mesaj descriptiv, daca ar fi cazul asta.

ffmpeg -i /cache/file.mp3 -threads 4 -y /cache/file.webm

Cand testez manual dau mereu remove fisierului scris inainte de conversie (cand execut ffmpeg din aplicatie, mereu se verifica inainte daca exista fisierul deja, caz in care nu se mai face conversia).

Stiti alternative decente la ffmpeg pentru conversie la webm/mp4?

Degeaba cauti alternative, ffmpeg e tatal lor :slight_smile: Eu am convertit sute de fisiere cu ffmpeg, unele de 10GB, am facut decupaje cu el, resicronizare sunet, downscaling, transcoding, concatenare, capturare de ecran, cu si fara accelerare hardware etc si n-am patit niciodata ce zici tu.

Testeaza si cu libav (asta e fork la ffmpeg).

Dar vezi sa nu fie vreo problema cu sistemul de operare sau vreo problema de hardware.

Te cred, ffmpeg folosesc si eu de mult timp. Am testat in doua medii hardware diferite, o sa incerc si cu alt os. Tu pe ce os-uri ai folosit?

Dacă nu găsești o soluție eficientă, uite o idee nebunească: faci un script bash care face așa:

1 run ffmpeg
2 if not file.webm go to 1

Verifici numărul iterațiilor, să nu rulezi de mai mult de X ori și gata.

2 Likes

De regula pe Fedora si Windows 10. Iar la un moment dat am convertit din .flv in .mp4 (doar containerul, nu transcoding, codecul video a ramas h.264) un batch de cateva sute de fisiere pe o masina APU2. Vreau sa zic ca l-am torturat pe sarmanul ffmpeg in toate felurile imaginabile si a rezistat cu stoicism, fara sa crape vreodata :slight_smile:

Ce-i drept, am convertit rar in ,webm si niciodata n-am precizat cate thread-uri sa foloseasca, l-am lasat pe el sa aleaga numarul optim de thread-uri.

1 Like

Înainte de soluții aș prefera să găsesc cauza.

1 Like

De curiozitate, asta se intampla la orice transcoding mp4->webm? Ai incercat cu fisiere diferite, poate fisierul pe care vrei sa il transcodezi se comporta mai ciudat. Acum ceva timp am testat si vlc pentru taskuri de genul asta, dar nu am habar daca merge pentru webm.

Daca nu e confidential, poti sa pui undeva mp4-ul cu probleme sa ne uitam si noi peste el?

E vorba de multe fișiere, nu unul singur, plus că același fișier poate fi în regulă la o conversie și cu probleme la următoarea.

1 Like

Iti acceseaza mai multe procese acele fisiere? De obicei pe linux comportamentul aleatoriu provine din “too many chefs in the kitchen”. Te poti asigura ca doar tu le accesezi din acest proces?

1 Like

As incerca si cu conversie spre altceva decat webm. Poate e buggy partea aia de cod, avand in vedere ca a un standard mai nou etc.

Poate chiar e un bug in ffmpeg - merita ridicata problema pe issue tracker

In aplicatie se verifica daca exista fisierul pe disk, si doar daca nu exista se face conversia. Dupa ce fisierul exista (chiar si in timp ce ffmpeg inca mai scrie in el), alte procese il pot accesa, insa doar citesc din el. Singurul proces care scrie in fisierul respectiv este cel de ffmpeg, si daca fisierul exista deja, nu se va mai deschide inca un proces de ffmpeg.

Problema o intalnesc si in medii de test, unde sunt singurul care face conversie, si chiar si daca rulez ffmpeg direct, nu prin aplicatie.