Problem z wyjściem FTP FFMpeg, nie można wysyłać do formatu MP4

0

Mam problem z FFMpeg, gdy chcę przekonwertować wideo na MP4 i wyprowadzić na FTP.
Po prostu spróbuj to zrobić (i nie zadziała):

ffmpeg.exe -i test.avi ftp://127.0.0.1/dumped.mp4 

Ale działa, gdy konwertuję na FLV używając tego:

ffmpeg.exe -i test.avi ftp://127.0.0.1/dumped.flv

Czy ktoś może wyjaśnić, dlaczego nie działa / jak to zrobić?

UWAGA: Próbowałem tego na innym oprogramowaniu serwera FTP ( Serwer FileZilla , Quick'n'Easy FTP , BabyWeb FTP ), więc prawdopodobnie nie jest to problem z serwerem. Stworzyłem użytkownika z pełnymi uprawnieniami dostępu do odczytu / zapisu, ale bez powodzenia.

AKTUALIZACJA : Oto dziennik konsoli FFMpeg:

D:\Projects\FFMpeg FTP>ffmpeg -i test.avi ftp://anonymous:[email protected]/dumped.mp4
ffmpeg version N-54362-ge0be3cb Copyright (c) 2000-2013 the FFmpeg developers
  built on Jul  2 2013 22:15:59 with gcc 4.7.3 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzli
b --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libblu
ray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --ena
ble-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-l
ibopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheo
ra --enable-libtwolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-lib
vpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 38.100 / 52. 38.100
  libavcodec     55. 18.100 / 55. 18.100
  libavformat    55. 11.100 / 55. 11.100
  libavdevice    55.  2.100 / 55.  2.100
  libavfilter     3. 77.101 /  3. 77.101
  libswscale      2.  3.100 /  2.  3.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  3.100 / 52.  3.100
Input #0, avi, from 'hand.avi':
  Metadata:
    encoder         : Lavf55.11.100
  Duration: 00:01:00.87, start: 0.000000, bitrate: 466 kb/s
    Stream #0:0: Video: mpeg4 (Simple Profile) (FMP4 / 0x34504D46), yuv420p, 640x480 [SAR 1:1 DAR 4:
3], 30 tbr, 30 tbn, 30 tbc
    Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 44100 Hz, stereo, s16p, 128 kb/s
[libx264 @ 0246db20] using SAR=1/1
[libx264 @ 0246db20] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle
[libx264 @ 0246db20] profile High, level 3.0
[libx264 @ 0246db20] 264 - core 133 r2334 a3ac64b - H.264/MPEG-4 AVC codec - Copyleft 2003-2013 - ht
tp://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subm
e=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,
11 fast_pskip=1 chroma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 i
nterlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 we
ightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc
=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
[mp4 @ 036d8820] muxer does not support non seekable output
Output #0, mp4, to 'ftp://anonymous:[email protected]/dumped.mp4':
  Metadata:
    encoder         : Lavf55.11.100
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 640x480 [SAR 1:1 DAR 4:3],
 q=-1--1, 90k tbn, 30 tbc
    Stream #0:1: Audio: aac (libvo_aacenc) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, s16, 128 kb/s

Stream mapping:
  Stream #0:0 -> #0:0 (mpeg4 -> libx264)
  Stream #0:1 -> #0:1 (mp3 -> libvo_aacenc)
Could not write header for output file #0 (incorrect codec parameters ?): Error number -1 occurred

Linie te zostały oznaczone czerwonym kolorem w konsoli (myślę, że są to najważniejsze):
[mp4 @ 036d8820] muxer does not support non seekable output
i
Could not write header for output file #0 (incorrect codec parameters ?): Error number -1 occurred

AKTUALIZACJA 2: Oto dzienniki serwera FTP.

1) konwersja do MP4 (niepowodzenie)

...
REST 0
350 Rest supported. Restarting at 0
SIZE /dumped.mp4
213 566120
disconnected.

2) konwersja do FLV (działa)

...
REST 0
350 Rest supported. Restarting at 0
SIZE /dumped.flv
213 566120
PASV
227 Entering Passive Mode (46,241,209,90,204,57)
STOR /dumped.flv
150 Connection accepted

AKTUALIZACJA 3: Po zauważeniu tego w dzienniku konsoli ffmpeg:
[mp4 @ 036d8820] muxer does not support non seekable output ,
Dodałem ten parametr -ftp-write-seekable 1.
Teraz widzę, że konwertuje plik na MP4 bez błędy w dzienniku ffmpeg i widzę ten plik na moim serwerze FTP!
Ale ja nie mogę grać to (ponieważ jest uszkodzone?). Próbowałem wszystkich moich odtwarzaczy multimedialnych (bez powodzenia).
Oto dziennik FFPlay (nie FFMpeg):

...
libpostproc    52.  3.100 / 52.  3.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 033302e0] moov atom not found
dumped.mp4: Invalid data found when processing input=    0B f=0/0
Jet
źródło
Proszę dołączyć kompletny wyjście konsoli, a nie tylko sekcja.
llogan
@ LordNeckbeard, Ale myślę, że górna część dziennika ffmpeg nie jest użyteczna. Pozwól mi to usunąć.
Jet
Konieczne może być lokalne zakodowanie pliku, a następnie przesłanie go za pośrednictwem FTP w oddzielnym kroku. FFmpeg Dokumenty protokołu FTP state: "Protokół może być używany jako wyjście, ale zaleca się, aby tego nie robić, chyba że zostaną podjęte specjalne działania (testy, niestandardowa konfiguracja serwera itp.) Różne serwery FTP zachowują się inaczej podczas operacji wyszukiwania. Narzędzia ff * mogą generować niepełna zawartość z powodu ograniczeń serwera. ”
llogan
Może to błąd w FFMpeg? Widzę, że wysyła polecenie FTP „PASV” i wchodzi w tryb pasywny, gdy konwertuje do FLV (patrz w moich dziennikach). Ale nie wysyła PASV dla MP4.
Jet

Odpowiedzi:

2

Niektóre serwery FTP obcinają pliki w miejscu, w którym do nich piszesz. Więc jeśli muxer szuka wstecz, a następnie pisze, twój plik zostanie obcięty w tej pozycji. Jeśli naprawdę chcesz użyć zasobu FTP jako wyjścia, prawdopodobnie musisz zmienić serwer FTP.

Lukasz Marek
źródło
1

ffmpeg nie może umieścić pliku mp4 bezpośrednio na serwerze ftp, ponieważ ffmpeg musi przepisać nagłówek mp4 (moov) za każdym razem z domyślnymi opcjami mp4.

Możesz jednak podzielić fragment pliku mp4 na „-movflags frag_keyframe”. Dzięki tej opcji moov nie jest przepisywany.

Czy możesz spróbować za pomocą tego polecenia?

ffmpeg.exe -i test.avi -movflags frag_keyframe -f mp4 ftp://127.0.0.1/dumped.mp4 
Archpy
źródło