ffmpeg - 如何让 ffmpeg 编码一次并复用两次,以及选项?
问题描述
我已经阅读了-f tee
,但我无法理解如何做我想做的事。
我想读入一个音频文件,编码一次,然后转储一个 mp3 文件以及 mp3 HLS 段。换句话说,单独的命令将是:
$ cat file.wav | ffmpeg -y -i pipe:0 -c:a libmp3lame -q:a 0 -map 0:0 -f segment -segment_time 10 -segment_list /tmp/segments.m3u8 -segment_format mpegts -vn /tmp/segment_%03d.ts
和
$ cat file.wav | ffmpeg -y -i pipe:0 -c:a libmp3lame -q:a 1 /tmp/working.mp3
(注意第二个命令中不同的 qscale 值)
我不太清楚如何对每个输出应用不同的命令行选项。
编辑:我更接近解决方案,我认为:
$ ffmpeg -y -i pipe:0 -c:a libmp3lame -map 0:0 -f tee -vn '[q\:a=1]/tmp/working.mp3|[q\:a=0:f=segment:segment_time=10:segment_list=/tmp/segments.m3u8:segment_format=mpegts]/tmp/segment_%03d.ts'
但是通过转义q\:a
不起作用:
[tee @ 0x7fe897815600] No option found near "q:a=1]/tmp/working.mp3"
[tee @ 0x7fe897815600] Slave muxer #0 failed: Invalid argument, continuing with 1/2 slaves.
[tee @ 0x7fe897815600] No option found near "q:a=0:f=segment:segment_time=10:segment_list=/tmp/segments.m3u8:segment_format=mpegts]/tmp/segment_%03d.ts"
[tee @ 0x7fe897815600] All tee outputs failed.
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:0 --
Conversion failed!
解决方案
如果你编码一次,你不能有两个 q:a 值——只有一个编码实例。您可以简单地编码两次并在一个命令中复用两个输出。
$ cat file.wav | ffmpeg -y -i pipe:0 -c:a libmp3lame -q:a 0 -map 0:0 -f segment -segment_time 10 -segment_list /tmp/segments.m3u8 -segment_format mpegts -vn /tmp/segment_%03d.ts -c:a libmp3lame -q:a 1 /tmp/working.mp3
推荐阅读
- javascript - 为 iframe 中的每个元素重放滚动事件
- java - 如果我暂停计时器,我会在计时器中遇到问题,它不会从停止的地方开始
- c++ - Visual Studio 2019 无法正确处理动态结构数组的聚合初始化
- python-3.x - Python/Pandas - ValueError:传递值的形状
- angular - 如何使用 Observable 在 Angular8 中过滤具有多个条件的数组?
- javascript - 即使组件已安装,也未安装 setState 警告
- javascript - 复选框不会附加
- javascript - 单击jQuery中的按钮时,是否有解决Asp.Net gridview行数据传输到某些特定文本框的解决方案?
- python - 在 exec 节点中传递有效负载值
- php - Symfony 4中用户密码的自定义表单