ERROR:Output file #0 does not contain any stream (ffmpeg) - ffmpeg

I am trying to make a thumbnail image from mp4 video using FFmpeg but I am getting the error that
Output #0, image2, to 'output.jpg':
Output file #0 does not contain any stream
the command I used is
ffmpeg -i file_example_MP4_700KB.mp4 -ss 00:00:01 -vf thumbnail,scale=200:115 -qscale:v 2 -frames:v 1 -f image2 -c:v mjpeg output.jpg
and I am not sure what I am doing wrong and I stuck throw it for so long.
Any suggestions will be good
I am using Ubuntu 18.*
full logs:-
ffmpeg version n4.1.4 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 7 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
configuration: --prefix= --prefix=/usr --disable-debug --disable-doc --disable-static --enable-avisynth --enable-cuda --enable-cuvid --enable- libdrm --enable-ffplay --enable-gnutls --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopus --enable-libpulse --enable-sdl2 --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-nonfree --enable-nvenc --enable-omx --enable-openal --enable-opencl --enable-runtime-cpudetect --enable-shared --enable-vaapi --enable-vdpau --enable-version3 --enable-xlib
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Input #0, mp3, from 'file_example_MP3_700KB.mp3':
Metadata:
genre : Cinematic
album : YouTube Audio Library
title : Impact Moderato
artist : Kevin MacLeod
Duration: 00:00:27.25, start: 0.034531, bitrate: 224 kb/s
Stream #0:0: Audio: mp3, 32000 Hz, stereo, fltp, 224 kb/s
Metadata:
encoder : LAME3.99r
Output #0, image2, to 'output.jpg':
Output file #0 does not contain any stream

I had the same problem with:
ffmpeg -i myfile.raw -f s16le -ac 1 -ar 48000 -acodec pcm_s16le output.mp3
The solution was to change the order to:
ffmpeg -f s16le -ac 1 -ar 48000 -acodec pcm_s16le -i input.raw output.mp3

Related

Encoding in h264 with ffmpeg on RTX 3080 fails

