ffmpeg nie może przekonwertować szarego wideo na avi

0

Transkodowałbym plik wideo GRAY lub YUV400 na AVI (YUV420P). Mój plik wejściowy to tylko 1920 x 1080 Y, jego rozmiar to 22809600 = & gt; 11 ramka. Użyłem następującej linii poleceń, ale ffmpeg generuje AVI z tylko 1 ramką. Zauważ, że użyłem również „szarego” dla wejścia pix_fmt.

Czy masz sztuczkę, aby to zrobić, czy jest to błąd ffmpeg?

ffmpeg -s 1920x1080 -pix_fmt pal8 -i YFrames_stub_1920x1080.y -c:v rawvideo -pix_fmt yuv420p YFrames_stub_1920x1080_Y.avi
ffmpeg version N-58949-g0e575c2 Copyright (c) 2000-2013 the FFmpeg developers
  built on Dec  9 2013 22:06:49 with gcc 4.8.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib
--enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray
--enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 58.100 / 52. 58.100
  libavcodec     55. 45.100 / 55. 45.100
  libavformat    55. 22.100 / 55. 22.100
  libavdevice    55.  5.102 / 55.  5.102
  libavfilter     3. 92.100 /  3. 92.100
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100
Input #0, image2, from 'YFrames_stub_1920x1080.y':
  Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: rawvideo, pal8, 1920x1080, 25 tbr, 25 tbn, 25 tbc
File 'YFrames_stub_1920x1080_Y.avi' already exists. Overwrite ? [y/N] y
Output #0, avi, to 'YFrames_stub_1920x1080_Y.avi':
  Metadata:
    ISFT            : Lavf55.22.100
    Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 1920x1080, q=2-31, 200 kb/s, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo -> rawvideo)
Press [q] to stop, [?] for help
frame=    1 fps=0.0 q=0.0 Lsize=    3043kB time=00:00:00.04 bitrate=623221.2kbits/s
video:3038kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.183449%
alexbuisson
źródło
Dodaj -loop 1 przed -i. Nie mogę nic powiedzieć o formacie .y - nigdy go nie spotkałem, ale ffmpeg mówi, że to obraz, (jednak strumień 0 pokazuje surowy film), więc myślę, że potrzebujesz -loop 1 parametr. Ustaw także czas trwania za pomocą -t xx gdzie xx to żądany czas trwania.
Rajib

Odpowiedzi:

1

Po pewnym eksperymencie na ten temat znalazłem, gdzie był mój błąd! W wierszu poleceń, którego użyłem:

ffmpeg -s 1920x1080 -pix_fmt pal8 -i YFrames_1920x1080.y -c:v rawvideo -pix_fmt yuv420p out.avi

brakuje niektórych parametrów, ale ważniejsze było -f rawvideo. Jeśli dodam go na początku cmd:

ffmpeg -f rawvideo -pix_fmt pal8 -s:v 1920x1080 -i YFrames_1920x1080.y -c:v rawvideo -pix_fmt yuv420p out.avi

Możemy użyć obu pix_fmt szary lub pal8.

alexbuisson
źródło
1
Tak -f rawvideo jest zawsze potrzebne podczas czytania, no, surowego wideo. W przeciwnym razie odgadnie kontener i dlatego nie akceptuje wszystkich rodzajów opcji. W twoim przypadku błędnie użył demuxera image2.
slhck