使用 FFMPEG 连接 YUV 以生成输出 YUV
Concatenate YUVs to generate output YUV using FFMPEG
我有10个yuv输入,每个yuv都是WxH的一帧(ip0_WxH.yuv, ip1_WxH.yuv, ..., ip9_WxH.yuv)
我需要连接所有 10 个以创建包含所有 10 个帧的最终 yuv 输出。
选项 1:
我在下面使用 link 来做到这一点。但是从第 2 帧开始,最终的 yuv 输出是不正确的。
只有第一帧看起来不错。从第2帧开始,色度和亮度的缓冲区地址可能有一些错误的索引,因此图片显示错误。
Converting more yuv frames to one yuv frame
cat *.yuv > movie.yuv
选项 2:
我尝试使用 FFMPEG 将 yuvs 连接在一起:https://trac.ffmpeg.org/wiki/Concatenate
$ cat mylist.txt
file 'ip0_WxH.yuv'
file 'ip1_WxH.yuv'
file 'ip2_WxH.yuv'
Desktop/danny$ ffmpeg -f rawvideo -f concat -safe 0 -i myfile.txt -c out.yuv
但出现此错误:
...
Trailing options were found on the commandline.
[IMGUTILS @ 0x7fff4d92d720] Picture size 0x0 is invalid
[concat @ 0x558b6c335900] Impossible to open 'ip0_WxH.yuv'
myfile.txt: Invalid argument
任何人都可以建议使用 ffmpeg 命令将这些 YUV 连接在一起。
更新:
根据 llogan 建议的第一个答案,
我使用了以下命令:
ffmpeg -f image2 -c:v rawvideo -pixel_format rgb24 -video_size 1344x968 -i ip%d_WxH.yuv output.yuv
输出
~/Desktop/danny$ ffmpeg -f image2 -c:v rawvideo -pixel_format rgb24 -video_size 1344x968 -i ip%d_WxH.yuv output.yuv
ffmpeg version 3.4.8-0ubuntu0.2 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
configuration: --prefix=/usr --extra-version=0ubuntu0.2 --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-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --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-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libavresample 3. 7. 0 / 3. 7. 0
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
Input #0, image2, from ' ip%d_WxH.yuv':
Duration: 00:00:00.16, start: 0.000000, bitrate: N/A
Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 1344x968, 25 fps, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> rawvideo (native))
Press [q] to stop, [?] for help
[rawvideo @ 0x5623405f30c0] Invalid buffer size, packet size 2132928 < expected frame_size 3902976
Error while decoding stream #0:0: Invalid argument
[rawvideo @ 0x5623405f30c0] Invalid buffer size, packet size 2132928 < expected frame_size 3902976
Error while decoding stream #0:0: Invalid argument
[rawvideo @ 0x5623405f30c0] Invalid buffer size, packet size 2132928 < expected frame_size 3902976
Error while decoding stream #0:0: Invalid argument
[rawvideo @ 0x5623405f30c0] Invalid buffer size, packet size 2132928 < expected frame_size 3902976
Error while decoding stream #0:0: Invalid argument
Finishing stream 0:0 without any data written to it.
Output #0, rawvideo, to 'output.yuv':
Metadata:
encoder : Lavf57.83.100
Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 1344x968, q=2-31, 780595 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc57.107.100 rawvideo
frame= 0 fps=0.0 q=0.0 Lsize= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used)
Conversion failed!
尝试不同的 yuv 格式。
因为你用的是yuv。因此,使用 yuv422p
或 yuv420p
取决于您输入的 yuv 类型。
试试这个:
ffmpeg -f image2 -c:v rawvideo -pixel_format yuv420p -video_size 1344x968 -i ip%d_WxH.yuv out.yuv
我有10个yuv输入,每个yuv都是WxH的一帧(ip0_WxH.yuv, ip1_WxH.yuv, ..., ip9_WxH.yuv)
我需要连接所有 10 个以创建包含所有 10 个帧的最终 yuv 输出。
选项 1:
我在下面使用 link 来做到这一点。但是从第 2 帧开始,最终的 yuv 输出是不正确的。 只有第一帧看起来不错。从第2帧开始,色度和亮度的缓冲区地址可能有一些错误的索引,因此图片显示错误。
Converting more yuv frames to one yuv frame
cat *.yuv > movie.yuv
选项 2:
我尝试使用 FFMPEG 将 yuvs 连接在一起:https://trac.ffmpeg.org/wiki/Concatenate
$ cat mylist.txt
file 'ip0_WxH.yuv'
file 'ip1_WxH.yuv'
file 'ip2_WxH.yuv'
Desktop/danny$ ffmpeg -f rawvideo -f concat -safe 0 -i myfile.txt -c out.yuv
但出现此错误:
...
Trailing options were found on the commandline.
[IMGUTILS @ 0x7fff4d92d720] Picture size 0x0 is invalid
[concat @ 0x558b6c335900] Impossible to open 'ip0_WxH.yuv'
myfile.txt: Invalid argument
任何人都可以建议使用 ffmpeg 命令将这些 YUV 连接在一起。
更新:
根据 llogan 建议的第一个答案, 我使用了以下命令:
ffmpeg -f image2 -c:v rawvideo -pixel_format rgb24 -video_size 1344x968 -i ip%d_WxH.yuv output.yuv
输出
~/Desktop/danny$ ffmpeg -f image2 -c:v rawvideo -pixel_format rgb24 -video_size 1344x968 -i ip%d_WxH.yuv output.yuv
ffmpeg version 3.4.8-0ubuntu0.2 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
configuration: --prefix=/usr --extra-version=0ubuntu0.2 --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-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --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-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libavresample 3. 7. 0 / 3. 7. 0
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
Input #0, image2, from ' ip%d_WxH.yuv':
Duration: 00:00:00.16, start: 0.000000, bitrate: N/A
Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 1344x968, 25 fps, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> rawvideo (native))
Press [q] to stop, [?] for help
[rawvideo @ 0x5623405f30c0] Invalid buffer size, packet size 2132928 < expected frame_size 3902976
Error while decoding stream #0:0: Invalid argument
[rawvideo @ 0x5623405f30c0] Invalid buffer size, packet size 2132928 < expected frame_size 3902976
Error while decoding stream #0:0: Invalid argument
[rawvideo @ 0x5623405f30c0] Invalid buffer size, packet size 2132928 < expected frame_size 3902976
Error while decoding stream #0:0: Invalid argument
[rawvideo @ 0x5623405f30c0] Invalid buffer size, packet size 2132928 < expected frame_size 3902976
Error while decoding stream #0:0: Invalid argument
Finishing stream 0:0 without any data written to it.
Output #0, rawvideo, to 'output.yuv':
Metadata:
encoder : Lavf57.83.100
Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 1344x968, q=2-31, 780595 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc57.107.100 rawvideo
frame= 0 fps=0.0 q=0.0 Lsize= 0kB time=00:00:00.00 bitrate=N/A speed= 0x
video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used)
Conversion failed!
尝试不同的 yuv 格式。
因为你用的是yuv。因此,使用 yuv422p
或 yuv420p
取决于您输入的 yuv 类型。
试试这个:
ffmpeg -f image2 -c:v rawvideo -pixel_format yuv420p -video_size 1344x968 -i ip%d_WxH.yuv out.yuv