使用ffmpeg提取视频流

4
我试图从bbb-1920x1080-cfg02.mkv 中提取视频流。命令如下。
ffmpeg -i bbb-1920x1080-cfg02.mkv -map 0:0 -c copy bbb.mkv

然而输出文件不能在播放器(potplayer)中播放。

我使用ffmpeg -i bbb.mkv检查信息发现有很多错误信息。

ffmpeg version N-80680-ga887fbb Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
configuration: --enable-vaapi --disable-vda --disable-vdpau --disable-libxcb  --disable-ffplay --disable-ffserver --disable-ffprobe --disable-indev=jack --disable-outdev=sdl --enable-libx264 --enable-libx265 --enable-gpl --disable-libxcb --disable-libxcb-shm --disable-libxcb-xfixes --disable-libxcb-shape --disable-x11grab
libavutil      55. 26.100 / 55. 26.100
libavcodec     57. 46.100 / 57. 46.100
libavformat    57. 40.101 / 57. 40.101
libavdevice    57.  0.101 / 57.  0.101
libavfilter     6. 46.102 /  6. 46.102
libswscale      4.  1.100 /  4.  1.100
libswresample   2.  1.100 /  2.  1.100
libpostproc    54.  0.100 / 54.  0.100
[hevc @ 0x3a64a60] No start code is found.
[hevc @ 0x3a64a60] Error splitting the input into NAL units.
[hevc @ 0x3a64a60] No start code is found.

即使我只是复制源文件。
ffmpeg -i bbb-1920x1080-cfg02.mkv -map 0 -c copy bbb.mkv

输出文件(bbb.mkv)仍无法在播放器(potplayer)中播放,仍然出现“[hevc @ 0x3a64a60]未找到起始码”的错误。
根据文档所述,它只是封装了matroska格式,没有做其他处理。
有没有人能教我如何解决这个问题?
谢谢。
2个回答

6

您需要使用比特流过滤器。似乎FFmpeg在没有它的情况下无法正确写入编解码器标签。

ffmpeg -i bbb-1920x1080-cfg02.mkv -map 0:0 -c copy -vbsf hevc_mp4toannexb bbb.mkv

当处理HEVC流时,最好添加“-vbsf hevc_mptoannexb”吗? - user1395066
在流复制时需要,但在编码时不需要。 - Gyan

0

我尝试了Gyan的ffmpeg解决方案,但对我没有用。我还必须指定格式。以下是我获取H.265比特流的方法。此外,我看到有些人建议将输出文件扩展名设置为.bin,但我喜欢h264 / h265,因为它更清楚地说明文件包含哪种比特流。

H.265转换为Annex B

ffmpeg -i test.mkv -c:v copy -bsf hevc_mp4toannexb -f hevc test.h265

H.264 转 Annex B

ffmpeg -i test.mkv -c:v copy -bsf h264_mp4toannexb -f h264 test.h264

注意:这也适用于 .mov 文件,可能也适用于其他格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接