使用ffmpeg丢弃容器中的数据流

5
我将尝试使用ffmpeg从Mp4容器中删除数据(字幕)流,以下是ffprobe的截图:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.m4v':
Metadata:
major_brand     : isom
minor_version   : 2
compatible_brands: isomiso2avc1mp41
creation_time   : 2018-01-19T15:10:48.000000Z
Duration: 00:00:42.17, start: 0.000000, bitrate: 6260 kb/s
Chapter #0:0: start 0.000000, end 42.166000
Metadata:
  title           : Chapter 1
Stream #0:0(eng): Data: bin_data (text / 0x74786574), 0 kb/s (default)
Metadata:
  creation_time   : 2018-01-19T15:10:48.000000Z
  handler_name    : Apple Alias Data Handler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, 
fltp, 317 kb/s (default)
Metadata:
  creation_time   : 2018-01-19T15:10:48.000000Z
  handler_name    : AAC audio
Stream #0:2(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 
1920x1080, 5926 kb/s, 30 fps, 30 tbr, 30k tbn, 60k tbc (default)
Metadata:
  creation_time   : 2018-01-19T15:10:48.000000Z
  handler_name    : H264 video
 **Unsupported codec with id 100359 for input stream 0**

我尝试了:
 ffmpeg -i test.m4v -acodec copy -vcodec copy -sn nodata.mp4

数据轨道仍然存在,只是从流0移动到流2。

我也尝试了:

 ffmpeg -i test.m4v -acodec copy -vcodec copy -map 0:1 -map 0:2 no2.mp4

同样的结果,音轨仍然存在,只是跳到了流0:2,没有运气。有什么提示吗?提前感谢。

请分享最后一个命令的完整控制台输出。 - Gyan
2个回答

7

相比于使用 -map_chapters -1 命令,建议使用这个命令:

ffmpeg -i in.mp4 -c copy -dn -map_metadata:c -1 out.mp4

-dn 选项表示我们不需要将数据流从 in.mp4 复制到 out.mp4。如果源文件中有数据流,则此选项是必需的。但即使源文件中没有数据流,ffmpeg 也会将一个数据流附加到输出文件中以保留章节元数据信息(章节名称)。这使得播放器可以命名每个章节。

如果您不需要它,您的章节可能没有名称。使用 -map_chapters -1 可以完全删除章节,使视频流中失去所有章节。但如果您只是想不包含数据流,可以使用 -map_metadata:c -1 保留章节并只丢失它们的名称。这可能是一个更好、更少破坏性的想法。

供参考:

-dn (output)
    Disable data recording. For full manual control see the "-map" option.

生成的文件中将显示“引用的QT章节轨道未找到”字样,但可以使用“-ignore_chapters 1”忽略此问题。参考链接 - malat

6

感谢您的询问,我使用了-map_chapters选项并设置为负值来移除数据流。

完整字符串:

ffmpeg -i in.mp4 -c:v copy -c:a copy -map_chapters -1 out.mp4 

希望这能帮助到其他人!

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