我有一个 mp4 视频文件,我想使用 avfoundation 在 iOS 中播放它。不幸的是,即使该文件具有h264视频编解码器和aac音频编解码器,该文件也无法播放且无法保存到默认图库(照片)中。而且只有当我使用 ffmpeg 重新编码它时才能播放。我想知道为什么文件只有在重新编码视频后才能播放?
当应用这些命令时,文件可以使用 avfoundation 播放:
ffmpeg -y -hide_banner -i originalFile.mp4 -f mp4 -vcodec h264 -vf scale=out_color_matrix=bt709 -color_primaries bt709 -color_trc bt709 -colorspace bt709 -b:v 5703k -acodec aac -b:a 249k outputFile.mp4
ffmpeg -y -hide_banner -i originalFile.mp4 -f mp4 -vcodec h264 -acodec aac outputFile.mp4
应用此命令时,文件无法使用 avfoundation 播放:
ffmpeg -y -hide_banner -i originalFile.mp4 -f mp4 -vcodec copy -acodec aac outputFile.mp4originalFile.mp4 文件链接: https : //drive.google.com/file/d/1-yZFL0EsLztMIfwU79Al6dv8gdwJyGAD/view?usp=sharing
两个文件的 ffprobe …
我正在用 ffmpeg 创建四个视频,然后我用 MP4parser 附加它们。我使用 ffmpeg 创建的四个视频的详细信息。
[-loop, 1, -i, Count_1627453922.jpg, -s, 720x1280, -vf, format=yuv420p,fps=25,fade=type=in:duration=1,fade=type=out:duration=1:start_time=1, -t, 2, -preset, ultrafast, CountImageVideo_1627453922.mp4]
Run Code Online (Sandbox Code Playgroud)
[-i, footages_5_1624263519549.mp4, -ss, 00:00:00, -to, 00:00:02, -s, 720x1280, -r, 25, -preset, ultrafast, One_1627453926.mp4]
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试使用 MP4Parser 附加所有这些视频并出现以下错误:
java.io.IOException: Cannot merge VisualSampleEntry[com.googlecode.mp4parser.boxes.mp4.ESDescriptorBox@f3f76444] and VisualSampleEntry[com.googlecode.mp4parser.boxes.mp4.ESDescriptorBox@e20a2ed0]
at com.googlecode.mp4parser.authoring.tracks.AppendTrack.mergeStsds(AppendTrack.java:116)
at com.googlecode.mp4parser.authoring.tracks.AppendTrack.<init>(AppendTrack.java:59)
Run Code Online (Sandbox Code Playgroud)
我做了一些调试,发现了一些可以帮助更好地理解错误的东西。 两个视频的示例描述框
两个视频轨道具有不同的格式(MP4v 和 AVC1)。我是 ffmpeg 和 MP4parser 的新手,所以没有明白我做错了什么。谢谢!提前。
所有视频创建 ffmpeg 命令的日志和 mp4parser 的错误
Copyright (c) 2000-2020 the FFmpeg developers
I: built with Android (6454773 based …Run Code Online (Sandbox Code Playgroud) 我们正在尝试使用 FFmpeg 绘制文本来支持印地语字体。但有些字符无法正确渲染。
\n使用的印地语语言字体文件:- https://fonts.google.com/specimen/Khula
\nInput string :- **\xe0\xa4\x9c\xe0\xa4\xbf\xe0\xa4\xa8\xe0\xa5\x8d\xe0\xa4\xa6\xe0\xa4\x97\xe0\xa5\x80 \xe0\xa4\xb8\xe0\xa4\xbf\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xab \xe0\xa4\xb9\xe0\xa4\x95\xe0\xa5\x80\xe0\xa5\x98\xe0\xa4\xa4 \xe0\xa4\xb9\xe0\xa5\x88 \xe0\xa4\xb9\xe0\xa4\x95\xe0\xa5\x80\xe0\xa5\x98\xe0\xa4\xa4 \xe0\xa4\xb8\xe0\xa4\xae\xe0\xa4\x9d\xe0\xa5\x8b,**\nRun Code Online (Sandbox Code Playgroud)\n但输出呈现为\n代码输出
\n我想要一些完美的解决方案来应用资产字体FFmpeg.
先感谢您。
\n实际上,我ffmpeg-kit在 React Native 项目中用于多种目的,例如水平合并两个、修剪、从视频中获取音频等。因此,我首先创建本地路径,然后将其传递给 ffmpeg 命令,现在我想获取编码文件的实际 Url 让我向你展示我的代码:
const _makeDuet = async (firstVideo, secondVideo) => {
// console.log(firstVideo,secondVideo)
setmodalvisible(true)
const path = `${RNFS.MainBundlePath}`
let filepath = RNFS.ExternalDirectoryPath + '/panting_duet' + Date.now() + '.mp4'
let cmd2 = `-i ${secondVideo} -i ${secondVideo} -filter_complex [0:v][1:v]hstack=inputs=2:shortest=1[outv] -r 25 -b:v 8M -minrate 6M -maxrate 8M -bufsize 4M -map 1:a -shortest -map [outv] ${filepath}`
// const path = `${RNFS.MainBundlePath}/intro.mp4`
// let filepath = RNFS.ExternalStorageDirectoryPath+'/panting_videos'+Date.now()+'.mp3'
// let mkdir = RNFS.mkdir("panting")
// console.log(filepath)
await FFmpegKit.executeAsync(cmd2, async …Run Code Online (Sandbox Code Playgroud) ffmpeg ×4
android ×1
avfoundation ×1
custom-font ×1
ios ×1
mp4parser ×1
react-native ×1
reactjs ×1
video ×1