gpt4 book ai didi

video - FFmpeg 管道输入,从 WebM 转码到 MP4 时出错

转载 作者:行者123 更新时间:2023-12-04 23:33:11 26 4
gpt4 key购买 nike

我正在尝试使用 FFMPEG 从管道输入录制视频。管道输入采用 WebM 格式,即视频编解码器为 VP8,音频编解码器为 OPUS。我可以使用 FFMPEG 以 WebM 格式保存输出视频,没有任何问题。但是当我尝试将其保存为 MP4 格式时,我没有得到所需的输出。虽然保存时没有错误,但输出文件显示错误,描述为“此文件不包含可播放的流!”。
这些是以 WebM 格式成功录制的选项。

    '-loglevel', 'debug', '-protocol_whitelist', 'pipe,udp,rtp', 
'-fflags', '+genpts', '-i', 'pipe:0', '-map', '0:v:0', '-c:v',
'copy', '-map', '0:a:0', '-strict', '-2', '-c:a', 'copy', '-flags',
'+global_header', '-f', 'webm', 'output.webm'
这是我以 MP4 格式录制的 ffmpeg 选项。
    '-thread_queue_size', '4096', '-r', '25', '-i', 'pipe:0', 
'-c:v', 'libx264', '-preset', 'veryFast', '-pix_fmt', 'yuvj420p',
'-acodec', 'aac', "output.mp4"
将此命令作为子进程执行后的控制台输出
> ffmpeg::process::data [data:'  libavutil      56. 31.100 / 56. 
31.100\n' + ' libavcodec 58. 54.100 / 58. 54.100\n' + '
libavformat 58. 29.100 / 58. 29.100\n' + ' libavdevice 58.
8.100 / 58. 8.100\n' + ' libavfilter 7. 57.100 / 7. 57.100\n'
+ ' libavresample 4. 0. 0 / 4. 0. 0\n' + ' libswscale
5. 5.100 / 5. 5.100\n' + ' libswresample 3. 5.100 / 3.
5.100\n' + ' libpostproc 55. 5.100 / 55. 5.100\n'] +1ms
>
> ffmpeg ffmpeg::process::data [data:"Input #0, matroska,webm, from
> 'pipe:0':\n" + ' Metadata:\n' + ' encoder : Chrome\n' + '
> Duration: N/A, start: 0.000000, bitrate: N/A\n' + ' Stream
> #0:0(eng): Audio: opus, 48000 Hz, stereo, fltp (default)\n' + '
Stream #0:1(eng): Video: vp8, yuv420p(progressive), 1920x950, SAR 1:1
> DAR 192:95, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)\n' + '
> Metadata:\n' + ' alpha_mode : 1\n'] +1s
>
>
> ffmpeg::process::data [data:'Stream mapping:\n' + ' Stream #0:1 ->
> #0:0 (vp8 (native) -> h264 (libx264))\n' + ' Stream #0:0 -> #0:1
(opus (native) -> aac (native))\n'] +1ms
>
> ffmpeg::process::data [data:'[swscaler @ 0x55a63050ddc0] deprecated
> pixel format used, make sure you did set range correctly\n'] +23ms
>
> ffmpeg::process::data [data:'[libx264 @ 0x55a630489980] using
> SAR=1/1\n'] +10ms
>
> ffmpeg::process::data [data:'[libx264 @ 0x55a630489980] using cpu
> capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2\n'] +0ms
>
> ffmpeg::process::data [data:'[libx264 @ 0x55a630489980] profile
> High, level 4.0\n'] +8ms
>
> ffmpeg::process::data [data:'[libx264 @ 0x55a630489980] 264 - core
> 155 r2917 0a84d98 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 -
> http://www.videolan.org/x264.html - options: cabac=1 ref=1
> deblock=1:0:0 analyse=0x3:0x113 me=hex subme=2 psy=1 psy_rd=1.00:0.00
> mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0
> deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=18
> lookahead_threads=6 sliced_threads=0 nr=0 decimate=1 interlaced=0
> bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1
> b_bias=0 direct=1 weightb=1 open_gop=0 weightp=1 keyint=250
> keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=10 rc=crf
> mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40
> aq=1:1.00\n'] +1ms
>
> ffmpeg::process::data [data:"Output #0, mp4, to 'output.mp4':\n" + '
> Metadata:\n' + ' encoder : Lavf58.29.100\n' + ' Stream
> #0:0(eng): Video: h264 (libx264) (avc1 / 0x31637661),
yuvj420p(pc), 1920x950 [SAR 1:1 DAR 192:95], q=-1--1, 25 fps, 12800 tbn, 25 tbc
> (default)\n' + ' Metadata:\n' + ' alpha_mode : 1\n' + '
> encoder : Lavc58.54.100 libx264\n' + ' Side data:\n' + '
> cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1\n' + '
> Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz,
> stereo, fltp, 128 kb/s (default)\n' + ' Metadata:\n' + '
> encoder : Lavc58.54.100 aac\n'] +0ms
>
> ffmpeg::process::data [data:'frame= 45 fps=0.0 q=28.0 size=
> 0kB time=00:00:01.87 bitrate= 0.2kbits/s speed=3.48x \r'] +505ms
>
> ffmpeg::process::data [data:'frame= 61 fps= 56 q=28.0 size=
> 0kB time=00:00:02.41 bitrate= 0.2kbits/s speed=2.22x \r'] +564ms
>
> ffmpeg::process::data [data:'frame= 76 fps= 48 q=28.0 size=
> 0kB time=00:00:02.88 bitrate= 0.1kbits/s speed=1.81x \r'] +492ms
我对此输出有疑问,因为它可能导致了问题。
ffmpeg::process::data [data:'[swscaler @ 0x55a63050ddc0] deprecated
pixel format used, make sure you did set range correctly\n'] +23ms
我希望我已经提供了有关我面临的问题的足够信息。请询问正确理解问题所需的任何其他信息。
我确定我缺少一些导致此问题的 ffmpeg 选项。但我无法识别它们!任何纠正此问题的帮助将不胜感激。
谢谢你。

最佳答案

如果您将数据传送到 ffmpeg进程,总是关闭stdin先等待ffmpeg过程自行完成。这对于 MP4 格式尤其重要,但总的来说这是一个很好的做法。
MP4 和 MKV 之间的主要区别之一是 MP4 将其流信息(又名 MOOV 数据包)存储在 文件结尾默认。因此,如果您过早地终止 ffmpeg(例如,在将最后一帧写入管道之后),您就没有给 ffmpeg 写入 MOOV 数据包的机会,这会导致文件不可用。

关于video - FFmpeg 管道输入,从 WebM 转码到 MP4 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72068769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com