鱼C论坛

 找回密码
 立即注册
查看: 103|回复: 5

[已解决]这个ffmpeg压字幕的命令哪里不对呢?

[复制链接]
发表于 2024-6-2 00:48:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
command = f'ffmpeg -y -i {video} -i {srtPath} '   
        command += '-map 0:v '
        # 音频流
        command += '-map 1:a '
        command += '-c:v libx264 -c:a aac -b:v 3000k -b:a 128k '
        command += f'-vf "subtitles={srtPath}:force_style=\'Fontsize=10,Fontname=黑体,Spacing=0\'" '
        command += f'{outputFileNameAndPath}'
        os.system(f"""{command}""")

告警如下:
Input #1, srt, from '/home/dengz/pytvzhen-master/test/w7dBxx3CvZE_zh_merge.srt_break.srt':
  Duration: N/A, bitrate: N/A
  Stream #1:0: Subtitle: subrip
Stream map '1:a' matches no streams.
To ignore this, add a trailing '?' to the map.
最佳答案
2024-6-2 00:49:01
根据您提供的信息,错误提示是"Stream map '1:a' matches no streams",意思是在命令的音频流映射部分出错了。

这个问题可能是由于视频文件中没有音频流导致的。您可以先检查一下视频文件是否包含音频。如果没有音频,您可以尝试移除命令中的音频流映射部分,只保留视频流映射部分。修改后的代码如下:
command = f'ffmpeg -y -i {video} -i {srtPath} '   
command += '-map 0:v ' 
# command += '-map 1:a '
command += '-c:v libx264 -b:v 3000k '
command += f'-vf "subtitles={srtPath}:force_style=\'Fontsize=10,Fontname=黑体,Spacing=0\'" '
command += f'{outputFileNameAndPath}'
os.system(f"""{command}""")

这样修改后,ffmpeg命令将仅处理视频流,并忽略音频流。请注意,如果您确实需要处理音频流,请确保输入视频文件中包含音频流,或者使用合适的音频文件进行测试。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-6-2 00:49:01 | 显示全部楼层    本楼为最佳答案   
根据您提供的信息,错误提示是"Stream map '1:a' matches no streams",意思是在命令的音频流映射部分出错了。

这个问题可能是由于视频文件中没有音频流导致的。您可以先检查一下视频文件是否包含音频。如果没有音频,您可以尝试移除命令中的音频流映射部分,只保留视频流映射部分。修改后的代码如下:
command = f'ffmpeg -y -i {video} -i {srtPath} '   
command += '-map 0:v ' 
# command += '-map 1:a '
command += '-c:v libx264 -b:v 3000k '
command += f'-vf "subtitles={srtPath}:force_style=\'Fontsize=10,Fontname=黑体,Spacing=0\'" '
command += f'{outputFileNameAndPath}'
os.system(f"""{command}""")

这样修改后,ffmpeg命令将仅处理视频流,并忽略音频流。请注意,如果您确实需要处理音频流,请确保输入视频文件中包含音频流,或者使用合适的音频文件进行测试。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-2 00:51:52 | 显示全部楼层
那如果用以上模板 压制 正常有声音视频的字幕,请给出完整的命令
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-2 00:52:10 | 显示全部楼层
blackantt 发表于 2024-06-02 00:51
那如果用以上模板 压制 正常有声音视频的字幕,请给出 ...


如果您要进行正常有声音视频的字幕压制,可以使用以下完整的命令:
import os

video = "input_video.mp4"  # 输入视频文件路径
srtPath = "subtitle.srt"  # 字幕文件路径
outputFileNameAndPath = "output_video.mp4"  # 输出视频文件路径

command = f'ffmpeg -y -i {video} -i {srtPath} '   
command += '-map 0:v ' 
command += '-map 0:a '
command += '-c:v libx264 -c:a aac -b:v 3000k -b:a 128k '
command += f'-vf "subtitles={srtPath}:force_style=\'Fontsize=10,Fontname=黑体,Spacing=0\'" '
command += f'{outputFileNameAndPath}'
os.system(f"""{command}""")

这个命令将会将输入视频文件和字幕文件进行合并,并输出一个带有字幕的视频文件。请确保您已经正确安装了FFmpeg,并将其添加到系统的环境变量中。

请注意,该命令在压制过程中会重新编码视频和音频流,可能会导致视频质量和音频质量的损失。如果您对视频质量和音频质量有更高要求,可以根据需要调整参数。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-2 01:54:02 | 显示全部楼层
-copy 跟 -map 方法有啥区别呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-2 01:54:12 | 显示全部楼层
blackantt 发表于 2024-06-02 01:54
-copy 跟 -map 方法有啥区别呢?


在FFmpeg中,`-copy`和`-map`都是用于处理输入多媒体文件的选项。

`-copy`选项用于复制输入文件中的指定流,而不进行重新编码。这可以帮助保留原始输入的质量和格式。通常情况下,您需要指定要复制的流类型(如视频、音频、字幕等)。

`-map`选项则用于选择要从输入文件中提取的流,并确定它们在输出文件中的位置。通过`-map`选项,您可以指定要包含哪些流以及它们的顺序。

区别主要在于两个方面:

1. 功能:
   - `-copy`用于直接复制输入流,不对其进行重新编码。
   - `-map`用于选择和映射要处理的流并确定其在输出中的位置。

2. 适用范围:
   - `-copy`适用于想要保留原始输入质量和格式的情况,例如复制无损音频或保留原始帧率和分辨率的视频。
   - `-map`适用于选择和处理多个流的情况,例如只提取特定的视频、音频和字幕等流。

综上所述,您可以使用`-copy`选项来复制流,以保持质量和格式不变。而`-map`选项可以帮助您选择和处理要使用的流,并确定其在输出中的位置。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-22 04:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表