I'm trying to convert a 7200x3600 60fps h265 video using my RTX 3080 to the h264 codec because of some compatibility issue with VR.
This command line result in "No NVENC capable devices found" error:
ffmpeg -hwaccel_device 0 -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4
However this command works (for h265):
ffmpeg -hwaccel_device 0 -hwaccel cuda -i input.mp4 -c:v hevc_nvenc output.mp4
Which for me, means that my gpu is 'NVENC capable' but I don't see what to try.
EDIT:
output of ffmpeg -f lavfi -i nullsrc -c:v h264_nvenc -gpu list -f null /dev/null:
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 9.2.1 (GCC) 20200122
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
Input #0, lavfi, from 'nullsrc':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (h264_nvenc))
Press [q] to stop, [?] for help
[h264_nvenc # 0000017e82c22540] [ GPU #0 - < NVIDIA GeForce RTX 3080 > has Compute SM 8.6 ]
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!
For H.264, nvenc has a max. resolution limit of 4096x4096. Use a software encoder like libx264. But note that a resolution of 7200x3600 is beyond the limit of any valid H.264 level so hope your target player doesn't care. Or use HEVC with different parameters.

ffmpeg: kmsgrab to v4l2 loopback device

I've been trying to pipe my screen into a v4l2 loopback device (as a hack to share screen during calls on wayland). This is what I tried so far:
$ sudo modprobe vl42loopback
$ sudo ffmpeg -device /dev/dri/card0 -f kmsgrab -i - -vf 'hwmap=derive_device=vaapi,scale_vaapi=w=1920:h=1080:format=nv12' -f v4l2 /dev/video2
ffmpeg version n4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 10.1.0 (GCC)
configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-avisynth --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
[kmsgrab # 0x55f52ac85380] Using plane 55 to locate framebuffers.
[kmsgrab # 0x55f52ac85380] Template framebuffer is 99: 3840x2160 32bpp 32b depth.
Input #0, kmsgrab, from 'pipe:':
Duration: N/A, start: 1600327750.235546, bitrate: N/A
Stream #0:0: Video: wrapped_avframe, drm_prime, 3840x2160, 29.83 tbr, 1000k tbn, 1000k tbc
Stream mapping:
Stream #0:0 -> #0:0 (wrapped_avframe (native) -> rawvideo (native))
[video4linux2,v4l2 # 0x55f52ac89e40] Unknown V4L2 pixel format equivalent for vaapi_vld
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:0 --
Conversion failed!
Also tried adding -vcodec rawvideo -pix_fmt yuv420p as follows:
sudo ffmpeg -device /dev/dri/card0 -f kmsgrab -i - -vf 'hwmap=derive_device=vaapi,scale_vaapi=w=1920:h=1080:format=nv12' -vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/video2
which failed with:
....
Stream mapping:
Stream #0:0 -> #0:0 (wrapped_avframe (native) -> rawvideo (native))
Impossible to convert between the formats supported by the filter 'Parsed_scale_vaapi_1' and the filter 'auto_scaler_0'
Error reinitializing filters!
Failed to inject frame into filter network: Function not implemented
Error while processing the decoded data for stream #0:0
Conversion failed!
How can I get this working?

Is it possible to merge 3 videos with ffmpeg by -f concat and crossfade without video content

I want to merge 3 .mov files quickly without losing any resolution. I want to be able to distinguish the 3 pieces of videos after merge.
"ffmpeg -f concat" does not lose resolution and quick without crossfade.
But, I can't distinguish 3 videos.
As far as I know ffmpeg filter can be used add crossfade, but it have to use video start/end content to do the merger, which might involve transcoding. It won't be fast compared with 'concat', which won't do transcoding, but simply copying.
Here is the content (ffmpeg -i video.mov) of one of 3 videos:
ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
built with Apple LLVM version 10.0.1 (clang-1001.0.46.3)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1.3 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home/include/darwin' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-videotoolbox --disable-libjack --disable-indev=jack --enable-libaom --enable-libsoxr
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '..../(edited)/VMEK8375.MOV':
Metadata:
major_brand : qt
minor_version : 0
compatible_brands: qt
creation_time : 2019-06-30T01:28:04.000000Z
com.apple.quicktime.model: iPhone
com.apple.quicktime.software: ZHIYUN
com.apple.quicktime.creationdate: 2019-06-30T09:28:04Z
Duration: 00:00:07.61, start: 0.000000, bitrate: 4386 kb/s
Stream #0:0(und): Video: hevc (Main) (hvc1 / 0x31637668), yuv420p(tv, smpte170m/bt709/bt709), 1280x720, 4329 kb/s, 30.01 fps, 30 tbr, 600 tbn, 600 tbc (default)
Metadata:
creation_time : 2019-06-30T01:28:04.000000Z
handler_name : Core Media Video
encoder : HEVC
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 94 kb/s (default)
Metadata:
creation_time : 2019-06-30T01:28:04.000000Z
handler_name : Core Media Audio
If I don't care about crossfade with video content, just some 'nice' black screen in between (It would be nice I add some text, like date + time on the black screen) is good enough for me. Is it possible to do 'concat' and simple crossfade without video 'content'?
Filtering requires re-encoding, so fading is not an option. Instead you can make videos that go between the main content.
Create middle videos. Ensure that you match the attributes of the main videos:
ffmpeg -y -f lavfi -i color=c=black:s=1280x720:r=30 -f lavfi -i anullsrc=channel_layout=mono:sample_rate=44100 -vf "drawtext=text='your text':fontsize=24:fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2" -c:v libx265 -profile:v main -c:a aac -tag:v hvc1 -t 5 -video_track_timescale 600 black1.mov
Make input.txt:
file '1.mov'
file 'black1.mov'
file '2.mov'
file 'black2.mov'
file '3.mov'
Then use concat demuxer:
ffmpeg -f concat -i input.txt -c copy output.mov

Raspberry pi live stream to youtube stopped working

I have a working setup for streaming a video to youtube with my raspberry pi 3.
It was work until yesterday. Nothing changed but I have an error when I try to start the stream.
Running the following command:
raspivid -o - -t 0 -w 1280 -h 720 -p -hf -fps 25 -b 2560000 | avconv -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264 -i - -vcodec copy -acodec aac -ab 128k -g 50 -strict experimental -f flv rtmp://a.rtmp.youtube.com/live2/my_key
And get this error:
ffmpeg version 3.2.10-1~deb9u1+rpt1 Copyright (c) 2000-2018 the FFmpeg
developers built with gcc 6.3.0 (Raspbian 6.3.0-18+rpi1) 20170516
configuration: --prefix=/usr --extra-version='1~deb9u1+rpt1'
--toolchain=hardened --libdir=/usr/lib/arm-linux-gnueabihf --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx-rpi --enable-mmal --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared libavutil 55. 34.101 / 55. 34.101 libavcodec 57. 64.101 / 57. 64.101 libavformat 57. 56.101 / 57. 56.101 libavdevice 57. 1.100 /
57. 1.100 libavfilter 6. 65.100 / 6. 65.100 libavresample 3. 1. 0 / 3. 1. 0 libswscale 4. 2.100 / 4. 2.100 libswresample 2. 3.100 / 2. 3.100 libpostproc 54. 1.100 /
54. 1.100 Guessed Channel Layout for Input Stream #0.0 : stereo Input #0, s16le, from '/dev/zero': Duration: N/A, bitrate: 1411 kb/s
Stream #0:0: Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s Input #1, h264, from 'pipe:': Duration: N/A, bitrate: N/A
Stream #1:0: Video: h264 (High), yuv420p(progressive), 1280x720, 25 fps, 25 tbr, 1200k tbn, 50 tbc
rtmp://a.rtmp.youtube.com/live2/my_key: Input/output error
It worked more over a month, but now (I don't know why) stopped working.
Can anyone help me?
Cheers,
Greg
I figured it out!
If you have the same problem just go to youtube stream now / encoder setup / stream name/key, push the reveal button and then the reset button to get a new stream name/key string.
Use the new key!

ffmpeg command gives error when used in python

When I run this command from the shell it works perfectly.
ffmpeg -nostdin -i /data/binil/v2t_final/output/cnbctv18/2018_07_02_14_38_30/tmp/merged.avi -ss 00:00:00 -vcodec h264 -vf fps=25 -to 00:6:43 /data/binil/v2t_final/output/cnbctv18/2018_07_02_14_38_30/1/1.avi
But the same thing when I do in python it gives error:
import sys
import os
INPUT_DIR = sys.argv[1]
INPUT_VIDEO = sys.argv[2]
OUTPUT_PATH = sys.argv[3]
SOURCE = sys.argv[4]
DATE = sys.argv[5]
INPUT = INPUT_DIR+"sorted_result.txt"
COUNT=1
initial="00:00:00"
with open(INPUT,"r") as f:
for line in f.readlines():
OUT_DIR = OUTPUT_PATH+str(COUNT)
directory = os.path.abspath(OUT_DIR)
print('OUT DIR',OUT_DIR)
print('directory',directory)
try:
os.mkdir(directory)
except:
pass
cmd_1 = "ffmpeg -nostdin -i "+INPUT_VIDEO+" -ss " +initial+ " -vcodec h264 -vf fps=25 -to " +line+ " " +OUT_DIR+"/"+str(COUNT)+".avi"
os.system(cmd_1)
COUNT += 1
initial=line
I cant understand the problem:
The error is as follows:
ffmpeg version 4.0-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-6 --enable-libxml2 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg
libavutil 56. 14.100 / 56. 14.100
libavcodec 58. 18.100 / 58. 18.100
libavformat 58. 12.100 / 58. 12.100
libavdevice 58. 3.100 / 58. 3.100
libavfilter 7. 16.100 / 7. 16.100
libswscale 5. 1.100 / 5. 1.100
libswresample 3. 1.100 / 3. 1.100
libpostproc 55. 1.100 / 55. 1.100
Trailing options were found on the commandline.
Input #0, avi, from '/data/binil/v2t_final/output/cnbctv18/2018_07_02_14_38_30/tmp/merged.avi':
Metadata:
encoder : Lavf58.12.100
Duration: 01:00:50.23, start: 0.000000, bitrate: 1334 kb/s
Stream #0:0: Video: h264 (High) (H264 / 0x34363248), yuv420p(progressive), 512x288 [SAR 1:1 DAR 16:9], 1001 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc
Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 639 kb/s
At least one output file must be specified
sh: line 1: /data/binil/v2t_final/output/cnbctv18/2018_07_02_14_38_30/1/1.avi: Permission denied
Please help.
This is some dummy text I am writing because it looks like stack overflow does not accept less description and more code. Please don't mind these sentences. I cant believe that I am still writing this and it is still requesting me to add some more description. I am still doing it. Don't know till what extent do I have to write. I hope this much is enough.
Got the error.
The input file contains timestamps each one on a new line so it was taking the '\n' character along with the timestamp in the ffmpeg command. Hence it considered -vcodec as a new command and resulted in error.

Resources