python - 使用子进程从python执行ffmpeg命令

标签 python ffmpeg

以下命令在命令行中可以正常工作:

ffmpeg -y -threads 4 -i /dev/video0 -filter_complex "[v:0]scale=-2:720:force_original_aspect_ratio=decrease[vout001]" -c:v libx264 -b:v 2800k -maxrate:v 2996k -bufsize:v 4200k -c:a aac -b:a 128k -ac 2 -ar 48000 -preset veryfast -x264opts keyint=25:min-keyint=25:no-scenecut -sc_threshold 0 -r 25 -pix_fmt yuv420p -segment_list_flags +live -map [vout001] -f tee -var_stream_map 'v:0' "[f=hls:hls_time=1:hls_playlist_type=event:strftime=1:hls_flags=independent_segments+program_date_time+second_level_segment_index:hls_segment_filename='segment_%%06d_%Y%m%d%H%M%S.ts']playlist.m3u8|[f=hls:hls_time=1:hls_playlist_type=event:strftime=1:hls_flags=independent_segments+program_date_time+second_level_segment_index:hls_segment_filename=\'http://X.X.X.X:pppp/ABCD/segment_%%06d_%Y%m%d%H%M%S.ts\':method=PUT]http://X.X.X.X:pppp/ABCD/playlist.m3u8"

但是,当我使用以下命令通过子进程从 python 代码执行它时,它会引发错误:

cmd_ffmpeg = ['ffmpeg', '-y', '-threads', '4', '-i', '/dev/video0', '-filter_complex', '[v:0]scale=-2:720:force_original_aspect_ratio=decrease[vout001]', '-c:v', 'libx264', '-b:v', '2800k', '-maxrate:v', '2996k', '-bufsize:v', '4200k', '-c:a', 'aac', '-b:a', '128k', '-ac', '2', '-ar', '48000', '-preset', 'veryfast', '-x264opts', 'keyint=25:min-keyint=25:no-scenecut', '-sc_threshold', '0', '-r', '25', '-pix_fmt', 'yuv420p', '-segment_list_flags', '+live', '-map', '[vout001]', '-f', 'tee', '"[f=hls:hls_time=1:hls_playlist_type=event:strftime=1:hls_flags=independent_segments+program_date_time+second_level_segment_index:hls_segment_filename=\'segment_%%06d_%Y%m%d%H%M%S.ts\']playlist.m3u8|[f=hls:hls_time=1:hls_playlist_type=event:strftime=1:hls_flags=independent_segments+program_date_time+second_level_segment_index:hls_segment_filename=\'http://X.X.X.X:pppp/ABCD/segment_%%06d_%Y%m%d%H%M%S.ts\':method=PUT]http://X.X.X.X:pppp/ABCD/playlist.m3u8"']

错误如下:
No option found near "//X.X.X.X:pppp/ABCD/segment_%%06d_%Y%m%d%H%M%S.ts":method=PUT]http://X.X.X.X:pppp/ABCD/playlist.m3u8"

当它从 python 代码执行时,它认为 'http' 之后的 ':' 作为选项分隔符(转义不起作用),而当直接从 shell 执行时,转义工作正常。

我该如何解决这个问题?

最佳答案

长字符串周围的双引号在 ffmpeg 之前被 shell 丢弃。看到命令行。您可以在 Python 中简单地将它们替换为单引号。在单引号内使用文字双引号会导致 ffmpeg 出现问题。选项解析器。

关于python - 使用子进程从python执行ffmpeg命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56671813/

相关文章:

javascript - 如何使用nodejs在服务器端将javascript动画转换为视频?

ffmpeg - 如何将当前目录中 .jpg 和 .png 类型的所有图像转换为 FFmpeg 中的视频?

python - 在 Python 中更快地遍历列表

Python 嵌套列表加入查找引用列表

c# - 如何使用 ffmpeg C# 将捕获的图像帧流式传输到 rtmp 服务器

windows - 如何创建 FFMPEG VIDSTAB 批处理脚本 Windows

ffmpeg - 防止 FFMPEG 跳过过期帧

python - 在家庭服务器上处理 Stripe 付款时出现禁止 (403) 错误

python - 在离线模式下删除 "Save and edit plot in cloud"- 按钮

python - 向mysql中插入多条Scrapy数据